TCP/IP详解009IP选路

需要进行选路的数据报可以由本地主机产生,也可以由其他主机产生。
如果是后一种情况,需要把主机配置成一个路由器,否则通过网络接口接收到的数据报,如果目的地址不是本机就要被丢弃。
路由守护程序(daemon)
指的是运行在后台的进程,它代表整个系统执行某些操作。一般在系统引导时启动,在系统运行期间一直存在。
本章主要目的是了解单个IP层如何作出路由决策
IP层工作流程:

image.png

选路原理

路由表中包含的信息决定了IP层所做的所有决策
IP搜索路由表的几个步骤:
1、搜索匹配的主机地址
2、搜索匹配的网络地址
3、搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为0)
匹配主机地址步骤始终发生在匹配网络地址步骤之前。
IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组,这区别于选路策略,它只是一组决定把哪些路由放入路由表的规则,IP执行选路机制,而路由守护程序则一般提供选路策略。

简单的路由表
image.png

带-r选项是列出路由表,-n选项再次执行该命令,以数字格式打印出IP地址。(用-n是因为路由表中的一些表项是网络地址,而不是主机地址,如果没有-n选项,netstat命令将搜索文件/etc/networks并列出其中的网络名。这样会与另一种形式的名字——网络名加主机名相混淆。)
标志G是非常重要的,它区分了间接路由和直接路由(对于直接路由来说是不设置标志G的),其区别在于,发往直接路由的分组中不但具有指明目的端的IP地址,还具有其链路层地址,当分组被发往一个间接路由时,IP地址指明的是最终的目的地,但是链路层地址指明的是网关(即下一站路由器)。

标志G和标志H的区别
G标志区分了直接路由和间接路由
但H标志表明,目的地址(netstat命令输出第一行)是一个完整的主机地址,没有设置H标志说明目的地址是一个网络地址(主机号部分为0)。当为某个目的IP地址搜索路由表时,主机地址项必须与目的地址完全匹配,而网络地址项只需要匹配目的地址的网络号和子网号就可以了。

  • 参考记数Refcnt(Reference count)列给出的是正在使用路由的活动进程个数,面向连接的协议如TCP在建立连接时要固定路由。如果主机A和B之间建立Telnet连接,参考记数值变为1,建立另一个Telnet连接时,它的值将增加为2

  • 下一列(“use”)显示的是通过该路由发送的分组数。 如果我们是这个路由的唯一的用户,那么运行ping程序发送5个分组后,它的值将变为5.

  • interface 是本地接口的名字

输出的第二行是环回接口,它的名字始终是lo0,没有设置G标志,因为该路由不是一个网关,H标志说明目的地址(127.0.0.1)是一个主机地址。由于没有设置G标志,说明这是一个直接路由,网关列给出的是外出IP地址。

image.png
image.png

主机路由表的复杂性取决于主机所在网络的拓扑结构。
1、最简单的,主机没有和任何网络相连,路由表只包含环回接口
2、主机连在一个局域网上,只能访问局域网上的主机,这时路由表包含两项:一项是环回接口,另一项是局域网
3、主机能够通过单个路由器访问其他网络时,那么久要进行下一步,一般情况下增加一个默认表项指向该路由器


image.png
初始化路由表

每当初始化一个接口时(通常是用ifconfig命令设置接口地址),就为接口自动创建一个直接路由,对于点到点链路的环回接口来说,路由是到达主机(例如,设置H标志)。对于广播接口来说,如以太网,路由是到达网络。
到达主机或网络的路由如果不是直接相连的,那么就必须加入路由表。
一个常用的方法是在系统引导时显式地在初始化文件中运行route命令。比如在主机A上,运行下面两个命令来添加路由表中的表项:
route add default sun 1
route add slip bsdi 1
第三个参数(default 和slip)代表目的端,第四个参数代表网关(路由器),最后一个参数代表路由的度量(metric)。route命令在度量值大于时要为该路由设置G标志,否则,当耗费值为0时就不设置G标志了。
初始化路由表的其他方法是运行路由守护程序或用较新的路由器发现协议

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

ICMP主机与网络不可达差错

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


image.png

参考文献[Ford, Rekhter, and Braun 1993]定义了顶层选路域(top-level routing domain),由它来维护大多数Internet网站的路由信息,而不使用默认路由。他们指出,在Internet上存在5个这样的顶层选路域:NSFNET主干网、商业互联网交换(Commercial Internet Exchange:CIX)、NASA科学互联网(NASA Science Internet :NSI)、SprintLink以及欧洲IP主干网(EBONE)

image.png

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

image.png

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


image.png

有四种不同类型的重定向报文,有不同的代码值。
代码值:
0 网络重定向
1 主机重定向
2 服务类型和网络重定向
3 服务类型和主机重定向

还可以利用ICMP路由器通告和请求报文

你可能感兴趣的:(TCP/IP详解009IP选路)