IPv4分组格式
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 | 0 |
2 | 1500 | 20 | 1480 | 1 | 185 |
3 | 1000 | 20 | 980 | 0 | 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