20-60字节
版本号Version
- IPv4
- IPv6
首部长度Header Length
单位:4字节
max(4bits) = 15
max(IP首部长度)= 15 * 4bytes = 60字节 (可选最大40字节)服务类型Type of Service
标示包传输优先级。总共8位,是由3个优先权位(不再使用),4个 TOS 位,1个固定的0组成。
4个 TOS 位:最新延迟、最大吞吐量、最高可靠性、最小成本,只能4选一。总长度Total Length
单位:字节
整个IP包的长度:max(2^16=65535)字节
包体数据长度 = Total Length - Header LengthIdentifier(标识符)
网络中转发的IP报文的长度可以不同,但如果报文长度超过了数据链路所支持的最大长度,则报文就需要分割成若干个小的片段才能在链路上传输。比如以太网帧中数据最大长度(MTU)为 1500字节,大于 MTU 的都会被分割,被分割的每个包都有相同的一个值,表示这是同一个 ip 包。
Flag(标志位)
标志字段在IP报头中占3位。
- 第1位作为保留;
- 第2位,分段,是否允许分片;(如果不允许分片,包超过了数据连路支持的最大长度,则丢弃该包,返回发送者一个 ICMP 错误)
- 第3位,更多分段。表示是否最后一个分片。 当目的主机接收到一个IP数据报时,会首先查看该数据报的标识符,并且检查标志位的第3位是置0或置1,以确定是否还有更多的分段。如果还有后续报文,接收主机则将接收到的报文放在缓存直到接收完所有具有相同标识符的数据报,然后再进行重组。
Fragmented Offset(偏移量)
当某个 IP 大包分成多片时,各个分片是不按顺序达到目的地的,IP 包根据分片的偏移量进行重组包。(跟TCP 原理一样)
(Time to Live)生存时间
表示数据包经过的路由器个数。如果网络上有些路由器的路由表配置不合理,路由寻址可能会导致死循环,数据包会一直循环传输。 IP 包发送的时候可以设置一个 TTL 值,比如 TTL=64,没经过一个路由器 TTL 减1,减到0 还没到到目的地,路由器会抛弃这个IP包,并使用一个ICMP消息通知发送方。
Protocal(协议)
协议类型 1:ICMP, 2:IGMP, 6:TCP, 17:UDP。
Header CheckSum(首部校验和)
校验 IP 协议头,判断IP协议头是否正确传输。
Source Address(源IP):
请求方 IP
Distination Address(目的IP):
响应方 IP
Options(可选字段):
IP支持很多可选选项。