6.4.2 互联网路由探测与发现基本原理
一、路由探测与发现背后的协议工作过程
我们主要使用三种方法来实现路由探测与发现
-
基于IP的记录路由选项功能(RR)和ICMP功能的路由探测,典型的例子就是带有参数“r”的ping命令,即ping -r
这种探测方法类似于邮政系统的邮件投递过程,一封信每经过一个邮政分拣点,都会被盖上相应的邮戳,收信人可以根据信封上的邮戳知道中间经过了哪些邮局。为了跟踪互联网中数据分组的传输路径,我们可以利用IP分组首部中的记录路由的可选字段(5.2.3 IP数据报(一)IP数据报的格式)来盖戳。我们知道IP分组的首部中除了20个字节的固定部分之外,还包括长度可变的选项字段,其中记录路由选项可以实现路由探测。
选项类型字段取值为7,选项内容记录了数据分组所经过路由器的地址列表。当然为了使源主机收集到传输路径的信息,我们还需要配合ICMP协议来实现。具体过程是
- 源主机产生并发送一个ICMP回送请求报文(ICMP Echo Request)并封装到IP分组中,分组头部的选项部分除了填写记录路由选项的类型(type)和长度(Length)字段以外,选项内容是空的。
- 当分组到达路由器时,路由器在转发之前,会主动的将自己的IP地址填写在记录路由选项中,如此以来对于分组传输路径上每一跳路由器都相继的填入了自己的IP地址。当分组到达目的主机时IP分组头部会收集到部分或者全部的路由信息。
- 最后目的主机向源主机返回ICMP回送应答报文(ICMP Echo Reply),将接收到的记录路由选项拷贝到返回的IP分组的首部,使用参数“r”的ping程序就是基于记录路由选项的方法。
-
基于IP的TTL字段和ICMP的路由探测,例子就是Windows下的tracert程序。
这种路由探测方法就不再利用IP分组的选项字段了,而是利用IP首部中的TTL字段联合ICMP协议来实现,具体方法如下:
-
源主机会发送多个ICMP回应请求报文(类型为8,代码为0),每个ICMP报文所在IP分组头部的TTL从1开始递增,也就是每次都递增1。来设置每个ICMP报文所在的IP分组首部中的TTL字段,也就是说第一个IP分组的TTL值为1,第二个分组的TTL值为2,以此类推。
-
IP协议规定路由器会将收到的IP分组头部的TTL字段减1,一旦变为0会立即丢弃分组并向源主机发送超时的ICMP差错报告报文(5.2.7 因特网控制报文协议ICMP)。
-
当探测报文到达目的主机时,如果目的主机存在,会返回ICMP应答报文(类型为0,代码为0)
-
当源主机接收到ICMP应答报文,追踪结束。
如图,假设数据分组从源主机触发需要经过R1、R2、R3三台路由器的转发,最终到达目的主机。在源主机上运行tracert程序,就会利用TTL和ICMP来探测传输的路径。
路由跟踪实质是不断探测的过程
- 首先源主机发送第一个探测分组,TTL值等于1,到达第一跳路由器时TTL值减1后变为0,路由器会发送超时报文。源主机收到后就会获得第一跳路由器的IP地址
- 接着源主机会发送第二个探测报文,此时的TT值设置为2,到达第一跳TTL值减1后TTL值变为1,到达第二跳路由器的时候TTL值再减1就变为了0,此时又会返回超时报文,此时源主机得到第二跳路由器的IP地址。
- 同样的方法源主机可以获得第三跳路由器的IP地址。
- 当第四次探测报文到达目的主机时,目的主机会返回ICMP回送应答报文,对于源主机接收到应答报文后就会宣布路由跟踪结束。
-
-
基于TTL+UDP+ICMP的路由探测,Unix操作系统下的traceroute程序就是这种原理。
这种路由探测方法与第二种路由探测方法相类似,不同之处在于源主机发送的探测报文不再是ICMP回送请求报文,而是变成了在传输层里所用到的UDP用户数据报。为了接收到来自目的主机的回复,作为路由跟踪结束的标志,源主机会选择一个不常用的目的端口号,一般情况下数值比较大,中间路由器的探测也是利用TTL值减1操作,通过超时差错响应机制,使得源主机逐步的探测到路由器的地址,当UDP探测报文到达目的主机以后,由于它并不能找到与目的端口号对应的接收的应用进程,目的主机就会返回一个目的端口不可达的ICMP差错报告报文,源主机收到了差错报告报文以后也宣布路由跟踪结束。Unix操作系统下的traceroute采用的就是这种基于UDP和ICMP的一种探测的方法。