1. 程式人生 > >IP報文頭詳解

IP報文頭詳解

復雜 通過 fragment linxu 偏移 img 支持 之間 hle

IPv4報頭:

技術分享圖片

報頭長度:20-60字節bytes

白色部分為固定頭部部分(20 bytes),綠色option選項部分為可選部分。

固定頭部大小計算:

4bit + 4bit + 8bit + 16bit +16bit + 3bit + 13bit + 8bit +8bit + 16bit + 32bit(IP) + 32bit(IP) = 160bit = 20byte

所以IP頭必須大於等於20byte,最大為60byte意味著Option選項部分取值範圍0-40bits

1、 VER(版本):用於區分不同IP版本。如IPv4IPv5IPv6,用4bit表示,IPV4=0100

2、 HLEN(頭部長度):

因為頭部長度不固定(Option可選部分不固定),所以需要標識該分

組的頭部長度多少,用4bit表示,以4byte為單位,取值範圍:5-15,即20-40byte(其他字段也是類似的計算方式,因為bit位是不夠表示該字段的值)

3 Service typeType of Service服務類型:TOS):用來指定特殊的報文處理方式,又劃分為IP precedencD/T/Rreserve保留字段,RFC2474ToS取消了IP precedence字段而使用了DSCPQoS裏有描述,給QoS用來打標簽。TOS字段歷史:

技術分享圖片

4 Total Length(總長度):整個IP分組的長度,可用總長度減去頭部長度獲得實際報文數據的長度,取值範圍

0-65535byte,鏈路只允許1500byte,所以一般都需要MTU分片

5 IdentificationID:標識符):通常與標記字段和分片偏移字段一起用於IP報文的分片。

當原始報文大小超過MTU,那麽就必須將原始數據進行分片。每個被分片的報文大小不得超過MTU,而這個字段還將在通一原始文件被分片的報文上打上相同的標記,一邊接收設備可以識別出屬於同一個報文的分片,“類似於進程號”,有時候電信會用他來識別流量是否是同一臺主機(因為做了PAT後源ip都是一樣的)

技術分享圖片

6 Flags(標記):1位沒有被使用,第2D是不分片位(DF),當DF位設置為1時,表示路由器不能對報文進行分片處理,第3M表示還有後繼分片(

MF),當路由器對報分進行分片時,除了最後一個分片的MF位設置為0外,其他所有分片的MF位均設置1,以便接收者直到收到MF位為0的分片為止

技術分享圖片

7 Fragmentation offset(分片偏移):標識某個分片在分組中的位置.

數據為何要分片(MTU):任何一個物理網絡都有一個最大的傳輸單元,物理介質傳輸的能力是有限制的,不可能一次可傳無限的數據幀。

以太網最大的幀長為1518 IP報文1500byte + 幀頭18byte = 1518byte

技術分享圖片

註意:Ethernet以太網跟802.3以太網有所區別,802.3是由IEEE指定的標準,比較復雜用的比較少,網卡一般兩種都支持。

IP數據包的MTU值在各種物理線路環境下對應的MTU取值:(註意:不包含幀頭和尾)

技術分享圖片

8 Time to liveTTL:生存時間):也就是跳數的大小,即數據包能傳多少跳

ping命令裏的TTL,根據操作系統的不同TTL默認最大取值也會有所不同, linxu

TTL=255win98TTL=128win7TTL=64這都是由應用程序自由決定的。

註意:TTL並不是一個真正時間值,因為分組的往返所花的時間(包括線路、路由器處理的時間),到底要設置TTL為多少是非常的困難的,所以用跳數來表示,而實際的往返時間計算保存在ICMP所封裝的數據裏。如下圖的time=2ms才是真正的往返時間

技術分享圖片

最後的接收者是不需要檢查該包的TTL值是否為0,因為沒再轉發的必要。

註意:該顯示的TTL值是響應方的TTL值(響應方發送的響應包的TTL值,通過中間減跳

後的最終顯示在發送者終端上),而不是你自己的TTL值,所以通過pingTTL值可以簡單判斷對方是什麽操作系統

9 Protocol(協議):標識出傳輸層的地址或協議號,也就是說表示數據要進行什麽樣的上層服務,應該交給自己上一層的哪個協議(ICMP/IGMP/OSPF都介於網絡層和傳輸層之間,但一般視作網絡層,因為都需要用IP報頭封裝。所以1 代表交給ICMP6代表交給TCP

技術分享圖片

10Header checksum(報頭校驗和):用於校驗檢查IP報頭是差錯。

1)只校驗頭部,數據部分由高層協議校驗(TCP頭的校驗字段包含IP頭和數據的校驗,

IPSecNAT-T穿越時有講,鏈路層的幀校驗包含整個幀)

2)無需重復校驗數據部分

3)縮短了路由器轉發分組時的處理時間,把工作交給終端主機使用高層的協議校驗數據

技術分享圖片

校驗和計算方法:

首先把檢驗和字段置為0。然後,對首部中每個16 bit(切割成多個16bit組)進行二進制反碼求和(整個首部看成是由一串16 bit的字組成),結果存在檢驗和字段中。當收到一份IP數據報後,同樣對首部中每個16 bit進行二進制反碼的求和。由於接收方在計算過程中包含了發送方存在首部中的檢驗和,因此,如果首部在傳輸過程中沒有發生任何差錯,那麽接收方計算的結果應該為全1。如果結果不是全1(即檢驗和錯誤),那麽IP就丟棄收到的數據報。但是不生成差錯報文,由上層去發現丟失的數據報並進行重傳。 報頭:1011011101111011 = 16bit 反碼:0100100010000100 求和:1111111111111111

11source ip addressIP地址,32bit

12Destination ip address目的IP地址,32bit

13Option可選字段:Option字段很少使用,用於控制、轉發要求、測試等

技術分享圖片


IP報文頭詳解