由IP完成的路由选择是一种选路机制,它通过搜索路由表来确定从哪个接口把分组发送出去,它与选路策略不一样,选路策略
是一组规则的集合,这些规则用来确定哪些路由可以编入到路由表中,Net/3内核实现选路机制,而选路守护进程,典型地如
routed或gated,实现选路策略。
1.路由表结构
下图是某主机上的路由表。
对于Flags列需要简单说明下。
G 该路由通向一个网关(路由器),这种路由被称为间接路由。如果没有设置本标志,则表明路由的目的地与本机直接相连,
称为直接路由。
H 该路由通往一台主机,也就是说,目的地址是一个完整的主机地址。如果没有设置本标志,则路由通往一个网络,目的地址
是一个网络地址:一个网络号,或一个网络号与子网号的组合。
S 该路由是静态的。
C 该路由可被克隆以产生新的路由。在本路由表中有两条路由设置了这个标志:一条是到本地以太网140.252.13.32的路由,
ARP通过克隆该路由创建到以太网中其他特定主机的路由;另一条是到多播组224的路由,克隆该路由可以创建到特定多播
组(如224.0.0.1)的路由。
L 该路由含有链路层地址。本标志应用于单播地址和多播地址。由ARP从以太网路由克隆而得到的所有主机路由都设置了本标志。
R 环回驱动器(为设有本标志的路由而设计的普通接口)将拒绝所有使用该路由的数据报。
Net/3路由表采用Patricia树结构来表示主机地址和网络地址。待查找的地址和树中的地址都看成比特序列。这样就可以用相同
的函数来查找和维护不同类型的数。
查找路由表的目的就是为了找到一个最能匹配给定目标的特定地址。我们称这个给定的目标位查找键(search key)。所谓
最能匹配的地址,也就是说,一个能够匹配的主机地址要优于一个能够匹配的网络地址;而一个能够匹配的网络地址要优于
默认地址。
每条路由表项都有一个对应的网络掩码,尽管在主机路由中没有存储掩码,但它隐含了一个全1比特的掩码。我们对查找键和
路由表项的掩码进行逻辑与运算,如果得到的值与该路由表项的目的地址相同,则称该路由表项是匹配的。对于某个给定的
查找键,我们会从路由表中找到多条这样的匹配路由。
下图给出了上面路由表的内部结构。
标有end的两个阴影框是该书结构中带有特殊标志的叶节点,该标志代表树的端点。左边的那个拥有一个全0键,而右边的
拥有一个全1键,左边的两个标有end和default的框叠在一起,这两个框有特殊的意义,它们与重复键有关。
方角框被称为内部结点或简称为结点,圆角框被称为叶子。每一个内部结点对应于测试查找键的一个比特位,其左右各有
一个分支。每一个叶子对应于一个主机地址或者对应于一个网络地址。如果在叶子下面有一个十六进制数,那么这个叶子
就对应于一个网络地址,该十六进程数就是叶子的网络掩码。如果在叶子下面没有十六进制的掩码,那么这个叶子就是一个
主机地址,其隐含的掩码是0xffffffff。
有一些内部节点也含有网络掩码,这些掩码在回溯过程中使用。
比特比较式运用在插口地址结构上的,因此,在上图给出的比特位置是从插口地址结构中的起始位置开始算的。下图给出了
sockaddr_in结构中的比特位置。
下图为路由表中各个IP地址的比特表示形式。