TCP、UDP、IP的包頭

TCP數據格式

TCP是一種可靠的、面向連接的字節流服務。

源主機在傳送數據前需要先和目標主機建立連接。然後,在此連接上,被編號的數據段按序收發。同時,要求對每個數據段進行確認,保證了可靠性。如果在指定的時間內沒有收到目標主機對所發數據段的確認,源主機將再次發送該數據段。
TCP頭部結構

  • 源、目標端口號字段:佔16比特。TCP協議通過使用"端口"來標識源端和目標端的應用進程。端口號可以使用0到65535之間的任何數字。在收到服務請求時,操作系統動態地爲客戶端的應用程序分配端口號。在服務器端,每種服務在"衆所周知的端口"(Well-Know Port)爲用戶提供服務。
  • 順序號字段:佔32比特。用來標識從TCP源端向TCP目標端發送的數據字節流,它表示在這個報文段中的第一個數據字節。
  • 確認號字段:佔32比特。只有ACK標誌爲1時,確認號字段纔有效。它包含目標端所期望收到源端的下一個數據字節。
  • 頭部長度字段:佔4比特。給出頭部佔32比特的數目。沒有任何選項字段的TCP頭部長度爲20字節;最多可以有60字節的TCP頭部。
  • 標誌位字段(U、A、P、R、S、F):佔6比特。各比特的含義如下:
      
     ◆URG:緊急指針(urgent pointer)有效。
      
     ◆ACK:確認序號有效。
      
     ◆PSH:接收方應該儘快將這個報文段交給應用層。
      
     ◆RST:重建連接。
      
     ◆SYN:發起一個連接。
      
     ◆FIN:釋放一個連接。
  • 窗口大小字段:佔16比特。此字段用來進行流量控制。單位爲字節數,這個值是本機期望一次接收的字節數。
  • TCP校驗和字段:佔16比特。對整個TCP報文段,即TCP頭部和TCP數據進行校驗和計算,並由目標端進行驗證。
  • 緊急指針字段:佔16比特。它是一個偏移量,和序號字段中的值相加表示緊急數據最後一個字節的序號。
  • 選項字段:佔32比特。可能包括"窗口擴大因子"、"時間戳"等選項。

UDP數據格式

UDP是一種不可靠的、無連接的數據報服務。

源主機在傳送數據前不需要和目標主機建立連接。數據被冠以源、目標端口號等UDP報頭字段後直接發往目的主機。這時,每個數據段的可靠性依靠上層協議來保證。在傳送數據較少、較小的情況下,UDP比TCP更加高效。
在這裏插入圖片描述

  • 源、目標端口號字段:佔16比特。作用與TCP數據段中的端口號字段相同,用來標識源端和目標端的應用進程。
  • 長度字段:佔16比特。標明UDP頭部和UDP數據的總長度字節。
  • 校驗和字段:佔16比特。用來對UDP頭部和UDP數據進行校驗。和TCP不同的是,對UDP來說,此字段是可選項,而TCP數據段中的校驗和字段是必須有的

IP報文段格式

在這裏插入圖片描述
普通的 IP 頭部長度爲20 個字節,不包含IP 選項字段。

  • 版本號(Version)字段標明瞭IP 協議的版本號,目前的協議版本號爲4。下一代IP 協議的版本號爲6。
  • 報文長度指 IP 包頭部長度,佔4 位。
  • 8 位的服務類型(TOS,Type of Service)字段包括一個3 位的優先權字段(COS,Class of Service),4 位TOS 字段和1 位未用位。4 位TOS 分別代表最小時延、最大吞吐量、最高可靠性和最小費用。
  • 總長度(Total length)是整個IP 數據報長度,包括數據部分。
  • 標識符(Identification)字段唯一地標識主機發送的每一份數據報。通常每發送一份報文它的值就會加1.
  • 生存時間(TTL,Time to Live)字段設置了數據包可以經過的路由器數目。一旦經過一個路由器,TTL 值就會減1,當該字段值爲0 時,數據包將被丟棄。
  • 協議字段確定在數據包內傳送的上層協議,和端口號類似,IP 協議用協議號區分上層協議。TCP 協議的協議號爲6,UDP 協議的協議號爲17。
  • 報頭校驗和(Head checksum)字段計算IP 頭部的校驗和,檢查報文頭部的完整性。源IP 地址和目的IP 地址字段標識數據包的源端設備和目的端設備。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章