1. 程式人生 > >IP包、TCP報文、UDP數據段格式的匯總

IP包、TCP報文、UDP數據段格式的匯總

ip包、tcp報文、udp數據段格式的匯總

一、IP包格式

技術分享

IP數據包是一種可變長分組,它由首部和數據負載兩部分組成。首部長度一般為20-60字節(Byte),其中後40字節是可選的,長度不固定,前20字節格式為固定。數據負載部分的長度一般可變,整個IP數據包的最大長度為65535B

1、版本號(Version

長度為4位(bit

),IP v4的值為0100IP v6的值為0110

2、首部長度

指的是IP包頭長度,用4位(bit)表示,十進制值就是[0,15],一個IP包前20個字節是必有的,後40個字節根據情況可能有可能沒有。如果IP包頭是20個字節,則該位應是20/4=5

3、服務類型(Type of Service TOS

長度為8位(bit),其組成:前3位為優先級(Precedence),後4位標誌位,最後1位保留未用。優先級主要用於QoS,表示從0(普通級別)到7(網絡控制分組)的優先級。標誌位可分別表示DDelay更低的時延)、TThroughput 更高的吞吐量)、RReliability更高的可靠性)、CCost

更低費用的路由)。

TOS只表示用戶的請求,不具有強制性,實際應用中很少用,路由器通常忽略TOS字段。

4、總長度(Total Length

IP包總長度,用16位(bit)表示,即IP包最大長度可以達216=65535字節。在以太網中允許的最大包長為1500B,當超過網絡允許的最大長度時需將過長的數據包分片。

5、標識符(Identifier

長度為16位,用於數據包在分段重組時標識其序列號。將數據分段後,打包成IP包,IP包因走的路由上不同,會產生不同的到達目地的時間,到達目地的後再根據標識符進行重新組裝還原。該字段要與標誌、段偏移一起使用的才能達到分段組裝的目標。

6、標誌(Flags

長度為3位,三位從左到右分別是

MFDF、未用。MF=1表示後面還有分段的數據包,MF=0表示沒有更多分片(即最後一個分片)。DF=1表示路由器不能對該數據包分段,DF=0表示數據包可以被分段。

7、偏移量(Fragment Offset

也稱段偏移,用於標識該數據段在上層初始數據報文中的偏移量。如果某個包含分段的上層報文的IP數據包在傳送時丟失,則整個一系列包含分段的上層數據包的IP包都會要求重傳。

8、生存時間(TTL

長度為8位,初始值由操作系統設置,每經過一個路由器轉發後其值就減1,減至0後丟棄該包。這種機制可以避免數據包找不到目地時不斷被轉發,堵塞網絡。

9、協議(Protocol

長度為8位,標識上層所使用的協議。

10、首部校驗和(Header Checksum

長度為16位,首部檢驗和只對IP數據包首部進行校驗,不包含數據部分。數據包每經過一個中間節點都要重新計算首部校驗和,對首都進行檢驗。

11、源IP地址(Source IP

長度為32位,表示數據發送的主機IP

12、目的IP地址(Destination IP

長度為32位,表示數據要接收的主機IP

13、選項字段(Options

長度為0-40字節(Byte),主要有:安全和處理限制(Security)、記錄路徑(Record Route)、時間戳(Timestamps)、寬松源站選路(Loose Source Routing)、嚴格的源站選路(Strict Source Routing)等。

二、TCP報文

技術分享

TCP報文由首部和數據兩部分組成。首部一般由20-60字節(Byte)構成,長度可變。其中前20B格式固定,後40B為可選。

因為,TCP報文還得傳給下層網絡層,封裝成IP包,而一個IP包最大長度為65535,同時IP包首部也包含最少20B,所以一個IP包或TCP包可以包含的數據部分最大長度為65535-20-20=65495B

TCP報文中數據部分是可選的,即TCP報文可以不包含數據(同理IP包也可以不包含數據)。不含數據的TCP報文通常是一些確認和控制信息類的報文,如TCP建立連接時的三次握手和TCP終止時的四次揮手等。

1、源端口號(Source Port

長度為16位,指明發送數據的進程。

2、目的端口號(Destination Port

長度為16位,指明目的主機接收數據的進程。

3、序號(Sequence Number

也稱為序列號,長度為32位,序號用來標識從TCP發送端向接入端發送的數據字節流進行編號,可以理解成對字節流的計數。

4、確認號(Acknowledgement Number

長度為32位,確認號包含發送確認的一端所期望收到的下一個序號。確認號只有在ACK標誌為1時才有效。

5、首部長度

長度為4位,用於表示TCP報文首部的長度。用4位(bit)表示,十進制值就是[0,15],一個TCP報文前20個字節是必有的,後40個字節根據情況可能有可能沒有。如果TCP報文首部是20個字節,則該位應是20/4=5

6、保留位(Reserved

長度為6位,必須是0,它是為將來定義新用途保留的。

7、標誌(Code Bits

長度為6位,在TCP報文中不管是握手還是揮手還是傳數據等,這6位標誌都很重要。6位從左到右依次為:


  • URG:緊急標誌位,說明緊急指針有效;

  • ACK:確認標誌位,多數情況下空,說明確認序號有效;

  • PSH:推標誌位,置位時表示接收方應立即請求將報文交給應用層;

  • RST:復位標誌,用於重建一個已經混亂的連接;

  • SYN:同步標誌,該標誌僅在三次握手建立TCP連接時有效

  • FIN:結束標誌,帶該標誌位的數據包用於結束一個TCP會話。

8、窗口大小(Window Size

長度為16位,TCP流量控制由連接的每一端通過聲明的窗口大小來提供。

9、檢驗和(Checksum

長度為16位,該字段覆蓋整個TCP報文端,是個強制性的字段,是由發送端計算和存儲,到接收端後,由接收端進行驗證。

10、緊急指針(Urgent Pointer

長度為16位,指向數據中優先部分的最後一個字節,通知接收方緊急數據的長度,該字段在URG標誌置位時有效。

11、選項(Options

長度為0-40B(字節),必須以4B為單位變化,必要時可以填充0。通常包含:最長報文大小(MaximumSegment SizeMSS)、窗口擴大選項、時間戳選項、選擇性確認(Selective ACKnowlegementSACK)等。

12、數據

三、UDP數據段

UDP數據段格式比較簡單,如下:

技術分享

UDP數據報由首部和數據兩部分組成,其中首部只有8B(字節)。

1、源端口號(Source Port

長度為16位,指明發送數據的進程。

2、目的端口號(Destination Port

長度為16位,指明目的主機接收數據的進程。

3、長度

長度為16位,該字段值為報頭和數據兩部分的總字節數。

4、檢驗和(Checksum

長度為16位,UDP檢驗和作用於UDP報頭和UDP數據的所有位。由發送端計算和存儲,由接收端校驗。

5、數據

本文出自 “學習與分享、共勉與進步” 博客,請務必保留此出處http://mmanong.blog.51cto.com/11180918/1962353

IP包、TCP報文、UDP數據段格式的匯總