1. 程式人生 > >IP數據報的格式

IP數據報的格式

ipv4 常用 icm 字段值 spf 是否 相加 操作 超過

  IP協議具有什麽功能從數據報的格式中就能夠知道,一個IP數據報被分為了首部和數據兩個部分,在首部中有20個字節是固定的,還有一些可選字段長度是可變的,下面是IP數據報的具體格式:
  技術分享圖片

IP數據報各個字段的意義
  1.版本號
  版本號占4位,指使用的IP協議的版本,通信雙方使用的版本要一致才能通信,目前的版本有IPv4和IPv6,
  2.首部長度
  指數據報的首部的長度,占4位,註意這裏的首部長度的單位是4個字節,所以最大的首部長度可以達到 15 * 4 = 60 個字節,當首部長度不是4個整數倍的時候,就要使用填充字段進行填充。
  3.區分服務
  占8位,用來獲得更好的服務,只有在使用區分服務的時候,這個字段才有用,一般情況下,都不使用這個字段
  4.總長度


  首部和數據部分長度之和,占16位,因此IP數據報的最大長度位2的16次方 - 1, 即65535個字節,然而這樣長度的數據報是極少遇到的,我們知道在數據鏈層規定了MTU的大小(常用的以太網的MTU為1500字節),當數據報的大小超過MTU時,就要進行分片處理。
  IP協議規定所有的主機和路由器,必須能夠接受長度不超過576字節的數據報,當要發送的數據包的長度超過576個字節時,就應該先了解目的主機是否能夠接受所發送的數據報的長度,否則就要進行分片處理了。
  5.標識
  占16位,IP軟件在存儲器中維持一個計數器,每產生一個數據報,就將計數器加一,並將此值賦值給標識字段,當數據報的長度,超過網絡的MTU時,就必須進行分片處理,這個標識將會賦值到所有的分片中,也就是說一個數據報經過分片之後的形成的多個數據報的標識是一樣的,這樣做是為了將它們組成一個完整的數據報。
  6.標誌

  占3位,但目前只有兩位有意義,
    ? 標誌字段的最低位為MF,當MF = 1 時,表示後面還有分片,MF = 0表示這是最後一個分片
    ? 中間位位DF,DF的意思是不能分片,當DF=0時,才允許分片
  7.片位移
  占13位,分片之後的每一片在原來的數據報中的位置,即相對於數據報的起點位置,該片從何處開始,片位移以8個字節位單位,
  8.生存時間
  占8位,英文縮寫為TTL(Time To Live),這個字段指明數據報在網絡中的生存時間,每當數據報經過一個路由器,TTL就減1,當TTL為0時,路由器就丟棄該數據報,而不進行轉發了,這樣做的目的是為了防止數據報 在網絡中“兜圈子”而白白消耗網絡資源,一般的操作系統都有默認的TTL:
    ? Linux 64
    ? Windows 128
    ? Unix 256
  9.協議

  占8位,協議字段指出數據包的數據部分使用的是何種協議,以便使目的主機的IP層知道應該將數據報中的數據交給哪個部分來處理,常見的協議和對應的字段值如下:
    ? ICMP 1
    ? IGMP 2
    ? IP 4 , IP數據報再封裝到IP數據報中
    ? TCP 6
    ? IGP 9
    ? UDP 17
    ? IPv6 41
    ? ESP 50
    ? OSPF 89
  10.首部檢驗和
  占16位,只將首部檢驗過後的檢驗和填入此字段中,不檢驗數據報的數據部分,數據報每經過一個路由器都要重新計算檢驗和,檢驗和的計算過程如下:
  ? 先將檢驗和字段設置為全0,
  ? 然後將IP數據報的首部劃分位以16位為一個單位的序列,將這些字段進行反碼算術運算求和,
  ? 將得到的結果取反,並寫入檢驗和字段,註意這個取反後的結果和原來的結果相加為全1
  ? 接收方收到數據報之後,也將IP數據報的首部劃分位以16位為一個單位的序列,將這些字段進行反碼算術運算求和,
  ? 若將得到的結果取反不為0,那麽證明出錯了,則丟棄該數據報,若取反結果為0,將數據報上交。
  11.源地址和目的地址
  各占32位
  12.可變部分
  IP首部的可變部分就是一個選項字段,選項字段可以用來支持排錯、測量以及安全等措施,內容豐富,選項字段最多為40個字節,最小為0個字節,實際上這些字段都是很少用的,因為這樣一來減小了開銷,IPv6版本的IP數據報的首部就是固定長度的,

IP數據報的格式