IP数据报的格式(IPv4)
图源:360百科
版本
占4位。
- IPv4:0100
- IPv6:0110
首部长度
占4位,可表示的最大十进制数为15。
因为首部有固定的20字节,因此首部长度字段最小值是5(即0101)。首部长度的最大值为15个32位字长,即60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。
区分服务
一般情况下用不到此字段。
总长度
指首部和数据之和的长度。
在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU。若所传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。
在进行分片时,数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。
标识
占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。(并无“序号”的作用,因为数据报不存在接收顺序的问题)
标志
占3位,但目前只有2位有意义。
- 标志字段最低位记为MF(More Fragment)。MF=1:后面还有分片 MF=0:已经是若干数据报片的最后一个
- 标志字段中间位记作DF(Don’t Fragment)。只有DF=0时才可以分片。
片偏移
占13位。片偏移给出的是较长的分组在分片后,某片在原分组中的相对位置。
在做题求解片偏移的时候,题中若给出一个数据报和数据报片的长度,则不能忽略首部所占的字节长。
生存时间
占8位。原先是代表数据报在网络中的寿命。后来把TTL字段的功能改成了“跳数限制”(但名称没变)。路由器在每次转发数据报之前就把TTL值减1。
协议
占8位。
协议名 | ICMP | IGMP | IP | TCP | EGP | IGP | UDP | IPv6 | ESP | AH | ICMP-IPv6 | OSPF |
---|---|---|---|---|---|---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 4 | 6 | 8 | 9 | 17 | 41 | 50 | 51 | 58 | 89 |
首部检验和
占16位。这个字段只检验数据报的首部,但不包括数据部分。
计算方法:在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置0。用反码算数运算把所有16位字相加后,将得到的和的反码写入检验和字段。接收方接到数据后,用相同的方式算检验和,如果一致则接收,否则丢弃。
【补充】二进制反码求和:从低位到高位计算。
数1 | 数2 | 结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0,产生进位1加到下一列 |
如果是最高位是1和1相加,则进位加到最低位。
源地址
占32位。发送IP数据报的主机的IP地址。
目的地址
占32位。接收IP数据报的主机的IP地址。
IP数据报首部的可变字段
选项字段用来支持排错、测量以及安全等措施。