IP頭部結構


      IPv4首部一般是20字節長。在以太網幀中,IPv4包首部緊跟着以太網幀首部,同時以太網幀首部中的協議類型值設置為080016。 IPv4提供不同,大部分是很少用的選項,使得IPv4包首部最長可擴展到60字節(總是4個字節4個字節的擴展)

0 4 8 12 16 19 24 31
版本 首部長度 服務類型 長度
認證 標志 段偏移量
TTL 協議 校驗和
源IP地址
目的IP地址
選項 ...

 

IP包頭字段說明

版本:4位,指定IP協議的版本號。

包 頭長度(IHL):4位,IP協議包頭的長度,指明IPv4協議包頭長度的字節數包含多少個32位。由於IPv4的包頭可能包含可變數量的可選 項,所以這個字段可以用來確定IPv4數據報中數據部分的偏移位置。IPv4包頭的最小長度是20個字節,因此IHL這個字段的最小值用十進制表示就是5 (5x4 = 20字節)。就是說,它表示的是包頭的總字節數是4字節的倍數。

服務類型:定義IP協議包的處理方法,它包含如下子字段

        過程字段:3位,設置了數據包的重要性,取值越大數據越重要,取值范圍為:0(正常)~ 7(網絡控制)

        延遲字段:1位,取值:0(正常)、1(期特低的延遲)

        流量字段:1位,取值:0(正常)、1(期特高的流量)

        可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)

        成本字段:1位,取值:0(正常)、1(期特最小成本)

        未使用:1位

長度:IP包的總長

認證:

標志:是一個3位的控制字段,包含:

        保留位:1位

        不分段位:1位,取值:0(允許數據報分段)、1(數據報不能分段)

        更多段位:1位,取值:0(數據包后面沒有包,該包為最后的包)、1(數據包后面有更多的包)


段偏移量:當數據分組時,它和更多段位(MF, More fragments)進行連接,幫助目的主機將分段的包組合。

TTL:表示數據包在網絡上生存多久,每通過一個路由器該值減一,為0時將被路由器丟棄。

協議:8位,這個字段定義了IP數據報的數據部分使用的協議類型。常用的協議及其十進制數值包括ICMP(1)、TCP(6)、UDP(17)。

校驗和:16位,是IPv4數據報包頭的校驗和。

源IP地址:

目的IP地址:

選項(IP Options):本書不討論。

填充(Padding):當IP報文頭長度不是32比特的整數倍時,填充0來湊齊32比特整數倍,沒有實際意義。

數據(Data):來自第4層的數據段。

 

IPv4的頭部結構如圖2-1所示。其長度通常為20字節,除非含有可變長的選項部分。


 

4位版本號(version)指定IP協議的版本。對IPv4來說,其值是4。其他IPv4協議的擴展版本(如SIP協議和PIP協議),則具有不同的版本號(它們的頭部結構也和圖2-1不同)。

4位頭部長度(header length)標識該IP頭部有多少個32bit字(4字節)。因為4位最大能表示15,所以IP頭部最長是60字節。

8位服務類型(Type Of Service,TOS)包括一個3位的優先權字段(現在已經被忽略),4位的TOS字段和1位保留字段(必須置0)。4位的TOS字段分別表示:最小延 時,最大吞吐量,最高可靠性和最小費用。其中最多有一個能置為1,應用程序應該根據實際需要來設置它。比如像ssh和telnet這樣的登錄程序需要的是 最小延時的服務,而文件傳輸程序ftp則需要最大吞吐量的服務。

16位總長度(total length)是指整個IP數據報的長度,以字節為單位,因此IP數據報的最大長度為65535(216-1)字節。但由於MTU的限制,長度超過MTU 的數據報都將被分片傳輸,所以實際傳輸的IP數據報(或分片)的長度都遠遠沒有達到最大值。接下來的3個字段則描述了如何實現分片。

16位標識(identification)唯一地標識主機發送的每一個數據報。其初始值由系統隨機生成;每發送一個數據報,其值就加1。該值在數據報分片時被復制到每個分片中,因此同一個數據報的所有分片都具有相同的標識值。

3位標志字段的第一位保留。第二位(Don’t Fragment,DF)表示“禁止分片”。如果設置了這個位,IP模塊將不對數據報進行分片。在這種情況下,如果IP數據報長度超過MTU的話,IP模 塊將丟棄該數據報並返回一個ICMP差錯報文。第三位(More Fragment,MF)表示“更多分片”。除了數據報的最后一個分片外,其他分片都要把它置1。

13位分片偏移(fragmentation offset)是分片相對原始IP數據報開始處(僅指數據部分)的偏移。實際的偏移值是該值左移3位(乘8)后得到的。由於這個原因,除了最后一個IP分 片外,每個IP分片的數據部分的長度必須是8的整數倍(這樣才能保證后面的IP分片擁有一個合適的偏移值)。

8位生存時間(Time To Live,TTL)是數據報到達目的地之前允許經過的路由器跳數。TTL值被發送端設置(常見的值是64)。數據報在轉發過程中每經過一個路由,該值就被路由器減1。當TTL值減為0時,路由器將丟棄數據報,並向源端發送一個ICMP差錯報文。TTL值可以防止數據報陷入路由循環。

8位協議(protocol)用來區分上層協議,我們在第1章討論過。/etc/protocols文件定義了所有上層協議對應的protocol 字段的數值。其中,ICMP是1,TCP是6,UDP是17。/etc/protocols文件是RFC 1700的一個子集。

16位頭部校驗和(header checksum)由發送端填充,接收端對其使用CRC算法以檢驗IP數據報頭部(注意,僅檢驗頭部)在傳輸過程中是否損壞。

32位的源端IP地址和目的端IP地址用來標識數據報的發送端和接收端。一般情況下,這兩個地址在整個數據報的傳遞過程中保持不變,而不論它中間經過多少個中轉路由器。關於這一點,我們將在第4章進一步討論。

IPv4最后一個選項字段(option)是可變長的可選信息。這部分最多包含40字節,因為IP頭部最長是60字節(其中還包含前面討論的20字節的固定部分)。可用的IP選項包括:

記錄路由(record route),告訴數據報途經的所有路由器都將自己的IP地址填入IP頭部的選項部分,這樣我們就可以跟蹤數據報的傳遞路徑。

時間戳(timestamp),告訴每個路由器都將數據報被轉發的時間(或時間與IP地址對)填入IP頭部的選項部分,這樣就可以測量途經路由之間數據報傳輸的時間。

松散源路由選擇(loose source routing),指定一個路由器IP地址列表,數據報發送過程中必須經過其中所有的路由器。

嚴格源路由選擇(strict source routing),和松散源路由選擇類似,不過數據報只能經過被指定的路由器。

關於IP頭部選項字段更詳細的信息,請參考IP協議的標准文檔RFC 791。不過這些選項字段很少被使用,使用松散源路由選擇和嚴格源路由選擇選項的例子大概僅有traceroute程序。此外,作為記錄路由IP選項的替 代品,traceroute程序使用UDP報文和ICMP報文實現了更可靠的記錄路由功能,詳情請參考文檔RFC 1393。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM