TCP/IP基礎之數據封裝
日常生活中,大家在網購或郵寄某件物品時,除了要填寫雙方的地址,還要填寫聯系方式、是否需要保價等信息。另外負責郵寄的快遞公司可能還會有一些其它規定也要附加在購買和郵寄的物品詳單上。這樣做的目的都是為了保證郵寄過程的可靠、準確。
類似的在通信網絡中,數據包利用網絡在不同設備之間傳輸時,為了可靠和準確地發送到目的地,并且高效地利用傳輸資源(傳輸設備和傳輸線路),事先要對數據包進行拆分和打包。
在所發送的數據包上附加上目標地址、本地地址以及一些用于糾錯的字節,當安全性和可靠性要求較高時,還要進行加密處理等。
上述的操作就叫做數據封裝,而對數據包進行處理時通信雙方所遵循和協商好的規則稱為協議。與郵寄過程相比,數據包類似于物品,而封裝就如同填寫各種郵寄信息,協議就是如何填寫信息的規定。
從上面的分析可以看出,對數據包封裝實際上很復雜:要達到可靠、準確及高效的目的,必須考慮很多影響因素,并有針對性地采取防范措施。
在實際應用中,組網的數據封裝按功能分層進行,目的就是為了能將復雜系統分解為很多模塊,各模塊獨立、互不影響。每個模塊(每層)之間用接口進行連接和交互,并互相提供服務。這樣不僅更容易實現功能,而且使整個系統具有良好的兼容性和可擴展性。
以常見的OSI模型為例,它共分為七層,從下到上依次為:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層,每層都對應不同的功能。為了實現對應功能,都會對數據按本層協議進行協議頭和協議尾的數據封裝,然后將封裝好的數據傳送給下層,各層的數據封裝過程如下圖所示。
其中:
- 在傳輸層用TCP頭已標示了與一個特定應用的連接,并將數據封裝成了數據段。
- 到了網絡層則用IP頭標示了已連接的設備網絡地址,并可基于此信息進行網絡路徑選擇,此時將數據封裝為數據包。
- 到了數據鏈路層,數據已封裝成了數據幀,并用MAC頭給出了設備的物理地址,當然還有數據校驗等功能字段等。
- 到了物理層,則將數據幀轉換為比特流,在物理鏈路上進行傳輸。
數據的接收端從物理層開始,進行與發送端相反的操作,稱為“解封裝”,如下圖所示,最終使應用層程序獲取數據信息,使得兩點之間的一次單向通信完成。
需要說明的是,目前應用最為廣泛的TCP/IP協議可以看作是OSI協議層的簡化,它分為四層:網絡接入層、網際互聯層、傳輸層、應用層,其各層對應的數據封裝與OSI大同小異。