推荐链接:网络地址与主机地址
9.1 引言
路由选择程序(daemon),通常这是一个用户进程。在大多数的Unix系统中,大多数的路由选择程序都是路由程序和网关程序。
路由表经常被IP访问,但是它被路由守护程序更新的频率却低很多,当接收到ICMP重定向报文时,路由表也要被更新。
9.2 选路的原理
在第三章中,介绍了IP搜索路由表的步骤:
- (1)搜索完全匹配的主机地址与网络地址。
- (2) (1)失败,搜索匹配的网络地址。
- (3) (1)(2)失败,搜索default默认表项。(一般被指定为一个网络表项,网络号为0)
在Terminal下执行
netstat -rn
命令,列出路由表打印出主机名。
Flag(标志):
- U 该路由可以使用
- G 该路由是到一个网关(路由器),如果没有设置该标志,说明目的地是直接相连的。
- H 该路由是到一个主机,也就是说目的地址是一个完整的主机地址。如果没有设置该标志,说明该路由是到一个网络,则目的地址是一个网络地址:一个网络号,或者网络号与子网号的结合。
- D 该路由是由重定向报文创建的。
- M 该路由是由重定向报文修改的。
标志G:是非常重要的一个标志,区分了直接路由(没有标志G)与间接路由(有标志G)。
- 发往直接路由(不含G)的packet(分组)中不但具有指明目的端的IP地址,还具有链路层的地址。
- 发往间接路由(含G)的packet(分组),IP地址指明目的端,但是链路层地址指明的是下一跳的路由器(网关)。
也就是说,含G与不含G的区别在于,是发往直接路由还是间接路由,以及分组中链路层的地址。
标志H:含有H表明目的地址是一个完整的主机地址,没有设置H表明目的地址是一个网络地址(主机号部分为0)。
- 当为 某一个 目的IP地址 搜索路由表 的时候,主机地址 必须与 目的地址 完全匹配。
- 网络地址 只需要匹配 目的地址的网络号与子网号 就可以了。
拾遗
参考计数 Refcnt 给出的是正在使用路由的活动进程个数。
Use 显示的是通过该路由发送的分组数。
主机路由表的复杂性 取决于主机所在网络的拓扑结构。
- (1)主机没有与任何网络相连接,路由表只有环回接口项。
- (2)主机连在一个局域网上,只能访问局域网上的主机。这时候路由表包含两项:一项是环回接口,另一项是局域网(如以太网)。
- (3)主机能够通过单个路由器访问其他网络时,一般情况下增加一个默认表项指向该路由器。
没有到达目的地的路由
如果路由表中没有找到匹配项,同时没有默认项,发生的情况:
- (1)IP数据报是由主机产生的:给发送数据报的application 返回一个 “主机不可达差错” 或者是 “网络不可达差错” 的错误。
- (2)IP数据报是被转发的:给原始发送端返回一份ICMP主机不可达的差错报文。
9.3 ICMP主机与网络不可达差错
当路由器收到一份IP数据报但又不能转发的时候,就要发送一份ICMP“主机不可达”的差错报文。
在教材中的例子中,把连接到路由器sun上的拨号SLIP链路断开,然后试图通过该SLIP链路发生分组给任一指定sun为默认路由的主机,就会出现这种错误。
当接通SLIP链路启动时需要在路由表中增加一项使用SLIP链路的表项,断开时则删除表项。那么当SLIP链路断开的时候,主机sun中的路由表就不存在默认表项了。
顶层选路域:维护大多数Internet网站的路由信息。
9.5 ICMP重定向错误
当主机可以选择路由器发送分组的情况下,才可能看到ICMP重定向报文。重定向 一般用来 让具有很少选路信息的主机 逐渐建立起 更加完善的路由表。
主机启动时 路由默认项 可以只有一项,一旦默认表项出现错误,默认路由器将通知它进行重定向,并允许主机对路由表进行相应的改动。
ICMP重定向 允许 TCP/IP主机 在选路时 不需要具备 智能特性,而把智能特性放在路由器端。
教材P91 介绍了ICMP重定向报文的格式,必须具有以下三个IP地址:
- (1)导致重定向的地址(目的IP地址)
- (2)发送重定向报文的路由器的IP地址
- (3)应该采用的路由器IP地址
注意:重定向报文 只能由路由器生成,不能由主机生成。只能被主机使用,不能被路由器使用。
那么,路由表项可以被 (1)ICMP重定向报文 (2)路由守护程序 所更新及修改。
9.6 ICMP路由器发现报文
一般认为,在主机引导的时候,一般要广播或多播一个 路由请求的ICMP报文。一台或者多台的路由器响应一份 路由通告报文。
路由器在一份通告报文中可以通告多个IP地址。内含一对或多对IP地址和优先级,IP地址必须是发送路由器的某个地址,优先级是一个 有符号的32 bit整数,指明IP地址作为默认路由器地址的优先等级。
路由器操作
当路由器启动的时候,随机在所有广播或多播传送接口上发布通告报文。通告的间隔一般为450s-600s,一份默认的通告生命周期为30分钟。
当路由器的某个接口被关闭的时候,路由器在该接口上发送最后一份通告报文,并把生命周期设置为0。
路由器也监听来自主机的请求报文,并发送路由器通告报文来响应这些请求报文。
主机操作
根据路由通告报文,每一台监听相邻路由器报文的主机都能够建立自己的路由表实现网络通信。
在主机引导的时候,主机一般发送三份路由器请求报文,每三秒发送一次,一旦收到一个有效的通告报文,就停止发送请求报文。
2016/7/28