IP
约 709 字大约 2 分钟
2026-02-27
格式

版本
用于标识 IP 通信协议双方的版本,版本必须一致。对于 IPV4,该字段的值必须是 4
头部长度
用于标识 IP 头部的大小,从而确定数据的偏移量,这就是头部长度 (internet header length, IHL) 头部长度的单位为[[TCP#^3549ed|32 位字]],因此可以推断出 IP 头部的最大为 60 字节,其中选项部分为 40字节
区分服务
只有在使用区分服务时,这个字段才起作用。例如:需要实时数据流的 VoIP
显示拥塞通告
允许在不丢包的同时通知对方网络拥塞的发生
全长
占 16 位,理论上最大的 IP 可以达到 65535 字节,若 IP 包的长度大于 MTU 时需要进行分片,即拆分为多个包 全长(Total Lenth)与头部长度不同,直接以字节为单位,而不是 32-bit 字,因此可表述的长度为 216−1=65535 字节
标识符
占 16 位,用于唯一标识一个包的所有分片。因为分片的 IP 包不一定能够按先后顺序到达,因此需要一个标识符标定所属的 IP 包,用于相同 IP 包的重组
标志
占 3 位
- 保留,必须为 0
- 禁止分片(don’t fragment ,DF),只有该位为 0 时才允许分片
- 更多分片(more fragment ,MF),该位为 1 时表示后面还有分片,为 0 表示已经是最后一个分片
分片偏移
表示一个分片相对于原始 IP 包开头的偏移量
存活时间
(time to live ,TTL),避免 IP 包因陷入路由环路而永远存在。在实际实现中设定为跳数计数器,IP 包每经过一个路由器,TTL 减一,若 TTL 为 0 将被丢弃
协议
占 8 位,表示 IP 包数据类型,表示上层协议的报文 例如
- ICMP(尽管 ICMP 与 IP 同位于网络层但依附于 IP 数据包)
- IGMP
- TCP
- UDP
- OSPF
- SCTP
头部校验和
占 16 位,仅对 IP 头部进行校验,所承载的数据如 TCP 和 UDP,它们的报文有自己的校验和字段 每一跳的路由收到 IP 包后都会重新计算头部的校验和并与之比对,若不一致则丢弃,而又因为每一跳的 TTL 都会减一,因此在转发前也需要重新计算并填写该字段
地址
标识发送方与接收方的地址
- 在 IPV4 中,每一个地址块占用 32 位
- 在 IPV6 中,每一个地址块占用 128 位 因此 IP 包中的地址块长度会根据 IP 版本进行扩展
参考
#review
