TCP/IP協議棧的那些“層級”是怎么回事兒?
眾所周知,TCP/IP模型是現在絕大多數網絡通信的基礎模型,它的基本功能就是定義設備之間進行互聯互通的技術框架。通過它,全球各地的網絡能夠互聯,世界各地的信息能夠互通。協議棧也被稱作通信棧。我們通常用軟件進行通信時,計算機會將一個完整的過程劃分為不同的功能部分,這些功能在被各自安排在不同的“層級”完成。
但是這些“層級”的工作是有先后順序的,而這個層次的順序以及不同層次負責的功能在國際范圍內是統一規范通用的。通信發送端的每一層只與通信接收端相同的層級進行對話,這被稱作“虛擬對話”。每一層級所承載的功能或數據都完全被封裝在本層級,高層級可以通過、且僅能通過低一層級提供的服務接口點(SAP,這是一組軟件層面的接口)對低一層級進行訪問。因此,任何本層級內容(功能或數據)的改變都不會影響其他層級,這也被稱為“信息隱藏法則”。協議棧的核心是協議。所謂協議,就是一組定義好的規則,這些規則確定了相同層級(通信兩端)之間互相通信的數據格式。
比如:兩個相隔遠方,說著不同語言的人想要在中國境內通過傳真進行交流,他們先將地方語言幾經轉折翻譯為通用語言(中文),再轉化為傳真電路可以承載的語言(數字化)才能進行直接溝通。也就是說,除了最下層的“傳真層”可以直接通過“數字電路的語言”進行直接信息傳遞以外,其他層級(如第二、第三層翻譯層和第四層的消息層)都在進行“虛擬對話”。位于A地的人在第四層用法語和位于B地用韓語的人進行溝通;而A地和B地的翻譯人員在第二、第三層均只需要關注文本需要與何種語言映射即可,而不會改動要傳遞的消息內容;A地和B地最底層的秘書人員在傳真機上只需要使用相同的編碼規則將通用語(中文)轉化為電路語言,就可以實現消息的傳遞。
可以看出,每一層只處理各自層級需要處理的內容:最底層的秘書只關注傳真“數字電路語言”,第二層只需要關注中文與英語之間的轉化,第三層只需要關注英語與A、B當地語言的轉化,只有最上層僅關注溝通具體內容。理解了上面的例子,協議棧的原理也就很好理解了。

在分組交換網中,基本的數據包是我們需要直接傳輸的內容,但是需要經過層層封裝,添加上對應層級的數據頭,一直封裝到可以直接傳輸數字語言的物理媒介層。對應的層級之間可以看做在進行“虛擬對話”。那接下來我們看一看TCP/IP協議棧各個層次封裝的主要內容和功能。
物理層是用來建立設備與設備間最基礎的物理連接,主要功能是把把二進制比特流轉化成電信號,并規定介質類型、接口類型、信令類型、規范電平、數據速率、最大傳輸距離和物理接頭等一系列特征。
數據鏈路層的主要功能是指定數據如何通過物理線路進行傳輸,并與物理層通信,識別協議類型并對數據進行封裝通過網絡進行傳輸。 其中最主要的內容莫過于我們熟知的MAC地址。MAC地址是總長為48bit的一系列字符串。其中前24bit是廠商編號,用來標識設備廠商,比如華為設備的前24位MAC地址是0x00e0fc。后24bit為序列號。MAC地址主要功能是用來標記在同一網絡下設備的位置信息。
接下來是網絡層,其主要功能是在不同的網絡之間將數據包從源轉發到目的地。其中提供最重要的信息莫過于IP地址了。不同與MAC地址,IP地址主要是用來標記在不同網絡中設備的位置信息,通過路由的形式實現數據在設備之間轉發。
傳輸層主要功能為建立端到端連接、將數據從一端主機傳送到另一端主機以及保證數據按序、可靠、正確傳輸。在這里我們就不得不聊一聊TCP建立連接的“三次握手”

第一次:客戶端發送SYN報文,主動發起連接請求,SYN=1,seq=x
第二次:服務端收到SYN報文,回復ACK報文,SYN=1, ACK=1,seq=y ,ack=x+1
第三次:客戶端收到服務端ACK,回復ACK報文,SYN=1, ACK=1,seq=x+1 ,ack=y+1,客戶端和服務器進入 ESTABLISHED狀態。
為什么需要有“三次握手”而不是“兩次握手”呢,主要原因是由于客戶端發出的報文段很有可能因為網絡擁塞在某個網絡節點長時間滯留,而服務器收到時連接請求已失效,為避免服務器誤認為此為有效連接請求,向客戶端發出“確認”后新的連接就此建立,但服務器的“確認”不會得到回應,資源被持續消耗的情況。
最后一層為應用層,也是最靠近我們的一層,我們手機和電腦上的各種應用都屬于這一層。應用層主要用于將各種信息進行最初級的處理,將各種視頻、圖片、文字等信息轉換成設備可以識別的二進制數據流。為用戶提供接口、處理特定的應用、數據加密、解密、壓縮、解壓縮。TCP/IP模型把網絡分為五個層次,每層在功能上相互獨立,在協作上又緊密相連。



