1. 前言
互聯網行業因為廣為人知的高薪以及相對于傳統工科行業更多的發展機會,最近幾年涌入了越來越多的非計算機專業畢業的從業人員,校招 / 社招面試的時候,候選人往往也會被分為兩種:科班和非科班,互聯網科班一般特指大學就讀計算機科學與技術或者軟件專業,非科班則包含其他各大傳統工科甚至是文科專業。
某些大廠在招聘后端開發工程師時會嚴格要求科班背景,因為對于非科班的同學,一般都能勝任計算機網絡應用層以上的工作(例如編寫一個低并發的后臺管理系統),但是對于計算機底層的知識往往是一片盲區。當對計算機網絡了解甚少的非科班同學遇到線上問題時,或者網絡通信相關的運維故障,往往會束手無策。
所以了解計算機底層如何運作是非常有必要的,我們這里談到的計算機底層知識,包括但不限于:
- 計算機組成:CPU 運行的原理,內存、硬盤等各種硬件如何協調合作;
- 操作系統:支撐后端框架的系統,具體做了哪些操作;
- 編譯原理:對于 Java 、C++ 這類高級語言,如何經過編譯,轉換為匯編語言以及二進制文件;
- 計算機網絡:計算機與計算機之間如何進行通信。
從本小節開始,我們會開始學習計算機網絡相關的面試題目,并且在熟悉題目的同時,掌握計算機網絡的基本知識框架。
2. 計算機網絡如何分層
面試官提問: 你了解計算機網絡的分層模型嗎?其中每一層有哪些常見的協議?
題目解析: 這個題目需要拆分為兩個關鍵點分析:
(1)計算機網絡是如何分層的?闡述 OSI 七層協議和通用五層協議的區別。
(2)分層后的每一層支持哪些協議?主要會涉及到后端開發過程中常用的協議。
2.1 分層模型總覽
首先,我們都知道最基礎的分層協議是計算機網絡 OSI(Open System Interconnection)體系。OSI 模型如上圖(a)所示,網絡結構被拆分為 7 層,自頂向下分別是應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層以及物理層。但是 OSI 模型是一種概念模型,雖然理論比較完整,并不實用。
TCP/IP 體系如上圖(c)所示,包含了應用層、傳輸層、網絡層以及網絡接口層,不過我們一般關注上面三層的內容,最下層及網絡接口層沒有實質性的協議。TCP/IP 體系分層就是我們實際應用中的網絡協議。
作為 OSI 七層協議和 TCP/IP 四層協議的折中,還有一種是五層協議的體系,往往是面試中考察的重點。
五層協議,如上圖中(b)所示,自頂向下分為應用層、傳輸層、網絡層、數據鏈路層以及物理層,下面我們將詳細闡述每層的作用以及代表協議。
2.2 分層定義以及常見協議
在畫出了計算機網絡的分層模型之后,我們還需要向面試官解釋每一層的定義以及介紹常見的協議。
2.2.1 應用層
應用層(Application Layer)是 5 層協議的頂層,顧名思義,應用層的作用是通過操作系統中應用進程(例如電子郵件、瀏覽器文件傳輸)提供網絡交互。
應用層最常被問到的是 HTTP 協議和 DNS 域名解析協議(在之后的小節我們會詳細講解相關題目),其次還有一些后端開發過程中可能會接觸的協議,例如支持文件傳輸的 FTP 協議(例如需要從 Windows 開發機傳輸文件到 Linux 服務器時使用),以及支持電子郵件的 SMTP 協議(例如需要開發電子郵件讀寫的相關爬蟲時需要開放郵箱的 SMTP 協議)。
2.2.2 傳輸層
傳輸層(Transport Layer)主要是為了實現端口到端口(port to port)的通信,計算機的不同進程都會被分配不同的端口,例如域名默認的 80 端口。從接收和發送信息的角度可以分為兩大功能:
- 復用:把操作系統的多個進程利用一個傳輸層接口發送信息;
- 分用:把收到的信息利用傳輸層接口分發到操作系統的不同進程。
傳輸層涉及到兩個常見的協議,幾乎是面試必考協議:
- 傳輸控制協議(TCP,Transmission Control Protocol):特點是面向連接,基于報文段傳輸,能夠保證消息可靠交付的協議;
- 用戶數據包協議(UDP,User Datagram Protocol):特點是無連接,基于用戶數據報傳輸,不保證消息可靠交付,只盡 "最大努力交付"。
2.2.3 網絡層
計算機之間的通信可以分為位于同一個子網絡(也就是局域網,Local Area Network)和位于不同的子網絡(廣域網,Wide Area Network),網絡層協議解決的問題就是如何判斷兩臺計算機是否屬于同一個子網絡中。
-
網絡層最常涉及的協議是 IP 協議 ,就是 TCP/IP 協議族中的 IP 網絡協議,可見其重要性。
-
此外,還有和 IP 協議相關的 ARP(Address Resolution Protocol,地址解析協議),以太網的數據傳輸最直接依賴的是 MAC 地址,ARP 協議的作用就是將 IP 地址轉換為 MAC 地址。
2.2.4 數據鏈路層
數據鏈路層(Data-Link Layer)位于物理層和網絡層之間,對于兩個不同主機之間的數據傳輸,可能會經過多個路由器中轉,中間的這條鏈路就是我們關注的重點,我們把兩個主機抽象為兩個點,鏈路層協議解決的問題就是 "點對點" 的數據傳輸。
數據鏈路層將網絡層交付的 IP 數據包封裝成幀(Frame),其中每一幀包括了數據以及必要的控制信息(比如同步信息、尋址信息、差錯控制信息),這種設計方案非常類似 TCP 協議中的控制位(由此也能看出計算機網絡設計的互通性)。如果通過差錯控制信息校驗出了錯誤,那么就會在本層丟棄這個幀,糾正錯誤是通過網絡層的 TCP 協議完成。
PPP 協議(Point to Point Protocol):在兩個點之間傳輸數據包的協議,因為本層涉及的協議在面試中考察甚少,基本可以只做簡單了解。
2.2.5 物理層
物理層(Physical Layer)是 5 層協議模型中最底層的協議,就是通過物理手段(例如網線,電纜)將計算機連接起來,提供信息傳輸的物理媒介,數據由 0 和 1 二進制信號構成,傳輸單元是比特位。因為關于物理層的研究更偏向于通信相關的原理,我們只需要了解本層的定義即可。
3. 小結
本節給大家講解了掌握計算機底層知識的重要性,以及對計算機網絡 OSI 協議模型和五層協議模型進行了拆分講解,主要關注點在于應用層以及傳輸層的相關協議。