天天看點

IP資料報頭詳解

0x1:IP資料報頭

     IP報頭如下所示,現在逐個分析一下各個字段。

IP資料報頭詳解

4位版本字段:表示IPv4或者IPv6。

4位部首長度:表示IP部首的長度。

8位服務類型:服務類型(TOS)字段包括一個3 bit的優先權子字段(現在已被忽略),4 bit的TOS子字段和1 bit未用位但必須置0。4 bit的TOS分别代表:最小時延、最大吞吐量、最高可靠性和最小費用。4 bit中隻能置其中1 bit。如果所有4 bit均為0,那麼就意味着是一般服務。

16位總長度字段:指整個IP資料報的長度,以位元組為機關。利用首部長度字段和總長度字段,就可以知道IP資料報中資料内容的起始位置和長度。由于該字段長16比特,是以IP資料報最長可達65535位元組。當資料報被分片時,該字段的值也随着變化。

對于16位片辨別、3位片标志、13位片偏移涉及IP資料報分片與重組的知識(下面分析)。

8位的生存時間(TTL):指的是資料包可以經過路由器傳送的最大跳數。

8位協定指傳輸層協定:(TCP、UDP)

16位檢驗和(CRC):用于資料包的校驗

源目位址易于了解,這些是32位的IP位址。

0x2:IP資料報分片與重組

 16位片辨別:對于發送端發送的每份I P資料報來說,其辨別字段都包含一個唯一值。該值在資料報分片時被複制到每個片中。

 3位标志字段:其中MF字段表示“更多的片”。除了最後一片外,其他每個組成資料報的片都要把該比特置1。DF字段置1表示“不分片”,如超出1500byte,則把資料報丢棄并發送一個I C M P差錯封包(“需要進行分片但設定了不分片比特”)給起始端。

 13位片偏移字段:該片偏移原始資料報開始處的位置。

 注意:當I P資料報被分片後,每一片都成為一個分組,具有自己的IP首部,并在選擇路由時與其他分組獨立。這樣,當資料報的這些片到達目的端時有可能會失序,但是在I P首部中有足夠的資訊讓接收端能正确組裝這些資料報片。盡管I P分片過程看起來是透明的,但有一點讓人不想使用它:即使隻丢失一片資料也要重傳整個資料報。為什麼會發生這種情況呢?因為I P層本身沒有逾時重傳的機制——由更高層來負責逾時和重傳(T C P有逾時和重傳機制,但U D P沒有。一些U D P應用程式本身也執行逾時和重傳)。當來自T C P封包段的某一片丢失後,T C P在逾時後會重發整個T C P封包段,該封包段對應于一份I P資料報。沒有辦法隻重傳資料報中的一個資料報片。事實上,如果對資料報分片的是中間路由器,而不是起始端系統,那麼起始端系統就無法知道資料報是如何被分片的。就這個原因,經常要避免分片。

資料分片舉例:在一個以太網上,資料幀的最大長度是1500位元組,

其中1427位元組留給資料,假定IP首部為20位元組,UDP首部為8位元組。我們分别以資料長度為1471, 1472, 1473和1474位元組運作s o c k程式。最後兩次應該發生分片:相應的tcpdump輸出如圖所示。

前兩份UDP資料報(第1行和第2行)能裝入以太網資料幀,沒有被分片。但是對應于寫1 4 7 3位元組的I P資料報長度為1 5 0 1,就必須進行分片(第3行和第4行)。同理,寫1 4 7 4位元組産生的資料報長度為1 5 0 2,它也需要進行分片(第5行和第6行)。

 當I P資料報被分片後, t c p d u m p列印出其他的資訊。首先,frag 26304(第3行和第4行)和frag 26313(第5行和第6行)指的是I P首部中辨別字段的值。分片資訊中的下一個數字,即第3行中位于冒号和@号之間的1 4 8 0,是除I P首部外的片長。兩份資料報第一片的長度均為1 4 8 0:U D P首部占8位元組,使用者資料占1 4 7 2位元組(加上I P首部的2 0位元組分組長度正好為1 5 0 0位元組)。第1份資料報的第2片(第4行)隻包含1位元組資料——剩下的使用者資料。第2份資料報的第2片(第6行)包含剩下的2位元組使用者資料。在分片時,除最後一片外,其他每一片中的資料部分(除I P首部外的其餘部分)必須是8位元組的整數倍。

     在本例中, 1 4 8 0是8的整數倍。位于@符号後的數字是從資料報開始處計算的片偏移值。兩份資料報第1片的偏移值均為0(第3行和第5行),第2片的偏移值為1 4 8 0(第4行和第6行)。跟在偏移值後面的加号對應于I P首部中3 bit标志字段中的“更多片”比特。設定這一比特的目的是讓接收端知道在什麼時候完成所有的分片組裝。最後,注意第4行和第6行(不是第1片)省略了協定名( U D P)、源端口号和目的端口号。協定名是可以列印出來的,因為它在I P首部并被複制到各個片中。但是,端口号在U D P首部,隻能在第1片中被發現。發送的第3份資料報(使用者資料為1 4 7 3位元組)分片情況如下圖所示。

繼續閱讀