首页 理论教育 IP协议:数据报格式与限制

IP协议:数据报格式与限制

时间:2023-06-30 理论教育 版权反馈
【摘要】:图2-3-9IP 数据报的格式版本: 指出此数据报所使用的IP 协议的版本号,IP 版本4 是当前广泛使用的版本。数据报的总长度不能超过65535字节,否则接收方认为数据报遭到破坏。第3、4 字节数据值为“00 34 ”,其十进制值为52,表明该IP 数据报总长度为52字节,减去20 字节的首部,即该IP 数据报的数据内容长度为32 字节。第13 ~16 字节数据值为“ca 59 e9 65”,对应的十进制数为“202 89 233 101”,表明该IP 数据报的源地址为202.89.233.101。

IP协议:数据报格式与限制

IP 是TCP/IP 协议族中最为核心的协议,所有的TCP、UDP、ICMP 及IGMP 数据都以IP数据报格式传输。IP 提供不可靠、无连接的数据报传送服务。

1)不可靠

不可靠的意思是该协议不能保证IP 数据报能成功地到达目的地。IP 仅提供最好的传输服务。当发生某种错误时(如某个路由器暂时用完了缓冲区),IP 有一个简单的错误处理算法: 丢弃该数据报,然后发送ICMP 消息报给信源端。任何要求的可靠性都必须由上层协议(如TCP)提供。

2)无连接

无连接的意思是IP 并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP 数据报可以不按发送顺序接收。如果一信源(信息发布者)向同一信宿(信息接收者)发送两个连续的数据报(先发送A,再发送B),由于每个数据报都是独立地进行路由选择,就可能选择不同的路线,因此B 可能在A 到达之前到达。

1.IP 数据报格式和封装

IP 数据报的格式如图2-3-9 所示。常见的IP 首部长为20 字节,如果含有选项字段,那么首部长度会大于20 字节。

图2-3-9 IP 数据报的格式

(1)版本: 指出此数据报所使用的IP 协议的版本号,IP 版本4 (IPv4)是当前广泛使用的版本。

(2)首部长度: 指出整个数据报首部的长度,是首部占32 位字长的数目,包括任何选项。由于它是一个4 位字段,因此首部最长为60 字节。普通IP 数据报(没有任何选择项)字段的值是5。接收端通过此域可以知道在数据报首部何处结束及读数据的开始处。

(3)服务类型: 用数值表示出报文的重要程度,该数值大的报文将被优先处理。在大多数情况下,不使用此域。

(4)总长度: 指出报文的以字节为单位的总长度。数据报的总长度不能超过65535字节,否则接收方认为数据报遭到破坏。利用首部长度字段和总长度字段,就可以知道IP 数据报中数据内容的起始位置和长度。

(5)标识: 该字段唯一地标识主机发送的每一份数据报。通常,每发送一份数据报,标识的值就会加1。这个域用于标识数据报位置,分段的数据报保持最初的ID 号。

