IP 数据报的组成
IPv4 数据报头部的组成
每个字段的含义:
- 版本:指 IP 协议的版本,可以填 4 或者 6
- 首部长度:首部有可选字段,所以需要指明首部长度
- 首部长度的单位是 4B
- 首部长度字段是 4 位,可表示的最大长度为
(2^4 - 1) * 4B = 60B
,首部长度受限于此 - 首部长度一个单位是 4B,因此需要对首部进行填充以字节对齐
- 区分服务:几乎不使用
- 总长度:首部+数据部分的总长度,单位是 1B,IP 数据报的最大长度为:
2^16 - 1B = 65535B
- 标识:标识让分片可以重新组装成数据报。
- 标志:标志字段有 3 位,中间位是 DF,最低位是 MF
- DF:表示是否允许路由器进行分片。该位为 0 时,才运行分片(Dont)
- MF:表示是否有更多的分片。该位为 0,表示当前分片是最后一个分片
- 片偏移:占 13 位,分片相对于数据部分开头的偏移,单位是 8B
- 生存时间:TTL。路由器在转发数据报之前,会把 TTL 减 1,如果减小到 0,就丢弃分组,并报告差错
- 协议:上层的协议
- 首部校验和:仅包含首部的校验和。IP 数据报长度太大,如果对整个数据报进行校验,会增加路由器转发的耗时
数据报分片
IP 数据报的最大长度为 65535B,数据报需要封装在数据链路层的帧里面,不同的链路有不同的 MTU(MTU是指数据链路帧的数据部分,以太网帧的 MTU 为 1500B),IP 数据报在传送的过程中可能会被切分为多个分片。
如果切片失败
(需要进行切片,但 DF 字段为 1),则将数据报丢弃,并向源主机发送 ICMP 报文
谁分片,谁组装
源主机进行分片,路由器可以进行分片。目的主机进行组装。
IP 数据报分片的实例为:
注:分片之后,首部的总长度字段应该填写分片的总长度,而不是未分片前数据报的总长度。(仔细思考一下,如果这个字段是数据部分总长度,倒是可以填写分片前的数据报中数据部分总长度)。