TCP/IP详解卷1:协议(六)【Traceroute程序,IP选路】

traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。traceroute程序还可以让我们使用IP源路由选项。

8.2 Traceroute程序的操作

为什么不使用IP记录路由选项(RR)而另外开发一个新的traceroute?

  1. 原先并不是所有的路由器都支持记录路由选项
  2. 记录路由一般是单向的选项
  3. IP首部中留给选项的空间有限,不能存放当前大多数的路径

traceroute程序使用ICMP报文和IP首部中的TTL字段。TTL字段是由发送端初始设置一个8bit字段。推荐的初始值由分配数字RFC指定,当前值为64。

每个处理数据报的路由器都需要把TTL的值减1 或减去数据报在路由器中停留的秒数。由于大多数的路由器转发数据报的时延都小于1秒钟,因此TTL最终成为一个跳站的计数器,所经过的每个路由器都将其值减1。

TTL字段的目的是防止数据报在选路时无休止地在网络中流动。当路由器收到一个IP数据报,TTL是0或1,丢弃该数据报,并给信源发送一份ICMP超时信息。Traceroute的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的IP地址。

所以Traceroute的操作过程是:先发送一份TTL字段为1的IP数据报给目的主机,得到第一个路由器的地址;然后发送一个TTL字段为2的IP数据报,以此类推,直到达到目的主机。

8.5 IP源站选路选项

源站选路(source routing) 的思想是由发送者指定路由。它可以采用以下两种形式:

  1. 严格的源路由选择。发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个“源站路由失败”的ICMP差错报文。
  2. 宽松的源站选路。发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。

这里写图片描述

源站路由选项的实际称呼为“源站及记录路由”(对于宽松的源站选路和严格的源站选路,分别用 LSRR和SSRR 表示),这是因为在数据报沿路由发送过程中,对 IP地址清单进行了更新。下面是其运行过程:

  1. 发送主机从应用程序接收源站路由清单,将第1表项去掉(它是数据报的最终目的地址),将剩余的项移到1个项中,并将原来的目的地址作为清单的最后一项。指针仍然指向清单的第 1项(即,指针的值为4)。
  2. 每个处理数据报的路由器检查其是否为数据报的最终地址。如果不是,则正常转发数据报(在这种情况下,必须指明宽松源站选路,否则就不能接收到该数据报)。
  3. 如果该路由器是最终目的,且指针不大于路径的长度,那么 ( 1)由ptr 所指定的清单中的下一个地址就是数据报的最终目的地址; (2)由外出接口(outgoing interface) 相对应的 I P地址取代刚才使用的源地址; (3)指针加4 。

这里写图片描述

9.2 选路的原理

IP搜索路由表的几个步骤:

1) 搜索匹配的主机地址;

2) 搜索匹配的网络地址;

3) 搜索默认表项

IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。这区别于选路策略,它只是一组决定把哪些路由放入路由表的规则。IP执行选路机制,而路由守护程序则一般提供选路策略。

每当初始化一个接口时(通常用ifconfig设置接口地址),就为接口自动创建一个直接路由。到达不直接相连的主机或网络必须以某种方式添加到路由表中,一个常用方式是:

  1. 在系统引导时显式地在初始化文件中运行route命令
  2. 运行路由守护程序。或者用较新的路由器发现协议

如果路由表中没有默认项,又没有找到匹配项,结果取决于该IP数据报是由主机产生还是被转发的。如果是本机产生的,那么久给发送该数据报的应用程序返回一个差错,或者是“主机不可达差错”或者“网络不可达差错”。如果是被转发的数据报,那么就给原始发送端发送一份ICMP主机不可达的差错报文。

9.3 ICMP主机与网络不可达差错

当路由器收到一份IP数据报但又不能转发时,就要发送一份ICMP“主机不可达”差错报文。

9.4 转发或不转发

一般都假定主机不转发IP数据报,除非对它们进行特殊配置而作为路由器使用。

大多数伯克利派生出来的系统都有一个内核变量ipforwarding,或其他类似的名字。一些系统(如BSD/386和SVR4)只有在该变量值不为0的情况下才转发数据报。

9.5 ICMP重定向差错

当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送ICMP重定向差错报文给IP数据报的发送端。

重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。主机启动时路由表中可以只有一个默认表项。一旦默认路由发生差错,默认路由器将通知它进行重定向,并允许主机对路由表作相应的改动。

这里写图片描述

重定向报文有许多规则:

  1. 重定向报文只能由路由器生成,不能由主机生成
  2. 重定向报文是为主机而不是路由器使用的
  3. 路由器发应该发送的是对主机的重定向,而不是对网络的重定向。因为子网的存在使得难于准确指明何时应发送对网络的重定向。

9.6 ICMP路由器发现报文

在本章前面已提到过一种初始化路由表的方法,即在配置文件中指定静态路由(Route命令)。这种方法经常用来设置默认路由。另一种新的方法是利用ICMP路由器通告和请求报文。

主机在引导后会广播/多播一份路由器请求报文。另外,路由器会定期广播/多播传送他们的路由器通告报文,允许每个正在监听的主机更新它们的路由表。

这里写图片描述

这里写图片描述

## 路由器操作

当路由器启动时,它定期(一般不是定义,随机传送的,减少冲突)在所有广播或多播传送接口上发送通告报文。路由器还要监听来自主机的请求报文,并发送路由器通告报文以响应这些请求报文。

主机操作

主机在引导期间一般发送三份路由器请求报文,每三秒钟发送一次。一旦接收到一个有效的通告报文,就停止发送请求报文。

主机也监听来自相邻路由器的请求报文。这些通告报文可以改变主机的默认路由器。另外,如果没有接收到来自当前默认路由器的通告报文,那么默认路由器会超时。

路由器发现报文一般由用户进程(守护程序)创建和处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值