首页 理论教育下一代计算机网络技术:IP数据报格式解析

下一代计算机网络技术:IP数据报格式解析

【摘要】:图2.13IP数据报的格式图从图2.13可看出,一个IP数据报由首部和数据两部分组成。服务类型字段的前3个比特表示优先级,它可使数据报具有8个优先级中的一个。总长度字段为16bit,因此数据报的最大长度为65535字节。MF=0表示这已是若干数据报段中的最后一个。路由器在检测到这一安全任选项目时,就要使该数据报不要离开安全的环境。但如表已填满,则不填入自己的IP地址,而仅仅转发此数据报。

在TCP/IP的标准中,各种数据格式常常以32bit(即4字节)为单位来描述。图2.13是IP数据报的格式。

图2.13 IP数据报的格式图

从图2.13可看出,一个IP数据报由首部和数据两部分组成。首部的前一部分长度是固定的20个字节,后面部分的长度则是可变长度。下面介绍首部各字段的意义。

1.IP数据报首部的固定部分

(1)版本:版本字段站4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前使用的IP协议版本为4。

(2)首部长度:首部长度字段占4位,可表示的最大数值是15个单位(一个单位为4字节),因此IP的首部长度的最大值是60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后一个填充字段加以填充。这样,数据部分永远在4字节的整数倍时开始,这样在实现起来会比较方便。首部长度限制为60字节的缺点是有时(如采用源站选路时)不够用。但这样做的用意是要用户尽量减少额外的开销。

(3)服务类型:服务类型字段共8位长,用来获得更好的服务,其意义图2.13上面部分所示。

服务类型字段的前3个比特表示优先级,它可使数据报具有8个优先级中的一个。

第4个比特是D比特,表示要求有更低的时延。

第5个比特是T比特,表示要求有更高的吞吐量

第6个比特是R比特,表示要求有更高的可靠性,即在数据报传的过程中,被节点交换机丢弃的概率要更小些。

第7个比特是C比特,是新增加的,表示要求选择价格更低廉的路由

最后一个比特目前尚未使用。

(4)总长度:总长度指首部和数据之和的长度,单位为字节。总长度字段为16bit,因此数据报的最大长度为65535字节。这在当前是够用的。

当很长的数据报要分段进行传送时,总长度不是指未分段前的数据报长度,而是指分段后每个段的首部长度与数据长度的总和。

(5)标识:标识字段的意义和OSI的IPDU中的数据单元标识符的意义一样,是为了使分段后的各数据报段最后能准确地重装成为原来的数据报。注意,这里的标识并没有顺序号的意思,因为IP是无连接服务,数据报不存在按序接收的问题。

(6)标志:标志字段占3位。目前,只有前两个比特有意义。

标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面还有分段的数据报。MF=0表示这已是若干数据报段中的最后一个。

