TCP/IP通信過程

數據包構成

數據包是由每一層的首部和從上一層接受到的包的信息所組成的,每個首部都包含着該層的必要信息,如發送的目標地址和協議相關的信息。網絡

數據包構成

數據單位

如下五個術語用於描述數據單位編碼

  • 包:全能性述語
  • 幀:數據鏈路層中包的單位
  • 數據包:IP和UDP等網絡層以上的分層中包的單位
  • 段:TCP中數據流的信息
  • 消息:應用協議中數據的單位

首部信息

首部信息

包流動的時候會從前日後依次附加以太包首部、IP包首部、TCP或者UDP首部以及傳輸層以上應用本身的包的首部信息。在最後也會添加一個包尾。3d

每一個包裏面至少包含兩個信息:一個是接收端和發送端的信息,另外一個是上一層的協議。cdn

在通過每一層的時候都會分析接收端和發送段的信息,以太網會用MAC地址,IP會用IP地址,TCP/UDP會用端口號。blog

發送數據包

仍是以發送郵件爲例子(圖解TCP這本書很喜歡發送郵件爲例子),講解一下數據包的流向過程。路由

傳輸層以上分層的處理

首先應用層就是點擊發送郵件,表示層進行編碼處理,而會話層則控制何時創建鏈接發送數據。it

TCP模塊處理

TCP根據會話層的指示創建起鏈接,爲了實現與接受端的可靠傳輸,必須在上一層接收過來數據(應用層數據)前面添加一個首部信息。其中包括着源端口號、接收端端口號、序號(用以識別發送的包中哪部分是數據)和檢驗和(用於判斷是否被損壞)。io

IP模塊處理

IP將TCP傳輸過來的TCP首部和TCP信息變成IP信息,而且在前面添加一個首部,所以IP首部後面緊隨着TCP首部,以後纔是數據自己。IP首部信息中包含着源IP地址,接收端的IP地址和後面協議類型(判斷是否TCP或UDP)。編譯

IP包生成之後會參考路由控制表後決定接受此IP包的主機,而後把IP包發送到鏈接這些路由的以太網驅動,實現真正得發送數據。class

以太網驅動的處理

接受從IP層傳過來的數據之後,像IP層同樣進行添加首部處理,首部的信息裏面包括源MAC地址,接收端的MAC地址和以太網協議類型。

接受數據包

包的接收就是一個逆轉過程了。

以太網驅動處理

先判斷MAC地址是否匹配,不匹配則丟掉。

若是匹配則判斷以太網協議類型,若是是IP則交給IP模塊處理,若是是其餘協議如ARP協議,則交給ARP處理。若是遇到識別不了的協議,則丟掉。

IP模塊的處理

接收到IP包首部和後面的數據之後,先分析IP地址是否匹配。若是匹配,則判斷上一層協議類型,交給相關的協議處理(TCP或者UDP)。若是有路由器的狀況下,IP是每每不匹配的,須要藉助路由控制表進行轉發處理。

TCP模塊處理

首先計算校驗和,判斷是否損壞。而後判斷是否按照序號接收數據,最後檢查端口號,肯定具體的應用。

若是接受完畢,接收端會發送一個確認給發送端。若是發送端沒收到,會一直髮送數據。

當數據接收完成後會傳給相關端口號的應用。

傳輸層以上的處理

經過表示層的編譯後會傳輸到應用層,若是應用層上沒有相關的郵件地址,則會返回給發送端一個錯誤信息。若是硬盤超出負荷,也會報錯。

相關文章
相關標籤/搜索