網絡層的傳輸單位是數據報(包),任務是為不同網絡主機之間提供通信服務,把數據從源端傳到目的端。使用 IP 地址來標識網絡上的設備。
?一.計算機網絡的分層
在計算機網絡體系中,采用層次化的思想,將通信協議中必要的功能進行分層,每一層都接收由它下一層所提供的特定服務,并且負責為自己的上一層提供特定的服務。上下層之間進行交互所遵循的約定叫做『接口』,同一層之間進行交互所遵循的約定叫做『協議』。
- 『接口』即相鄰兩層之間交換位置的連接點,是上層使用下層服務的入口。
- 『協議』即通信雙方所做的一些約定,比如怎么開始通信、信息的格式與順序、怎么結束通信等。協議非常重要,我們在學習計算機網絡過程中,重點就是理解各種協議,如 HTTP、DNS、TCP 等。只有通信雙方同時支持相同協議,才能進行通信。就像人類之間通信交流一樣,假如一個人只會英文,那么給他說中文,就會不知所云。
計算機網絡為什么要采用分層模型呢?主要原因在于分層存在以下優勢:
- 分層是軟件設計中的一個常見套路,它也是一種常見解耦的思路,可以有效減少程序中出現『牽一發而動全身』的情況。將每個分層獨立使用,靈活性更強,即使系統中某些分層發生變化,也不會波及整個系統。
- 分層也可以將復雜的網絡問題分解為許多比較小的、界線比較清晰簡單的部分來處理,從而更易于單獨實現每個分層的協議,并界定各個分層的具體責任和義務。
當然也不是分層越多越好,即分層可能也存在一些劣勢,比如有時可能會過分模塊化,使處理變得更加沉重以及不同模塊可能要處理相似的邏輯,從而出現冗余等問題。
二.常見參考模型
在計算機通信的初期,每家計算機廠商都生產各自的網絡產品來實現計算機通信。而由于缺乏標準化,不同廠商設定的各種協議之間不兼容,無法跨廠商通信,非常不方便。
為了解決上述問題,國際標準化組織 ISO 制定了一個國際標準 OSI 參考模型 ,將計算機網絡體系劃分為 7 層,對通信系統進行了標準化。此模型概念清晰,但非常復雜,實現較為困難,并沒有得到普及。
出于實用的目的, ARPA 提出了 TCP/IP 參考模型(其實比 OSI 模型出現更早),將計算機網絡劃分為 4 層。此模型在標準制定過程中將真正能夠實現通信的技術作為首要任務(更看重的是如何實現,而不是理論),并且一旦發現有什么問題,就及時修改程序、協議或相應文檔,模型更加簡潔,且實用性更強,最終成為了業界標準。但是 TCP/IP 最下面的網絡接口層概念并不清晰,沒有什么具體內容。
為了方便理解計算機網絡原理,在計算機網絡教程中,通常綜合 OSI 7 層模型和 TCP/IP 4 層模型的優缺點,將計算機網絡分為 5 層,既簡潔又能將概念闡述更加清楚(當然實際上應用的還是 TCP/IP 模型)。
幾種計算機網絡參考模型的示意圖如下:
三.5層參考模型簡介
- 應用層應用層的傳輸單位是報文,任務是完成特定網絡應用,比如傳輸電子郵件、傳送文件、請求與響應 Web 文檔等具體網絡功能,用戶直接接觸到的就是這一層,常見協議有 HTTP、FTP、DNS、SMTP。
- 傳輸層傳輸層的傳輸單位是報文段,任務是為不同進程之間提供通信服務。一臺主機上可能運行著很多進程(比如用戶可能一邊聽著歌,一邊聊著天,運行著不同的進程,那么就需要知道數據應該發送給哪個進程),通過端口號進行區分。常見協議有 TCP、UDP。
- 網絡層網絡層的傳輸單位是數據報(包),任務是為不同網絡主機之間提供通信服務,把數據從源端傳到目的端。使用 IP 地址來標識網絡上的設備。除了尋址之外還需要進行路由選擇,從主機 A 向主機 B 傳輸數據的時候,有很多條可以選擇的路由,網絡層利用相應的路由算法計算出?條合適的道路。常見協議有 IP、ICMP。
- 數據鏈路層數據鏈路層的傳輸單位是幀,任務是為物理層面上互連的、同一鏈路上的不同節點(主機或路由器)之間提供通信服務。例如與 1 個以太網相連的 2 個節點之間的通信。使用 mac 地址來標識網絡上的設備。數據鏈路層還提供流量控制、差錯控制等功能。網絡把許多計算機連接在一起,而互聯網則把許多網絡通過路由器連接在一起,因此互聯網也稱為『網絡的網絡』。通常把單個的網絡簡化成一條鏈路,數據鏈路層服務于同一個鏈路中的不同節點。通信鏈路分為多種(如以太網、wifi、電纜接入網),由不同類型的物理媒體組成(如光纖、雙絞線、同軸電纜)。不同網絡主機之間可能相距很遠,之間跨越很多條鏈路。就像我們從北京公司去南京老家,可能會經過高速公路、城市道路、鄉村小道等不同道路。
- 物理層物理層的傳輸單位是?特,任務是透明的傳輸比特流(0/1 信號)。(透明傳輸就是不管所傳數據是什么樣的比特組合,都應當能在鏈路上傳送)
當兩臺計算機在進行通信的過程中,數據將會經過計算機網絡的不同層級。發送端在層與層之間傳輸數據時,每經過一層都會添加一個該層所屬的首部信息(封裝),比如傳輸層會加上源端口號和目的端口號等信息、網絡層會加上源 IP 地址和目標 IP 地址等信息、數據鏈路層會加上源 MAC 地址和目標 MAC 地址。反之,接收端在層與層傳輸數據時,每經過一層時會把對應的首部消去(解封裝)。
這就類似于寄快遞,商家寄件的時候會加上包裝盒、包裝袋、寄件信息貼紙等,一層層包裝,而消費者收件的時候則需要一層層去掉包裝,得到最終的商品。
參考文獻:
- 《圖解 HTTP》
- 《圖解 TCP/IP》
- 《計算機網絡(第 7 版)》
我是一楓,非科班程序猿,互聯網寒冬之際拿到了字節、美團、攜程等 offer。在準備校招過程中整理了一份《后端校招面試指南》,內容包括 JAVA 基礎、并發、JVM、MySQL、redis、MQ、Spring、計算機網絡、操作系統等,非常全面!?