假设路由器R存在两个接口,接口R1连接标准局域网,接口R2连接限制最大传输单元(MTU)的局域网,现在一个IP数据包从接口R1转发到接口R2,从R2链路上截获两个数据包的IP报头,如题47-a表所示,请回答如下问题:
题47-a表 | |
编号 | IP分组内容(十六进制) |
1 | 45 00 00 64 00 1e 20 00 ff 01 18 27 c0 a8 01 01 c0 a8 01 02 |
2 | 45 00 00 58 00 1e 00 1e ff 01 38 15 c0 a8 01 01 c0 a8 01 02 |
(2)所传输的IP数据包的数据大小是多少分为了几个IP分片
(3)根据截获的IP报头,请填充没有截获的数据报,注意不包含头部校验和。
注:IP分组头结构分别如题47-b图所示。
参考答案:[解答] (1)接口R2的最大传输单元是100字节。
(2)所传输的IP数据包大小是308字节,分为了4个IP分片。
(3)没有截获的数据包是中间的两个IP分片:
第二个分片:45 00 00 64 00 1e 20 0a ff 01 18 1d c0 a8 01 01 c0 a8 01 02
第三个分片:45 00 00 64 00 1e 20 14 ff 01 18 13 c0 a8 01 01 c0 a8 01 02
解析: 本题从网络协议分析的角度考查IP分片的原理及其应用,在IP层下面的每一种数据链路层都有其自己的帧格式,其中包括帧格式中的数据字段的最大长度,称为最大传输单元(MTU,Maximum Transfer Unit)。当一个IP数据报封装成数据链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值,这就是分片问题产生的原因。
在IP分组头结构里面和分片相关的字段主要有三个:
(1)标识字段,用于标识数据报。当数据报长度超出网络最大传输单元(MTU)时,必须进行分割,并且需要为分割段(Fragment)提供标识。所有属于同一数据报的分割段被赋予相同的标识值。
(2)标志字段,后两位最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。标志字段中间的一位记为DF(Don’t Fragment),表示不能分片。只有当DF=0时才允许分片。
(3)片偏移,用以指出该分段在数据报中的相对位置,也就是说,相对于用户数据字段的起点,该片从何处开始。特别注意片偏移以8字节为偏移单位。
从以上原理出发,针对第一个报文可以得到,IP报头总长度是100字节,这个总长度是包含报头和数据部分,因此MTU是100。然后从第一个报文还可以得出,IP的片偏移是0,因此第一个报文是分片的第一个分片。从第二个报文可以得出,IP的片偏移是240,数据总长度是88字节,注意包含了20个字节的头部长度,再看标志位MF为0,是最后一个分片,这就可以得到原始数据包的大小是240+(88-20=)68=308字节,因为MTU是100个字节,因此必须分为4片。
面对第三个问题,注意版本,头部长度,服务类型,标识字段,TTL,协议,源IP地址,目的IP地址必须是一致的,特别是标识字段,总长度就是最大传输单元100字节,需要添加的是标志和片偏移,分别是MF=1,DF=0,片偏移=80,和MF=1,DF=0,片偏移=160,因此填充后的IP数据包头部结果如下:
第二个分片:45 00 00 64 00 1e 20 0a ff 01 18 1d c0 a8 01 01 c0 a8 01 02
第三个分片:45 00 00 64 00 1e 20 14 ff 01 18 13 c0 a8 01 01 c0 a8 01 02