IPv4和IPv6的數據報結構頭部詳解

IP數據報

1. IP數據報究竟是個什麼鬼

IP是TCP‘/IP協議族中的核心協議。所有UDP、TCP、ICMP和IGMP數據都是通過IP數據報傳輸。IP提供了一種盡力而爲、無連接的數據報交付服務。

1.盡力而爲的含義是IP數據報在傳送到目的地的時候,有可能會丟棄一部分流量(這一點由IPv4與IPv6中的DS字段和ECN兩者決定)。

2.無連接意味着IP不維護網絡單元(即路由器)中數據報相關的任何鏈接狀態信息,每個數據報獨立於其他數據報來處理。這也意味着IP數據報可不按順序交付。
在這裏插入圖片描述
在這裏插入圖片描述

2 IPv4頭部和IPv6頭部

在這裏插入圖片描述

2.1 IPv4頭部

2.1.1 先把一些easy的記住,再搞花裏胡哨的Internet校驗、DS字段和ECN

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

2.1.2 Internet檢驗和

Internet頭部檢驗和字段僅僅(注意是僅僅,不做高考語文閱讀理解)計算IPv4頭部,也就意味着它不管後面的IPv4數據報有效負載(例如TCP和UDP數據報)的正確性。這些有效負載自己弄自己不理他。

Intemet校驗和是一個16位的數字和,它能以相當高的概率確定接收的消息或其中的部分內容是否與發送的相匹配。注意,Intemet校驗和算法與常見的循環冗餘校驗(CRC)[PB61]不同,後者提供了更強的保護功能。

CRC不記得的可以看一下CSDN博主weizhengbo的文章《細說循環冗餘校驗碼》,原文鏈接:https://blog.csdn.net/weizhengbo/article/details/75040495?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
在這裏插入圖片描述
在這裏插入圖片描述
它的加和符合數學性質如下:
在這裏插入圖片描述
代碼(c語言):

#include<stdio.h>     
void main()     
{     
 int buff[10]={0x4500,0x0030,0x804c,0x4000,0x8006,0x0000,0xd343,0x117b,0xcb51,0x153d};     
    int checksum=0,i=0;     
 for(i=0;i<10;i++)     
 {     
  checksum+=buff[i];     
 }     
 printf("checksum=%x/n",checksum);     
 checksum=(checksum>>16)+(checksum & 0xffff);     
 checksum+=(checksum>>16);     
    checksum=0xffff-checksum;     
 printf("checksum=%04x/n",checksum);     
} 

2.1.3 DS字段和ECN

在這裏插入圖片描述
這種機制是避免或處理網絡擁塞的方法之一,不過由於具體說會非常長,這裏按下不表,給個鏈接。

CSDN博主dangzhangjing97的《TCP之 流量控制(滑動窗口)和 擁塞控制(擁塞控制的工作過程)》網址:https://blog.csdn.net/dangzhangjing97/article/details/81008836?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

DS字段和ECN字段並不密切相關,但它們常常被用作代替以前定義的IPv4服務類型和IPv6服務類型。
在這裏插入圖片描述
它們都基於一個稱爲多級優先與搶佔(MLPP)的方案,該方案可追溯到美國國防部的AUTOVON電話系統[A92],其中較低優先級的呼叫可被更高優先級的呼叫搶佔。
在這裏插入圖片描述
在這裏插入圖片描述
3位的類別選擇器提供了8個定義的代碼點(稱爲類別選擇代碼點),它們對應於一個指定最小功能集的PHB,提供與早期的IP優先級相似的功能。它們稱爲類別選擇兼容的PHB,目的是支持部分兼容的最初定義的IP優先級子字段[RFCO791]。

1. 保證轉發(AF)組固定數量的獨立AF類別的IP分組提供轉發,它有效概括了優先級的概念。在一個流量類別中,數據報被分配一個丟棄優先級。在一個類別中,較高丟棄優先級的數據報優先於那些較低丟棄優先級的數據報處理(即以較高優先級轉發)。結合流量類別和丟棄優先級,名稱AFij對應於保證轉發類別i的丟棄優先級j
2. 加速轉發(EF)提供了非擁塞的網絡服務,也就是說,EF流量應該享受較低的延時、抖動和丟包率。
在這裏插入圖片描述

2.1.4 IP選項

IPv4支持一些可供數據報選擇的選項,不過多數標準化選項在Internet中很少或從未使用,而且由於現在IPv4頭部空間的限制,很大部分都沒有用了。
在這裏插入圖片描述

2.2 IPv6頭部

在這裏插入圖片描述

  1. 流標籤(Flow Label): 標記那些需要IPv6路由器特殊處理的信息包順序。
    2. 負載長度(Payload Length):定長40字節數據報首部後面的字節數量,包括擴展報頭和負載數據,即數據報長度-40。
  2. 下一個頭部(8位):當IPv6沒有擴展報頭時,該字段的作用和IPv4的上層協議字段一樣。當含有擴展報頭時,該字段的值即爲第一個擴展報頭的類型。
    4. 跳數限制(Hop Limit):轉發數據報的每臺路由器對該字段的值減1,若減爲0則丟棄該數據報。和IPv4生存期差不多後面會詳細講解。

2.2.1 IPv6擴展頭部