(6)标志: 该字段占3 位。从左往右看,第一个标志位暂时不用;第二个标志位为DF(Don't Fragment),DF =1 表示不允许分片,DF =0 表示允许分片;第三个标识位为MF(More Fragment),MF =1 表示后面还有分片的数据报,MF =0 表示分片数据报的最后一个。

(7)片偏移: 指本片数据在初始数据报中的偏移量,以8 字节为单位。

(8)生存时间: 表明数据报允许继续传输的时间。假如一个数据报在传输过程中丢失或被丢弃,则指示数据报会发回发送方,指示其数据报丢失,于是发送方重传数据报。

(9)协议: 指出处理此数据报的上层协议号。

(10)首部检验和: 可作为首部数据有效性的校验。

(11)源地址: 指出发送机器的地址。

(12)目的地址: 指出目的机器的地址。

(13)选项: 该域是可选的。

IP 数据报和ARP 数据报一样,被直接封装在链路层数据帧里。

2.IP 数据报实例分析

启动Wireshark 抓包的实例示意如图2-3-10 所示。

图2-3-10 IP 数据抓包实例

在该实例中,“类型”字段值为“08 00”,表明封装的是IP 数据报。

图2-3-10 中灰色背景的20 字节即IP 数据报的首部,下面详细分析IP 数据报的首部含义:

(1)第1、2 字节数据值为“45 00”,表明版本号为“4”,即IPv4 版本;首部长度为5个32 位,即20 字节。

(2)第3、4 字节数据值为“00 34 ”,其十进制值为52,表明该IP 数据报总长度为52字节,减去20 字节的首部,即该IP 数据报的数据内容长度为32 字节。

(3)第5、6 字节数据值为“60 ef”,其十进制值为24815,表明该IP 数据报的ID 号为24815。

(4)第7、8 字节数据值为“40 00”,可见其前3 位为“010”,表明该IP 数据报允许分片,这是最后一片;后13 位全为0,表明没有偏移量。

(5)第9 字节数据值为“73”,其十进制值为115,表明该IP 数据报的生存期为115 秒。

(6)第10 字节数据值为“06”,其十进制值为6,表明该IP 数据报内封装的是TCP 数据包。

(7)第11、12 字节数据值为“28 67”,计算检验和,为正确的。

(8)第13 ~16 字节数据值为“ca 59 e9 65”,对应的十进制数为“202 89 233 101”,表明该IP 数据报的源地址为202.89.233.101。

(9)第17 ~20 字节数据值为“c0 a8 0a 06”,分别对应的十进制数为“192 168 10 06”,表明该IP 数据报的目的地址为192.168.10.06。

3.有关IP 分片

以太网和802.3 都对数据帧的长度有限制,其最大值分别是1500 字节和1492 字节。链路层的这一特性称为MTU (Maximum Transmission Unit,最大传输单元),不同类型的网络大多数都有一个上限。例如,令牌环网的MTU 长度为17914 字节(RFC 1042);FDDI 网的MTU 长度为4352 字节(RFC 1188);以太网的MTU 长度为1500 字节(RFC 894);X.25 网的MTU 长度为576 字节(RFC 877);PPP 协议的MTU 长度为296 字节(RFC 1144)。

如果IP 层有一个数据报要传,而且数据的长度比链路层的MTU 还大,那么IP 层就需要进行分片(fragmentation),把数据报分成若干片,且每片都小于MTU。

对于发送端发送的每份IP 数据报来说,其标识字段都包含一个唯一值。该值在数据报分片时被复制到每片,标志字段用其中一位来表示“更多的片”。除了最后一片,其他每个组成数据报的片都把该位置1。片偏移字段指的是该片偏移原始数据报开始的位置,以8 字节为单位。另外,当数据报被分片后,每片的总长度值要改为该片的长度值。

当IP 数据报被分片后,每片都成为一个分组,具有自己的IP 首部,并在选择路由时与其他分组独立。虽然当数据报的这些片到达目的端时有可能失序,但是在IP 首部有足够的信息让接收端能正确组装这些数据报片。

4.IP 分片数据报实例分析(www.xing528.com)

启动Wireshark 截获的IP 分片的实例分别如图2-3-11、图2-3-12 所示,下面分析其IP 首部和这两片数据包的关系。

图2-3-11 IP 分片实例: 分片一

(1)第3 帧数据和第4 帧数据的IP 首部ID 号都是27539,说明是应用程序发送的同一个数据包,被IP 分片为若干帧数据。

(2)第3 帧数据的IP 首部的“偏移量”字段值为“00”,表明该片数据是初始数据报的第1 片数据包。“标志”字段的DF 位为0,表明允许分片;MF 位为1,表明该片数据包不是最后一片,后面还有后续分片。“总长度”字段值为1500 字节,除去20 字节的IP 首部,剩下的1480 字节数据就是IP 包携带的内容,表明紧接着的第2 片数据包在初始数据报中的偏移量应该是1480 字节处。

图2-3-12 IP 分片实例: 分片二

(3)第4 帧数据的IP 首部的“偏移量”字段值为“b9”,其十进制值为185,因为该偏移量以8 字节为单位,所以用185 乘以8 得1480 字节,表明该片数据在初始数据报的第1480 字节处,因此,该片数据是紧接第2 帧数据的第2 片数据包。“标志”字段的DF 位为0,表明允许分片,MF 位为0,表明该片数据包是最后一片。

【结论】 原始数据包被分成两片,分别封装成第3 帧数据和第4 帧数据,且第3 帧在前,第4 帧在后。

【问题】 有一1508 字节的数据到达IP 层,要求传送。为什么需要分片? 该如何分片?在IP 首部如何设置相应的信息?

【解答】 若将1508 字节封装成一个IP 数据报,即需要加上至少20 字节的IP 首部,则总的IP 数据报长度为1528 字节,将大于以太网MTU 的上限1500 字节,所以必须分片。

针对以太网的MTU 为1500 字节,可以计算出一个IP 数据报能传送的最大数据为1480字节,所以做如下分片:

注意:

第1 片数据长度为1480 字节,取自原始数据的第0 ~1479 字节,即相对于原始数据来说其偏移量为0;第2 片数据长度为28 字节,取自原始数据的第1480 ~1507字节,即相对于原始数据来说其偏移量为1480。

对每片数据的IP 首部进行相应设置:

(1)发送的每份IP 数据报的多个分片,其标识字段都为唯一的ID 值,即每片数据的IP 首部中的标识字段相同。

(2)标志字段用最低位(MF 位)来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该位置1。所以,第1 片数据的IP 首部的MF 位置1,即标志字段的值为001;同理,第2 片数据的IP 首部的标志字段的值为000。

(3)片偏移字段指的是该片偏移原始数据报开始处的位置,以8 字节为单位。

第1 片数据从原数据的第0 字节开始取,所以其片偏移值为0,即13 个0,和该片的3位的标志字段001 合为2 字节,转换为十六进制数,为(2000)16

第2 片数据从原数据的第1480 字节开始取,所以其片偏移值为1480,1480/8 =185,转换成二进制数为10111001,左边添加若干0,扩充为13 位,再和该片的3 位的标志字段000合为2 字节,转换为十六进制数,为(00B9)16

(4)每片的总长度值要设为该片的长度值。

第1 片数据长度为1480 字节,加上20 字节的IP 首部,所以其总长度为1500 字节,转换成十六进制数,为(05DC)16

第2 片数据长度为28 字节,加上20 字节的IP 首部,所以其总长度为48 字节,转换成十六进制数,为30,占2 字节,即(0030)16

5.IP 协议中的检验和

我们用Wireshark 在客户机上可以很容易抓到IP 数据包,如图2-3-13 所示。

图2-3-13 IP 数据报实例

所抓到的IP 数据报为“45 00 00 34 1e 86 40 00 40 06 01 e2 ac 16 61 17 ac 16 61 18”,共20 字节。根据IP 数据报的格式,可以看到首部校验字段为01e2。它是怎么算出来的呢? 其计算方法如下:

(1)把首部校验字段(即01e2)用0000 代替,依次累加20 字节的数值:

(2)把式(2-1)得到的结果2fe1b 中溢出的一位2,与后4 位进行十六进制加法:

(3)用ffff 减去式(2-2)的结果就可以了,即

通过以上分析,即可知道IP 协议数据检验和是如何计算出来的。

数据在传输过程中,计算机只要将IP 数据报中的前20 字节按照上面的算法得到的结果是01e2,就认为IP 数据传输成功。

6.IP 协议小结

IP 协议是计算机网络协议中最重要的一个协议,它有以下几个特点:

(1)从TCP/IP 结构上看,IP 协议是互联网层的协议,它起到承上启下的作用,在它的下面有网络接口层,在它上面有传输层,因此它是一个中间连接的协议。另外,从协议的角度来看,在它的下面有以太网协议,在它上面有TCP 和UDP 两个主要的通信协议,还有其他传输控制协议。IP 协议只是连接这几个协议的中间协议。

(2)由于IP 协议是个中间协议,所以在计算校验和时,只计算IP 数据报的20 字节,对于其上层的协议,不在校验之内。

(3)数据传输在IP 层开始分片,既将一个大的数据拆分成最大不超过1480 字节的小的数据报。拆分后的数据包被标上一定的标识,以独立的方式发送出去。数据报在传输过程中如果出现错误,则丢弃IP 数据报,发送ICMP 消息给信源端,重新传送数据报。

(4)IP 数据报首部的“总长度”字段为16 位,表示的最大数为65535,即表示一个完整的IP 数据报的最大长度为65535 字节。由于受到以太网MTU 的1500 字节的限制,需要对大于1500 字节的数据进行分片处理,65535 字节的数据会被分成45 片,最后一片的片偏移为1480 ×44/8 =8140 =(1111111001100)2,占13 位。因此,IP 数据报首部的片偏移字段只需要13 位就可以表示所有分片数据的片偏移信息。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