IP数据报格式
IP数据报首部的固定部分中的各字段
- 版本占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)或IPv6(即版本6的IP协议)
- 首部长度占4位,可表示的
最大十进制数值是15
。请注意,首部长度字段所表示数的单位是32位字
(1个32位字长是4字节)。因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5(即二进制表示的首部长度是0101 = 5,表示大小 = 5 * 4 (32 位字 = 20 字节))。而当首部长度为最大值1111时(即十进制数的15),就表明首部长度达到最大值15个32位字长,即60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此IP数据报的数据部分永远在4字节的整数倍时开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度是20字节(即首部长度为0101),这时不使用任何选项。 - 区分服务占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年ITF把这个字段改名为区分服务DS(Differentiated Services)只有在使用区分服务时,这个字段才起作用(见844节)。在一般的情况下都不使用这个字段[RFC2474,3168,3260]。
- 总长度 指首部和数据之和的长度,单位为字节。
总长度字段为16位
,因此数据报的最大长度为2^16-1=65535字节。尽可能长的IP数据报会使传输效率得到提高,但数据报短些也有好处。每一个IP数据报越短,路由器转发的速度就越快。为此,IP协议规定,在互联网中所有的主机和路由器,必须能够接受长度不超过576字节的数据报。这是假定上层交下来的数据长度有512字节(合理的长度),加上最长的IP首部60字节,再加上4字节的富余量,就得到576字节。当主机需要发送长度超过576字节的数据报时,就要进行分片。 - 标识(identification)占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。
相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报
- 标志(flag)占3位,但目前只有两位有意义。
标志字段中的最低位记为MF
(More Fragment)- MF=1即表示后面“还有分片”的数据报。
- MF=0表示这已是若干数据报片中的最后一个。
- 标志字段中间的一位记为DF(Don't Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
- 片偏移占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。
片偏移以8个字节为偏移单位
。这就是说,每个分片的长度一定是8字节(64位)的整数倍
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步