IP協議首部詳解

1、IP協議概述

       IP是TCP/IP協議中最爲核心的協議,所有的tcp、udp、icmp、igmp等都是以IP數據報格式傳輸的,但它提供的是不可靠、無連接的數據包傳輸服務。

  • 不可靠表示它不能保證IP數據包能成功的到達目的地
  • 無連接 表示ip並不維護任何關於後續數據報的狀態信息,每個數據報的處理是相互獨立的。
    普通的IP首部長爲20個字節,除非含有選項字段。

2、IPv4首部結構

(1)版本號:佔4位,就是IP協議的版本,通信雙方的IP協議版本必須要達到一致,IPv4的版本就是4。

(2)首部長度:佔四位,因爲長度爲四比特,所以首部長度的最大值爲1111,15,又因爲首部長度代表的單位長度爲32個字(也就是4個字節),所以首部長度的最小值就是0101,當然,也確實如此,大部分的ip頭部中首部字節都是0101.也就是5*4=20個字節,如果是最大值15的話,ip首部的最大值就是60個字節。所以,ipv4首部長度的最大值就是60。

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

(4)總長度:指整個IP數據報的長度(即:IP數據報中首部和數據的總和的長度),佔16位,單位爲字節,故IP數據報的最大長度爲65535字節(2的16次方)。由於MTU的限制,長度超過MTU的數據報都將被分片傳輸,所以實際傳輸的IP分片數據報的長度遠遠沒有達到最大值。

下來的3個字段則描述如何實現分片:

(5)標識:唯一地標識主機發送的每一個數據報,其初始值是隨機的,每發送一個數據報其值就加1。同一個數據報的所有分片都具有相同的標識值。

(6)標誌:位1保留,位2表禁止分片(DF),若設置了此位,IP模塊將不對數據報進行分片,在此情況下若IP數據報超過MTU,IP模塊將丟棄數據報並返回一個ICMP差錯報文;位3標識分片(MF),表示後面還有若干個數據報,除了數據報的最後一個分片,其他分片都要把它設置爲1。

(7)片偏移:分片相對原始IP數據報數據部分的偏移。實際的偏移值爲該值左移3位後得到的,所以除了最後一個IP數據報分片外,每個IP分片的數據部分的長度都必須是8的整數倍。

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

(9)協議:區分IP協議上的上層協議。在Linux系統的/etc/protocols文件中定義了所有上層協議對應的協議字段,ICMP爲1,TCP爲6,UDP爲17。

(10)頭部校驗和: 由發送端填充接收端對其使用CRC算法校驗,檢查IP數據報頭部在傳輸過程中是否損壞.。計算方式如下:

       在發送端的時候,將校驗和全部設置爲0,然後把數據報首段數據全部進行反碼相加,得到的值爲校驗和,放入首部的校驗和字段;然後在接收端的時候,將數據報首段數據和校驗和一起全部反碼相加,最後若是得到零,則保留,若不是零,則說明數據報在傳輸過程中發生了改變,則丟棄該數據報。

(11)IP源地址:佔32位,將IP地址看作是32位數值則需要將網絡字節順序轉化位主機字節順序。轉化的方法是:將每4個字節首尾互換,將2、3字節互換。

(12)目的地址:也佔32位,轉換方法和來源IP地址一樣。

(13)選項:可變長的可選信息,最多包含40字節。選項字段很少被使用。可用的IP可選項有:
      a. 記錄路由: 記錄數據包途徑的所有路由的IP,這樣可以追蹤數據包的傳遞路徑
      b. 時間戳: 記錄每個路由器數據報被轉發的時間或者時間與IP地址對,這樣就可以測量途徑路由之間數據報的傳輸的時間
      c. 鬆散路由選擇: 指定路由器的IP地址列表數據發送過程中必須經過所有的路由器
      d. 嚴格路由選擇: 數據包只能經過被指定的IP地址列表的路由器
      e. 上層協議(如TCP/UDP)的頭部信息

        在IP協議中,IP協議是面向非連接的,所謂的非連接就是在數據的傳遞過程中,不需要檢測網絡是否連通,所以是不可靠的數據報協議。IP協議主要用於在主機之間的尋址和選擇數據包路由。

3、IPv6首部結構

與IPv4相比,IPv6的頭部做了如下修改:

(1)取消了首部長度,因爲IPv6的首部長度是固定的40個字節。

(2)取消了服務類型 ,因爲流標號和優先級結合起來實現了服務類型的功能。

(3)取消了總長度字段,改用爲有效載荷長度,有效載荷長度就是後面的擴展首部加上數據報中的數據。

(4)取消了標識,標誌和片偏移,因爲這些功能都包含在了擴展首部裏面。

(5)取消了協議字段,改用爲下一個首部,功能不變,這樣更容易理解。

(6)取消了生存時間TTL,改用爲最大跳轉數,功能不變。

(7)取消了首部效驗和,這樣加快了路由器對數據報的處理速度,在數據鏈路層中,當我們發現有差錯的幀就會拋棄,在運輸層中,在udp中,當發現有差錯就會拋棄,在tcp中,當發現有差錯就會重傳,直到傳送到目的進程爲止。因此在網路層的檢測就可以精簡掉。

(8)取消了選項字段,功能歸併在了擴展首部上。

 

參考鏈接:

https://blog.csdn.net/qq_29344757/article/details/78570272

https://blog.csdn.net/qq_42058590/article/details/82918678

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章