选路是IP最重要的功能之一。需要进行选路的数据报可以由本地主机产生,也可以由其他主机产生。在后一种情况下,主机必须配置成一个路由器,否则通过网络接口接收到的数据报,如果目的地址不是本机就会被丢弃。
netstat -rn是用于查看路由表的命令,输出如图所示:
- 第一列Destination表示目的IP地址,比如如果目的地址是140.252.13.65,那么会通过140.252.13.35将数据报转发给目的主机。
- 第二列Gateway表示数据报的转发路由器地址
- 第三列Flags代表路由器的一些标志
- U:代表该路由可以使用(Usage)
- G:代表该路由器是一个网关(Gateway),该标志区分了间接路由和直接路由
- H:该路由是一个主机,即目的地址是一个完事的主机地址。如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址(Host)
- D:该路由是由重定向报文创建的(Direct)
- M:该路由已被重定向报文修改(Modify)
- 第四列Refcnt参考计数,列出了正在使用该路由的活动进程数
- 第五列use,显示了通过该路由发送的分组计数
- 第六列interface,表示了该路由使用的网络接口名称
route 是操作路由表的一个命令
route add default sun 1,增加一个路由表项,第3个参数代表的是目的端,第4个参数代表网关,最后一个参数代表路由的度量,大于0时要为该路由设置G标志,当为0时不设置。
如果路由表中没有默认项,也未找到匹配项,如果数据报是由本地主机产生的,那么就给发送该数据报的程序返回一个差错,或者是”主机不可达”,或者是”网络不可达”。如果数据报是被转发的,那么就给原始发送端发送一份ICMP主机不可达的差错报文。
当IP数据报应该被发送到另一路由器时,收到数据报的路由器就要发送ICMP重定向差错报文给IP数据报的发送端。重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表
ICMP重定向报文的接收者必须查看三个IP地址:
- 导致重定向的IP地址,即重定向报文的数据,位于IP数据报的首部
- 发送重定向报文的路由器IP地址,包含重定向信息的IP数据报中的源地址
- 应该采用的路由器IP地址在ICMP报文中4~7个字节
重定向报文只能由路由器生成,而不能由主机生成,另外,重定向报文是为主机而不是为路由器使用的。
主机在引导以后要广播或多播传送一份路由器请求报文,路由器需要响应一份通告报文,此外,路由器定期广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应的更新路由表。通告报文的格式如下图所示:
主机在引导期间一般发送三份路由器请求报文,每隔3秒发送一次,一旦接收到一个有效的通告报文,就停止发送请求报文。