An IP packet consists of a header section and a data section.
IP分組首部格式
IPv4首部包含14個字段(fields),13是必需的,最後一個可選。
- 版本(Version)
4 bits,IPv4分組的version值為0100
- 首部長度(Internet Header Length,IHL)
4 bits,機關是32-bit words(即4 bytes)。最小值為5,此時首部不包含可選項(options),長度為20 bytes。最大值為15,此時IHL為60 bytes。
- 服務類型(Differentiated Service Code Point,DSCP)
8 bits,指定packet的優先級、延遲、吞吐率、可靠性要求等。
- 明确的擁塞通告(Explicit Congestion Notification,ECN)
- 總長度(Total Length)
16 bits,分組的總長度,包括首部和資料。分組最小值為IHL的最小值20 bytes,最大值為65535 bytes。
- 辨別(Identifier)
16 bits,同一IP分組的資料片(fragments)具有相同的辨別。
- 标志(Flags)
3 bits,第0位是保留位(resvered),必需為0. 第1位=1時,表示不分片(Don’t fragment, DF),為0表示可分片。第2為=1時,表示該後續有其他分片(More fragmetns, MF)。
- 片偏移(Fragment Offset)
13 bits,以8 bytes為機關給出目前資料片在原IP分組中的位置。最大偏移(2^13 - 1)* 8 bytes = 65528 bytes,加上首部的20 bytes已超出IP分組的最大總長度。
- 生存時間(Time To Live,TTL)
8 bits,限制IP分組在網絡中存在時間的計數器,TTL的機關為秒(second)
。實際上,TTL作為路由(router)的最大跳數(hop count)使用初始值有發送終端設定。,每到達一個路由,TTL的值減一,值為0時,router丢棄該分組,并向sender發送ICMP時間逾時(ICMP Time Exceeded)的消息。
- 協定(Protocol)
8 bits,訓示IP分組資料部分使用的協定,可用的協定清單,常見的如TCP(6)、UDP(17)、ICMP(2),括号内為協定号(Protocol Number)。
- 首部校驗和(Header Checksum)
16 bits,僅驗證首部。分組到達router後,router計算首部的checksum,和該字段比較,不比對則丢棄該分組。
- 源位址(Source Address)和目的位址(Destination Address)
在傳輸過程中,有可能被(Network address translation,NAT)裝置改變。
- 可選項(Options)
資料分片方法
路由接收到一個packet,檢查目的位址,确定輸出接口(outgoing interface)和接口的最大傳輸單元(Maximum Transmition Unit,MTU)。如果packet > MTU,且DF位是0,路由會對packet分片。
4000 bytes的packet,首部20bytes,沒有options,router的MTU是1500 bytes,分片。
Fragment | Total bytes | Header bytes | Data Bytes | MF | Fragment offset |
---|---|---|---|---|---|
1 | 1500 | 20 | 1480 | 1 | |
2 | 1500 | 20 | 1480 | 1 | 185 |
3 | 1000 | 20 | 980 | 370 |
如果接下來的router的MTU是1000 bytes,上表Fragment 1/2/3都會在分片,一個IP分組的所有分片的Identifier位相同,隻有最後一個分片的MF=0。
參考:
https://en.wikipedia.org/wiki/IPv4
[email protected]+block/%E8%A7%86%E9%A2%914_IP-%E5%88%86%E7%BB%84%E6%A0%BC%E5%BC%8F.pdf”>http://www.xuetangx.com/asset-v1:[email protected]+block/%E8%A7%86%E9%A2%914_IP-%E5%88%86%E7%BB%84%E6%A0%BC%E5%BC%8F.pdf