参考资料
- IETF RFC 791 — Internet Protocol
- IETF RFC 790 — Assigned Numbers
IPv4
功能规范
- IP(Internet Protocol,Internet协议)
- IP头部
- 版本(4 bits)、IHL(4 bits)、服务类型(8 bits)、总长度(16 bits)
- ID(16 bits)、标志位(3 bits)、分段偏移(13 bits)
- TTL(8 bits)、协议(8 bits)、校验和(16 bits)
- 源地址(32 bits)
- 目的地址(32 bits)
- 可选(24 bits)、填充(8 bits)
IP头部的详细内容
- 版本(4 bits)
- 版本为4,对应于IPv4
- IHL(Internet Header Length,Internet头部长度,4 bits)
- Internet头部的总长度,单位为4字节(32位)
- 其最小值为5 * 32 bits = 160 bits = 20字节
- 其最大值为15 * 32 bits = 480 bits = 60字节
- 服务类型(8 bits)
- 在低延迟、高吞吐量、高可靠三者之间进行权衡
- Bits 0~2 –> 优先级
- Bit 3 –> 0 = 正常延迟,1 = 低延迟
- Bit 4 –> 0 = 正常吞吐量,1 = 高吞吐量
- Bit 5 –> 0 = 正常可靠,1 = 高可靠
- Bits 6~7 –> 保留,0
- 优先级
- 111 –> network control
- 110 –> internetwork control
- 101 –> CRITIC/ECP
- 100 –> flash override
- 011 –> flash
- 010 –> immediate
- 001 –> priority
- 000 –> routine
- 在低延迟、高吞吐量、高可靠三者之间进行权衡
- 总长度(16 bits)
- 数据报的总长度,单位为字节(8位)
- 其最大值为65536字节。然而,过长的数据报是不切实际的,所以主机、网络通常使用576字节
- 576字节的数据报 = 512字节的数据 + 64字节的头部
- 由于IP头部通常为20字节,故剩下的头部空间可以留给上层协议(比如TCP协议)
- ID(Identifier,标识符,16 bits)
- 用于数据报的分段
- 标志位(3 bits)
- Bit 0 –> 保留,必须为0
- Bit 1 –> 0 = 可能分段,1 = 不分段(Don’t Fragment,DF)
- Bit 2 –> 0 = 最后分段,1 = 更多分段(More Fragments,MF)
- 分段偏移(13 bits)
- 数据报中分段的偏移,单位为8字节(64位)
- 第一个分段的偏移为0
- TTL(Time To Live,生存时间,8 bits)
- 数据报在Internet中的最大保留时间,单位为秒
- 如果TTL为0,那么数据报会被销毁
- 协议(8 bits)
- 上层协议的类型
- 校验和(16 bits)
- Internet头部的校验和