IP 數據報


IP 數據報

1.IP 數據報的格式

  • 一個 IP 數據報由首部和數據兩部分組成。(數據報也可以說是數據包)
  • 首部的前一部分是固定長度,共 20 字節,是所有 IP 數據報必須具有的。
  • 在首部的固定部分的后面是一些可選字段,其長度是可變的。

image-20200122131654948


2.IP 數據報首部的固定部分中的各字段

image-20200122131251808

從圖中可看到,數據報首部可分為固定部分和可變部分,固定部分為了五行,每行32位即4個字節。

  • 版本——占 4 位(第一行四個字節中0~3位),指 IP 協議的版本該 IP 協議的版本號為 4 (即 IPv4);

  • 首部長度——占 4 位(第一行四個字節中4~7位),表示首部總的長度(固定+可變部分);可表示的最大數值是 15 個單位(一個單位為 4 字節)因此 IP 的首部長度的最大值是 60 字節。

  • 區分服務——占 8 位(第一行四個字節中8~15位),區分服務。即該段設置了數據報的優先程度,若要想實現數據報優先傳輸還需要在路由器端配置相應的區分服務設置。只有在使用區分服務(DiffServ)時,這個字段才起作用。在一般的情況下都不使用這個字段 。

  • 總長度——占 16 位(第一行四個字節中16~31位),指首部和數據之和的長度,單位為字節,因此數據報的最大長度為 65535 字節。總長度必須不超過最大傳送單元 MTU。

  • 標識(identification)——占 16 位(第二行四個字節中1~15位),它是一個計數器,用來產生數據報的標識,即每產生一個數據報貼上一個標識。

  • 標志(flag)——占 3 位(第二行四個字節中16~18位),目前只有前兩位有意義。
    標志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“還有分片”。MF = 0 表示最后一個分片。
    標志字段中間的一位是 DF (Don't Fragment) 。只有當 DF = 0 時才允許分片。

    即標志表示該數據報是否分片了?是第幾個分片?

  • 片偏移——占12 位(第二行四個字節19~31位)指出:較長的分組在分片后某片在原分組中的相對位置。片偏移以 8 個字節為偏移單位。

IP 數據報分片舉例

image-20200122133901592

以太網傳輸的數據報數據部分一般都是1500個字節。如果有個數據報數據部分為3800字節(數據報總長度超過路由器的對大傳送單元MTU) 就需要分為若干個數據報片發送。

如圖中分為三個數據報片發送,在每個數據報片的首部都要寫上原數據報首部的信息,包括目標IP 地址等,並編上號。數據報片的數據部分第一個字節表示偏移,每個數據報片的偏移 = 該報片數據部分的第一個字節號 / 8,如圖所示。

  • 生存時間——占 8 位(第三行四個字節中0~7位)記為 TTL (Time To Live)數據報在網絡中可通過的路由器數的最大值。即計算機發出數據時會附帶一個TTL值,該值在數據報每經過一個路由器就自減1,等到某路由器接收到該數據報發現其TTL值變為0時不在中轉該數據報,而是將其丟棄並向最初發送者返回一個ICMP報文。TTL的設置可以防止數據報無限循環傳輸。

    image-20200122135320599

TTL簡單舉例

image-20200122141401529

在命令行窗口嘗試與本計算機的默認網關地址通信:ping 172.26.104.1,發現TTL值為255,因為訪問的是本計算機的網關在同一網段上,不用經過其他路由器中轉便可直接訪問(Linux默認TTL值為255);

於是我嘗試與美國的某個IP地址通信:ping 207.226.141.205,會得到IP 地址為63.218.56.150的路由器發來的回復:“TTL傳輸中過期”。說明在通信數據報在傳輸到該路由器上時TTL值已為0,隨后該路由器將通信數據報自行銷毀並給最初發出數據者(即本計算機)一個回復。

此外,還可以通過指定TTL的值,觀察哪個路由器給計算機回復TTL過期信息,以此來跟蹤通信數據報傳輸過程中途經的路由器:

ping 207.226.141.205 -i 1

指定通過 “-i 1“ 指定TTL值為1,即數據報中轉到第一個路由器中就銷毀了。

image-20200122142634559

可以看到本計算機向IP地址:207.226.141.205,發出的包含通信請求的數據報經過的第一個路由器IP地址為本計算機的網關:172.26.104.1;第二個路由器的IP地址為10.0.2.37 。

  • 協議——占 8 位(第三行四個字節8~15位)字段指出此數據報攜帶的數據使用何種協議。

image-20200122155345683

image-20200122155642586

協議字段里一般使用協議號來標識相關協議,比如其中一部分為:

image-20200122162344924

  • 首部校驗和——占 16 位(第三行四個字節16~31位)字段只檢驗數據報的首部不檢驗數據部分,目的是驗證數據報的首部有無錯誤。

image-20200122160311962

檢驗過程

image-20200122160629501

好比寄快遞,發件方在快遞單上寫上收件人、地址、電話,然后根據這些信息得到一個校驗和並寫在快遞單上;快遞員收到這個快遞之后檢查對應的信息是否出錯,出錯了就不發了,並不在乎快遞內的東西是否出錯。也就是說該字段僅檢查數據報的首部有無錯誤不關心數據部分。

  • 第四行的四個字節表示:源地址
  • 第五行的四個字節表示:目的地址

3.IP 數據報首部的可變部分

  • IP 首部的可變部分就是一個選項字段,用來支持排錯、測量以及安全等措施,內容很豐富。
  • 選項字段的長度可變,從 1 個字節到 40 個字節不等,取決於所選擇的項目。
  • 增加首部的可變部分是為了增加 IP 數據報的功能,但這同時也使得 IP 數據報的首部長度成為可變的。這就增加了每一個路由器處理數據報的開銷。
  • 實際上這些選項很少被使用。

4.抓包驗證

這里所說的“抓包”指的是計算機通信的數據報,也可以叫做數據包

  • 首先回顧一下數據報的格式:

image-20200122131251808

  • 使用抓包軟件Wireshark抓包如下:

image-20200122165623636

選中某一數據包之后,下面的四欄選項顯示的是數據包的具體內容,從上往下分別是:數據幀信息、數據鏈路層信息、網絡層信息、運輸層信息。

  • 打開數據鏈路層信息欄:

image-20200122165944170

可以發現數據鏈路層添加的內容:目標MAC地址、源MAC地址、協議類型:在數據鏈路層指明了網絡層使用的協議是IPv4。

  • 打開網絡層信息欄:

image-20200122170421946

其中:

image-20200122171210234

Version:4表示版本字段,值4表示網絡層使用IPv4協議與數據鏈路層指定的協議類型一致;

Header Length表示首部長度字段,值為20表示數據包首部為20個字節;

image-20200122190657147

Differentiated Services Field表示區分服務字段,它的值0x00表示該數據包默認沒有區分服務;

Total Length表示總長度字段,它的值1500表示整個數據包的總長度為1500字節;

Identification表示標識字段,表示該數據包的編號為61121,查看相鄰的數據包可發現其標識為61122:

image-20200122190926084

驗證了計算機發送數據包時會按順序給數據包加上連續的標識。

image-20200122191248543

Flags表示標志字段,看看出該數據包並沒有分片;

Flagment offset表示片偏移字段,由於數據包沒有分片,所以片偏移為0;

Time to liveTTL表示生存時間字段;

image-20200122191354854

Protocol表示協議字段,TCP(6)表示使用該數據包使用TCP協議傳輸,6為TCP協議的協議號;

Header checksum表示首部檢驗和字段,validation disabled表示首部檢驗和驗證失敗;

Source表示源地址字段;

Destination表示目標地址字段。


免責聲明!

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



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