计算机网络协议 第五课
第四章网际协议IP
4.1 IPv4数据报
4.1.1 首部长度与总长度
- 问:某路由器接收到一个IP数据报,前8位如下:01000010,请解释它的含义
答:将其看成0100,0010,前者值是4,后者值是2,前者是版本,4代表IPv4协议;后者是首部长度,以4字节为单位计数,所以首部长度为8字节,可是8字节不满足IP数据报的格式要求,所以这是个无效的报文 - 问:一个IP数据报的首部长度为0x5,总长度为0x28,则这个IP数据报封装多少字节数据?封装该IP数据报的以太网帧的总长度是多少字节?(十进制数)
答:数据长度等于总长度减去首部长度,即0x28(十进制40)减去0x5(乘以单位4字节等于20),数据长度等于20。以太网帧的总长度在总长度的基础上加上首部和尾部共(6+6+2+4)18字节,此时共(40+18)58字节,因为不满足最小帧长64字节的需要,所以需要补上6字节 - 问:“总长度”字段存在的理由?
数据部分的长度可以从总长度中减去首部长度得出
4.1.2 TTL与协议
-
问:某路由器收到一个IP数据报,前几位用16进制表示为45000028000100000201…,这个IP数据报还能跳多少跳?封装的是什么数据?、
答:该数据报中TTL的值为02,意味着还能再跳一跳,下一跳时TTL值变为01,将不能再跳了。协议字段的值为01,查表可知对应ICMP,下表中的所有协议字段对应关系应背诵 -
问:链路层是否有类似TTL的机制?链路层中与“协议”字段具有类似作用的字段有哪些?
答:链路层无类似TTL的机制,但他们使用生成树协议来解决类似问题。链路层中的类型字段你与“协议”字段相类似。
4.1.3 帧与MTU
问:路由器收到的帧格式和长度,是否与发出的帧格式和长度相同?
答:否,因为可能路由器的接口连接两种不同的网络,所以帧的格式可能不同。因为接口的MTU可能不同,导致长度不同。其中收到接口MTU大,发出接口MTU小,导致长度不同;收到接口MTU小,发出接口MTU大,长度不变。
其中MTU为576时,为IPv6网络最小MTU,分片长度小于它时将不会再被分片。
4.1.4 分片与重组
- 问:IP数据报总长度最大为多少字节?
最大为2^16-1字节,也即64KB - 问:何时何处进行分片和重组?
分片的工作由源主机和中间路由器进行;重组的工作只由目的主机进行 - 问:每个路由器都必须计算检验和吗?
中间路由器收到数据报时,也要先检验其完整性,以决定是否可以转发;如可以,则要重新计算检验和,并将其值置于首部检验和字段中然后转发。前者的工作由路由器的接收方完成,后者的工作由发送方完成 - 问:R1发出的和R2发出的IP数据报有何不同?
R1和R2在网络中的位置不一样,导致了TTL的不同,因为接口的MTU不一样,所以检验和也不同
4.2 IP首部选项
选项的功能:用于网络测试和调试。包括:
- 记录数据报经过的路径、时间
- 由源端指定必须经过的路径
4.2.1 选项的格式
其中的类别一项仅作了解,重点学习复制和编号两项。由上图可知,选项也是TLV格式的。值一项,跟选项内容有关,长度不一定。
4.2.2 无操作选项
无操作选项NO-OP:1字节,用作选项和选项之间填充符。
类型=1(0 00 00001)(仅在第一个分片中复制,数据报控制,无操作)
一般用于补充选项长度,用来对其下一个选项
4.2.3 选项结束选项
选项结束选项END-OP:1字节,用作选项字段结束时的填充。只能用作最后一个选项,只能使用一次。
类型=0(0 00 00000)
问:IP首部前面有20字节,再加一个EOOL和NOP共多少字节?(这里为课本上的名称)
答:22字节
4.2.4 记录路由选项
功能:记录IP数据报从源主机到目的主机所经过的各路由器出接口的IP地址。
工作原理:
- 源主机生成一个可存放多个IP地址的空表,并规定选项长度
- 各路由器把主机的出接口IP地址依次填在表中
格式:
- 类型=7(0 00 00111)
- copy=0(只要求第一个IP分片复制该选项内容)
- 类别=0(00),编号=7(00111)
- 长度:该选项的总长度,最多存放40字节(因为首部最大长度为(2^4-1)*4=60,前面的内容已经占了20字节)
- 指针:指向下一个可存放IP地址的位置
- IP地址表:存放IP数据报所经过的路由器IP地址,最多只能放9个路由器地址
记录路由的过程:
- IP数据报离开源主机时,指针=4,IP地址表为空
- 当指针值<长度值时,中间路由器将IP数据报离开路由器的接口的IP地址记录在IP首部选项中,指针值+4
- 当指针值>长度值时,路由器不记录IP地址,直接转发数据报。
4.2.5 时间戳选项
功能:记录IP数据报经过每个中间路由器的时间戳
工作原理:IP数据报经过路由器时,路由器记录一个时间戳(标准时间)
类型=68(0 10 00100)
长度:该选项的总长度,最多为40字节。因此最多只有4个路由器能记录IP地址和时间戳。
指针:指向下一个可存放IP地址和时间戳的位置
溢出:由于无空间而未能记下时间戳的路由器的个数
标志:
- =0,只记录时间戳
- =1,记录IP地址和时间戳
- =3,由源主机填入IP地址,IP地址匹配的路由器填写时间戳
4.2.6 源路由选项
功能:由源端指定一系列路由器的IP地址,以限定IP数据报的传输路径
用途:通常用于测试某特定路径,或绕开某危险网络等
源路由支持两种形式:
- 严格源路由:指定完备路径
- 宽松源路由:指定路径要点
当严格源路由记录:A-C-F,则IP数据报的传输路径必须是:A-C-F
当宽松源路由记录:A-C-F,则IP传输的传输路径可以是:A-B-C-E-F
类型:(1 00 10001),(1 00 00011) - 137(严格源路由),131(宽松源路由)
- COPY=1,每个分片均复制源路由选项
长度:该选项的总长度,最多为40字节
指针:指向当前比较的IP地址
IP地址表:由源主机生成,指定IP数据报经过的路径
4.2.7 源路由选项处理过程
- ping -k IP1 IP3 IP5 D
- 源主机指明IP数据报的目的地址和经过的路由清单(中间路由器的入口IP地址)
- 源主机的IP模块接收源路由清单后,
- 将IP包目的IP地址放在路由清单的最后一项
- 用清单中的第一个IP地址替换IP包的目的地址
- 指针指向清单中的第二个IP地址
- 发送该IP报
- 每个中间路由器检查收到数据报的目的IP地址:
- 如果不是自己接收该数据报的入口IP,则:
- 不改变IP数据报的首部内容,正常转发数据报(宽松源路由)
- 丢弃该数据报(严格源路由)
- 如果等于自己接收该数据报的入口IP,且指针值小于长度值,则:
- 用当前IP地址替换IP目的地址
- 用出口IP地址替换当前IP地址
- 指针值加4
- 如果不是自己接收该数据报的入口IP,则:
4.2.8 与IP选项相关的命令
- ping -r n IP地址 //记录路由选项
n指记录路由器的个数,取值范围:1-9 - ping -s n IP地址 //时间戳选项
n指记录时间戳的个数,取值范围:1-4 - ping -j IP地址列表 //宽松源路由
最多9个IP地址 - ping -k IP地址列表 //严格源路由
最多9个IP地址