?IP數據報組成
IP數據報(IP Datagram)是網絡中傳輸數據的基本單位。
IP數據報頭部
版本(Version)
4bit
告訴我們使用的是哪種IP協議。IPv4版本是“4”,IPv6版本是“6”。
頭部長度(IHL,Internet Header Length)
4bit
表示IP數據報頭部的長度,單位是32位(4字節)
比如:頭部長度為“5”,表示頭部有5個32位(5 * 4字節)。
服務類型(TOS,Type of Service)
8bit
總長度(Total Length)
16bit
整個IP數據報的長度,包括頭部和數據部分,單位是字節。
比如:如果總長度是“1500字節”,那么數據包的大小就是1500字節。
標識符(Identification)
每個數據報都有一個唯一的ID,用于當數據報被分段 (IP數據報大于MTU)時,幫助接收端正確地把這些分段重新組合成完整的數據包。
標識符(Identification)字段 是一個 16 位的數字
比如:如果一個數據報被分成了多個小分段,它們會使用相同的標識符來標記屬于同一個數據報。
標志(Flags)
用來指示數據包是否被分段,以及是否還有后續的分段。常見的標志有“更多分段”(More Fragment)標志。
比如:如果有“更多分段”標志,表示這不是數據包的最后一部分。
IP標志字段一共有3位(bit):但實際上只用到了中間兩位,如下:
名稱 | 位置 | 含義 | 通俗解釋 |
---|---|---|---|
第0位 | 保留位 | 一般是0 | 沒啥用,先放著 |
第1位 | DF(Don't Fragment) | 不許分段 | 如果設置了這個為1,路由器不能對數據包切片 |
第2位 | MF(More Fragments) | 后面還有分段 | 如果這個為1,說明還有“下一段”數據 |
分段偏移(Fragment Offset)
網絡中,IP數據報有最大大小限制(MTU),當數據太大,就要被“切片”——也就是分段傳輸。
每一段都需要帶一個“偏移量”,告訴接收方:我是哪一段,拼到原始數據的哪里去。
假設原始數據有 4000字節,但網絡限制每個IP數據包最多只能傳 1500字節。
IP協議就會把它分成三段:
段號 | 數據大小 | 分段偏移(單位是8字節) | 實際字節范圍 |
---|---|---|---|
第1段 | 1480字節 | 0 | 第0到1479字節 |
第2段 | 1480字節 | 185(=1480/8) | 第1480到2959字節 |
第3段 | 1040字節 | 370(=2960/8) | 第2960到3999字節 |
注意:分段偏移是按8字節為單位的,不是直接表示字節位置。每個分片的數據部分(不是總長度)必須是 8 字節的整數倍(8 的倍數),除了最后一個分片可以不是。
生存時間(TTL,Time to Live)
TTL 是一個數字,表示最多可以經過多少個路由器。限制數據包在網絡中的生命時間
。每經過一個路由器,TTL值就減少1。當TTL值為0時,數據包會被丟棄(丟棄它的路由器會發送一個 ICMP 錯誤報文),防止在網絡中無限循環。
協議(Protocol)
標識數據部分使用的上層協議。例如,如果是TCP協議,它會標識為6;如果是UDP協議,它會標識為17。
頭部校驗和(Header Checksum)
用來檢查IP頭部是否發生了錯誤。如果計算的校驗和與接收到的校驗和不匹配,說明數據包頭部有錯誤。
比如:它可以幫助網絡設備確保頭部數據沒有損壞。
源IP地址(Source IP Address)
表示數據包的發送者IP地址。
比如:如果源IP是“192.168.1.1”,說明這個數據包是從IP為“192.168.1.1”的設備發出的。
目標IP地址(Destination IP Address)
表示數據包的接收者IP地址。
比如:如果目標IP是“10.0.0.2”,說明數據包的目的地是IP為“10.0.0.2”的設備。
選項(Options)(可選)
有時可以在頭部加上一些特殊的選項,如安全設置、時間戳等。這部分通常不是很常用。
比如:某些網絡可能要求對數據包進行時間戳記錄。
填充(Padding)
如果頭部需要調整為32位的倍數,填充字段會添加額外的零,確保頭部的總長度是4的倍數。
IP數據部分
IP數據報分片問題
字段 | 含義 |
---|---|
Identification | 所有分片有相同值,接收端靠它來識別“屬于同一個原始數據包” |
Fragment Offset | 分片在原始數據中的起始位置,單位是 8 字節 |
MF(More Fragments) | 如果還有后續分片,就設為 1;最后一片設為 0 |
Total Length | 每個分片自身的總長度(= IP頭 + 數據部分) |
規則 | 說明 |
---|---|
除最后一片外,每個分片數據部分長度必須是 8 的整數倍 | 因為偏移量單位是 8 字節 |
所有分片都必須帶 IP 頭 | 每個都是一個合法 IP 數據報 |
接收端根據:源地址 + 標識符 + 偏移量 來重組數據 | |
最后一片的 MF = 0,表示結束 |
?