标志字段中间的一位记为DF(Don't Fragment)。只有当DF=0时,才允许分段。

(7)段偏移:段偏移字段的意义和OSI的IPDU中规定的相似,只是表示的单位不同。这里是以8个字节为偏移单位。可见,IP数据报的段偏移字段(13位长)和OSI的IPDU的段偏移字段(16位长)是相等的。

(8)寿命:寿命字段记为TTL(Time To Live),其单位为秒。寿命的建议值是32s。但也可设定为3~4s,或甚至255s。

(9)协议:协议字段占8位,它指出此数据携带的运输层数据是使用何种协议,以便目的主机的IP层知道应将此数据报上交给哪个进程。常用的一些协议和响应的协议字段值(写在协议后面的括弧中)是:UDP(17),TCP(6),ICMP(1),GGP(3),EGP(8),IGP(9),OSPF(89),以及ISO的TP4(29)。

首部检验和此字段只检验数据报的首部,不包括数据部分。不见数据部分是因为数据报每经过1个节点,节点处理机就要重新计算一下首部检验和(一些字段,如寿命、标志、段偏移等都可能发生变化)。如将数据部分一起检验,计算的工作量就太大了。

(10)地址:源站IP地址字段和目的站IP地址字段都各占4字节。

2.IP首部的可变部分

IP首部的可变部分就是一个任选字段。任选字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些任选项目只需要1个字节,它只包括1个字节的任选代码,图2.14画的是任选代码的格式。还有些任选项目需要多个字节,但其第1个字节的格式仍为图2.14所示的那样。这些任选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。

图2.14 1个字节任选代码的格式图

可以看出,任选代码共有3个字段。(www.chuimin.cn)

第1个字段是复制字段,占1位,它的作用是控制网络中的路由器在将数据报进行分段时所作的选择。当复制字段为1时,必须将此任选字段复制到每一个数据报段。而当复制字段为0时,就只复制到第一个数据报段上。

第2个字段是任选类别字段,占2位。但目前只有两种可供选用如表2.3所示。

表2.3 任选类别及意义

第3个字段是任选编号,占5个字节,它指出任选是做什么用的。

属于任选类别0的有下列一些任选编号:

(1)任选编号为0:指出这是任选项目中的最后一个。

(2)任选编号为1:无操作,用于需要按每4个字节对齐之用。和填充字段的功能是一样的。

以上两种都是只使用一个字节的任选代码。下面的几种则要使用若干个字节。

(3)任选编号为2:为安全用的。只用在美国国防系统来传送机密文件。路由器在检测到这一安全任选项目时,就要使该数据报不要离开安全的环境。在商业上尚无此应用。

(4)任选编号为7:为记录路由用的,其长度是可变的。图2.15是记录路由的任选项目的格式。

图2.15 记录路由的任选项目的格式图

这种数据报是用来监视和控制互联网中的路由器是如何转发数据报的。源站发出一个空白的表,让数据报所经过的个路由填上其IP地址,以获得路由信息。

前3个字节如下:

(1)任选代码字段——其中的3个字段分别填入0,0和7。

(2)长度字段——填入此任选项目的长度,包括这前3个字节。

(3)指针字段——指出下一个可填入IP地址的空白位置的偏移量

在这之后,就是若干个4字节长的IP地址,让各个路由器填入。当一个路由器收到包含有记录路由任选项目的数据报时,先检查指针所指的位置是否超过了表的长度。如不超过,则填入自己的IP地址,并将指针值加4,然后转发出去。但如表已填满,则不填入自己的IP地址,而仅仅转发此数据报。

一般的计算机在收到这样的数据报时,并不会理睬该数据报中所记录的路由。因此,源站必须和有关的目的主机协商好,请目的主机在收到记录的路由信息后,将路由信息提取出来,并发回源站。

下面两任选项目都是关于源站选路的。

(1)任选编号为3:不严格的源站选路(loose source routing),其长度是可变的。

(2)任选编号为9:严格的源站选路(strict source routing),其长度也是可变的。

源站选路本来是源站将数据报传送的路由事先规定好。严格的源站选路不允许改变源站规定好的路由。但不严格的源站选路允许在数据报传输的过程中,将路由表中源站已规定要经过的一些路由器,改换成别的路由器。

源站选路任选项目的格式与图记录路由的相似。前面也是3个固定的字节,但任选代码字节中的3个字段应分别填入1,0和3(不严格的源站选路)以及1,0和9(严格源站选路)。此外,这3个字节后的IP地址表不是空的,而是事先由源站写好的。数据报按源站指定的路由传送。当路由器收到此数据报后,若指针已超过表的范围,则转发此数据报,不写任何数据。若指针的指示是正确的,则填入自己的IP地址(覆盖掉原来的IP地址),并按照表中指出的一下一个地址转发出去。这里要注意,一个路由器有两个或两个以上IP地址。原来在这个任选项目路由表中写入的是路由器的入口IP地址,而路由器写的IP地址则是路由器的出口IP地址。

在数据报中加入源站选路任选项目,可以使网络的管理者了解沿网络中的某一条通路的通信状况是否正常。一般的用户并不使用这一功能。

最后一个任选项目是Internet的时间戳。

(3)任选编号为4:作时间戳用,其长度是可变的。格式和图类似,但一开始除了原来的任选代码字段(填入0,2和4)、长度字段和指针字段这3个字节外,再加上1个字节的溢出和标志两个字段。标志字段区分几种情况:①只写入时间戳;②写入IP地址和时间戳;③IP地址由源站规定好,路由器只写入时间戳。溢出字段写入1个数,此数值即数据报所经过的路由器的最大数目(考虑到太多的时间戳可能会写不下)。

时间戳记录了路由器收到数据报的日期和时间,占用了4个字节。时间的单位是毫秒,是从午夜算起的通用时间(Universal Timer),也就是以前的格林尼治时间。当网络中的主机的本地时间和时钟不一致时,记录的时间戳会有一些误差。时间戳可用来统计数据报经路由器产生的时延和时延的变化。