1. IP 报文格式
0bit是指位于最左边的最高位,31bit是指位于最右边的最低位,4个字节的32bit按照 bigendian(大端格式:低字节位于高地址)字节序传输:首先是0~7bit,其次 8~15bit,然后 16~23bit,最后是 24~32bit。TCP/IP 协议体系中所有数据报的首部中的二进制整数都要求按照这种大端形式的网络字节序进行传输。2. 字段说明
版本:占4位,指 IP 协议的版本,目前广泛使用的 IP 协议版本号为 4。首部长度:占 4 位,由于首部长度应为 4 字节的倍数,当首部长度不是 4 字节的整数倍时,则需要利用最后的填充字段填充为 4 字节的倍数。一般该字段值为5。服务类型:包括现已被忽略的3 位优先权子字段,4 位的 TOS 子字段和 1 位必须置零的未用位。4bit 的 TOS 分别表示:最小时延、最大吞吐量、最高可靠性和最小费用。4bit 只能置其中 1bit。若 4bit均为 0,则为一般服务。总长度:以字节为单位,指整个IP 数据报的长度,包括 IP 首部和负载。标识:IP 软件在存储器中设置了一个计数器,该计数器会在产生一个 IP 数据报时加1,然后将此值赋给标识字段,当出现数据报长度由于超过网络的 MTU需要分片时,系统就会将标识字段的值复制到所有的分段的标识字段中,以此保证最后能将各分片正确地重组为原来的数据报。标志位:后 2 位有意义,最低位记为 MF,MF=1标识后面还有分片,MF=0 标识这是最后一个分片。DF是中间位,用于表明能否分片,允许分片时DF 应置为 0。该字段值为 3’b010。片偏移字段:指出某片在分片操作后在原分组中的相对位置。片偏移的偏移单位是8 字节,每个分片的长度一定是 8 字节的整数倍。生存时间:该字段设置了数据报可以经过的最多的路由器数,TTL 的初始值由源主机设置,一般为 32 或 64,该值在经过一个处理它的路由器时减掉1,数据报会在 TTL 值减为 0 时被丢弃,此时会发送 ICMP 报文通知源主机所发送的报文并未到达目标地址。协议字段:表明IP 数据报中的数据部分所使用的的协议类型,常见的协议和相应的协议字段如下表:首部校验和字段:该字段仅计算IP 数据报的首部部分,并不会计算数据部分。由于生存时间、标识以及片偏移等字段可能发生变化,数据报每经过一个路由器都会将首部校验和重新进行一次计算。
源地址和目的地址都占32 位,分别表示本地 IP 地址和目的 IP 地址。3. 首部校验和字段校验方法 – 反码求和
首先将校验和字段初始值设置为0,对首部每 16bit 进行相加,得到一个带有进位的值 VALUE1,再将 VALUE1 的高 16bit和低 16bit 进行相加,对得到的值 VALUE2 截取低16bit,并按位取反得到的值即为校验和的值。