在IPv6中,那些由IPv4選項提供的特殊功能,通過在IPv6頭部之後增加擴展頭部實現。在選擇IPv6頭部爲固定大小時,要求擴展頭部僅由終端主機(僅有一個例外)(這個例外書上沒有具體寫出來,我在網上看了半天沒看到,歡迎讀者提出)處理, IPv6設計者簡化了高性能路由器的設計和實現,這是因爲IPv6路由器處理分組所需的命令比IPv4簡單。
擴展頭部和更高層協議(例如TCP或UDP)頭部與IPv6頭部鏈接起來構成級聯的頭部。每個頭部中的下一個頭部字段表示緊跟着的頭部的類型,它可能是一個IPv6擴展頭部或其他類型。值59表示這個頭部鏈的結尾。下一個頭部字段的可能值定義在[IP6PARAM]中,並在表5-5中列出了其中的大多數。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2.2.2 IPv6選項

如果選項存在,可放入逐跳選項(與一個數據報傳輸路徑上的每個路由器相關)或目的地選項(僅與接收方相關)。逐跳選項(稱爲HOPOPT)是唯一由分組經過的每個路由器處理的選項。逐跳選項和目的地選項的編碼格式一樣。
在這裏插入圖片描述
在這裏插入圖片描述
動作子字段的靈活性在開發新的選項時是有用的。一個新的選項可攜帶在一個數據報中,並被那些無法理解它的路由器所忽略,這樣有助於促進新選項的增量部署。
在這裏插入圖片描述

2.2.2.1 填充1和填充N

由於IPv6選項需要與8字節的偏移量對齊,因此較小的選項用0填充到長度爲8字節。這裏有兩個填充選項,分別稱爲填充1和填充N。

2.2.2.2 IPv6超大有效載荷

IPv6超大有效載荷選項指定了一種有效載荷大於65 535字節的IPv6數據報,稱爲超大報文。這個選項無法由MTU小於64kB的鏈路連接的節點來實現。超大有效載荷選項提供了一個32位的字段,用於攜帶有效載荷在65 535 - 4294967295字節之間的數據報。

2.2.2.3 隧道封裝限制

隧道是指將一個協議封裝在另一個協議中.這是一個很長的故事,給個鏈接:網絡隧道Tunnel技術

2.2.2.4 路由器警告

路由器警告選項指出數據報包含需要路由器處理的信息。它與IPv4的路由器警告選項的目的相同。

2.2.2.5 CALIPSO

這個選項用於在某些專用網絡中支持通用體系結構標籤IPv6安全選項(CALIPSO)[RFC5570]。它提供了一種爲數據報做標記的方法,包括一個安全級別標識符和一些額外的信息。

2.2.2.6 快速啓動

快速啓動(QS)選項和[RFC4782]定義的TCP/IP實驗性“快速啓動”程序配合使用。它適用於IPv4和IPv6,但目前建議僅用於專用網絡,而不是全球性的Intemeto選項包括髮送者需要的以比特/秒爲單位的傳輸速率的編碼值、 QS TTL值和一些額外信息.

2.2.2.7家鄉地址

移動IP裏面比較詳細,這裏不多說。

2.2.3分片頭部

分片頭部用於IPv6源節點向目的地發送一個大於路徑MTU的數據報。
在IPv4中,如果數據報大小超過下一跳MTU,任何主機或路由器可將該數據報分片, IPv4頭部中第二個32位字段表示分片信息。在IPv6中,僅數據報的發送者可以執行分片操作,在這種情況下需要添加一個分片頭部。
分片頭部包括的信息與IPv4頭部中的相同,只不過標識符字段是32位,而不是IPv4中採用的16位。這個更大的字段提供了在網絡中容納更多分片的能力。在這裏插入圖片描述
如果M位字段設置爲1,表示在數據報中包含更多分片。如果該值爲0,表示該分片是原始數據報的最後一個分片。

2.2.3.1 分片過程

在這裏插入圖片描述
在分片過程中,輸人的數據報稱爲“原始數據報”,它由兩部分組成: “不可分片部分”和“可分片部分” 。不可分片部分包括IPv6頭部和任何在到達目的地之前需由中間節點處理的擴展頭部(即包括路由頭部之前的所有頭部,如果有逐跳選項擴展頭部,則是該頭部之前的所有頭部)。可分片部分包括數據報的其餘部分(即目的選項頭部、上層頭部和有效載荷數據)。
當原始數據報被分片後,將會產生多個分片,其中每個分片都包含一個原始數據報中不可分片部分的副本,但是需要修改每個IPv6頭部的負栽長度字段,以反映它所描述的分片的大小。在不可分片部分之後,每個新的分片都包含一個分片頭部,其中包含一個分片相應的分片偏移字段(例如第一個分片的偏移量爲0),以及一個原始分組的標識符字段的副本。最後一個分片的M (更多分片)位字段設置爲0。

2.3.4 路由頭部

IPv6路由頭部爲發送方提供了一種IPv6數據報控制機制,以控制(至少部分控制)數據報通過網絡的路徑。目前,路由擴展頭部有兩個不同版本,分別稱爲類型0 (RHO)和類型2 (RH2)o RHO出於安全方面的考慮已被否決[RFC5095], RH2被定義爲與移動IP共同使用。

3. 參考資料:

CSDN博主GlYoung的《累加和校驗算法(CheckSum算法)》,網址:https://blog.csdn.net/lisayh/article/details/81110287?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

CSDN博主weizhengbo的文章《細說循環冗餘校驗碼》,原文鏈接:https://blog.csdn.net/weizhengbo/article/details/75040495?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

CSDN博主dangzhangjing97的《TCP之 流量控制(滑動窗口)和 擁塞控制(擁塞控制的工作過程)》網址:https://blog.csdn.net/dangzhangjing97/article/details/81008836?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

CSDN博主frank_jb的《IPv4與IPv6數據包格式》,網址:https://blog.csdn.net/frank_jb/article/details/45093615

CSDN博主_佚名-2018_的<網絡隧道Tunnel技術>,網址:https://blog.csdn.net/wangjianno2/article/details/75208036?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

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