IP数据报的格式

来源:互联网 发布:zookeeper启动 linux 编辑:程序博客网 时间:2024/05/01 17:00

 

 

TCP/IP标准中,各种数据格式常常以32位为单位来描述。

一个IP数据报由首部和数据两部分组成。首部的前一部分是固定产度,共20字节,是所有IP数据报都必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

1)版本  4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。以后应该会使用IPV6

2)首部长度  4位,可表示的最大十进制数值是15。注意,这个字段所表示数的单位是32位字(132位字是4字节),因此,当IP的首部长度为1111时,首部长度就达到最大值60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用组后的填充字段加以填充。因此数据部分永远在4字节的整数倍时开始,这样在实现IP协议时较为方便。最常用的首部长度是20字节(即首部长度为0101),这时不使用任何选项。

3)区分服务  8位,用来获得更好的服务。

4)总长度  总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节。

虽然使用尽可能长的数据报会使传输效率提高,但由于以太网的普遍应用,所以实际上使用的数据报长度很少有超过1500字节的。当数据报长度超过网络所允许的最大传送单元MTU时,就必须把过长的数据包进行分片后才能在网络上发送。

5)标识  16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就+1,并将此值赋给标识字段。但这个标识不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据包由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的个数据报片最后能正确地重装成为原来的数据报。

6)标志  3  目前只有2位有意义

   标志字段中的最低位记为MFmore fragment)MF=1即标识后面还有分片的数据报。MF=0标识这已是若干数据报片中的最后一个。

   标志字段中间的以为记为DFdon't fragment),意思是不能分片。只有当DF=0时才允许分片。

7)片偏移     13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节的整数倍。

举例:

一个数据报总长度3820字节,其数据部分3800字节(使用固定首部),需要分片为长度不超过1420字节的数据报片。因固定首部长度为20字节,因此每个数据报片的数据部分长度不能超过1400字节。于是分为3个数据报片,其数据部分长度分别为1400,14001000字节。原始数据报首部被复制为各个数据报片的首部,但必须修改有关字段的值。

8)生存时间TTLtime to live  8位,表示数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,白白消耗网络资源。路由器在转发数据报之前就把TTL-1.TTL值减小到0,就丢弃这个数据报,不再转发。因此TTL的单位是跳数。TTL的意义是指明数据报在因特网中至少可经过多少个路由器。显然,8位对应255,所以数据报能在因特网经过的路由器最大是255个。若把TTL的初始值设置为1,就表示这个数据报只能在本局域网中传送。因为这个数据报一传送到局域网上的某个路由器,在北转发前TTL值就减到0了,因而就会被这个路由器丢弃。

9)协议  8位,协议字段指出数据报携带的数据使用何种协议,以便使目的主机的IP层知道应该将数据部分上交给哪个处理过程。常用的一些协议和相应的协议字段值如下:

10)首部检验和  16位。这个字段只检验数据报的首部,不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间,标志,片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

11)源地址   32

12)目的地址  32

 

IP数据报首部的可变部分就是一个选项字段。用来支持排错,测量一级安全等措施,内容很丰富。此段长度可变,从1个字节到40个字节不等,取决于所选择的项目。增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少备用。新的IPv6版本就把IP数据报的首部长度做成固定的。

 

原创粉丝点击