路由表和FIB表路由器转发数据包的关键是路由表和FIB表,每个路由器都至少保存着一张路由表和一张FIB(Forwarding Information Base)表。路由器通过路由表选择路由,通过FIB表指导报文进行转发。
路由表每台路由器中都保存着一张本地核心路由表(即设备的IP路由表),同时各个路由协议也维护着自己的路由表。
路由表中的内容在路由器中,执行命令display ip routing-table时,可以查看路由器的路由表概要信息,如下所示:
<Huawei> display ip routing-tableProto: Protocol Pre: PreferenceRoute Flags: R - relay, D - download to fib, T - to vpn-instance------------------------------------------------------------------------------Routing Table: _public_ Destinations : 14 Routes : 14 Destination/Mask Proto Pre Cost Flags NextHop Interface 0.0.0.0/0 Static 60 0 RD 10.137.216.1 Vlanif20 10.10.10.0/24 Direct 0 0 D 10.10.10.10 Vlanif20 10.10.10.10/32 Direct 0 0 D 127.0.0.1 InLoopBack0 10.10.10.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 10.10.11.0/24 Direct 0 0 D 10.10.11.1 LoopBack0 10.10.11.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 10.10.11.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 10.137.216.0/23 Direct 0 0 D 10.137.217.208 Vlanif20 10.137.217.208/32 Direct 0 0 D 127.0.0.1 InLoopBack0 10.137.217.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 路由表中包含了下列关键项:
Destination:表示此路由的目的地址。用来标识IP包的目的地址或目的网络。
Mask:表示此目的地址的子网掩码长度。与目的地址一起来标识目的主机或路由器所在的网段的地址。
将目的地址和子网掩码“逻辑与”后可得到目的主机或路由器所在网段的地址。例如:目的地址为10.1.1.1,掩码为255.255.255.0的主机或路由器所在网段的地址为10.1.1.0。
掩码由若干个连续“1”构成,既可以用点分十进制表示,也可以用掩码中连续“1”的个数来表示。例如掩码255.255.255.0长度为24,即可以表示为24。
Proto:表示学习此路由的路由协议。
Pre:表示此路由的路由协议优先级。针对同一目的地,可能存在不同下一跳、出接口等多条路由,这些不同的路由可能是由不同的路由协议发现的,也可以是手工配置的静态路由。优先级高(数值小)者将成为当前的最优路由。各协议路由优先级请参见路由协议的优先级。
Cost:路由开销。当到达同一目的地的多条路由具有相同的路由优先级时,路由开销最小的将成为当前的最优路由。
说明:Preference用于不同路由协议间路由优先级的比较,Cost用于同一种路由协议内部不同路由的优先级的比较。
NextHop:表示此路由的下一跳地址。指明数据转发的下一个设备。
Interface:表示此路由的出接口。指明数据将从本地路由器哪个接口转发出去。
在图1-1所示的网络中,路由器A与三个网络相连,因此有三个IP地址和三个出接口,其路由表如图所示。
图1-1 路由表示意图
路由超限自动恢复本地核心路由表里保存着各路由协议的路由,如果本地核心路由表里的路由数量达到系统上限,协议路由表将无法向本地核心路由表添加路由。本地核心路由表有以下几种路由限制:- 整机路由限制:指定所有路由条数的上限值。
- 整机路由前缀限制:指定所有路由的地址前缀范围。
- 组播IGP路由限制:指定组播IGP路由条数的上限值。
- 多拓扑路由限制:指定多拓扑路由条数的上限值。
- 所有私网路由限制:指定所有私网路由条数的上限值。
- VPN路由限制:指定VPN路由条数的上限值。
- VPN路由前缀限制:指定VPN路由的地址前缀范围。
如果协议由于某种路由限制而向本地核心路由表添加路由失败,系统会记录本次添加路由的协议和对应的路由表Table ID。
当协议删除本地核心路由表里的路由释放了路由表的空间之后,路由超限解除,系统会通知所有向本地核心路由表添加路由失败的协议,重新向本地核心路由表添加路由,使得本地核心路由表中的路由能够得到最大程度的恢复。是否可以完全恢复,取决于释放的路由表空间的大小。
FIB表的匹配在路由表选择出路由后,路由表会将激活路由下发到FIB表中。当报文到达路由器时,会通过查找FIB表进行转发。
FIB表中每条转发项都指明到达某网段或某主机的报文应通过路由器的哪个物理接口或逻辑接口发送,然后就可到达该路径的下一个路由器,或者不再经过别的路由器而传送到直接相连的网络中的目的主机。
FIB表的匹配遵循最长匹配原则。查找FIB表时,报文的目的地址和FIB中各表项的掩码进行按位“逻辑与”,得到的地址符合FIB表项中的网络地址则匹配。最终选择一个最长匹配的FIB表项转发报文。
例如,一台路由器上的路由表如下:
Routing Tablesestination/Mask Proto Pre Cost Flags NextHop Interface 0.0.0.0/0 Static 60 0 D 192.168.0.2 GigabitEthernet1/0/0 10.8.0.0/16 Static 60 3 D 192.168.0.2 GigabitEthernet1/0/0 10.9.0.0/16 Static 60 50 D 172.16.0.2 GigabitEthernet3/0/0 10.9.1.0/24 Static 60 4 D 192.168.0.2 GigabitEthernet2/0/0 10.20.0.0/16 Direct 0 0 D 172.16.0.1 GigabitEthernet4/0/0一个目的地址是10.9.1.2的报文进入路由器,查找对应的FIB表。
FIB Table: Total number of Routes : 5Destination/Mask Nexthop Flag TimeStamp Interface TunnelID0.0.0.0/0 192.168.0.2 SU t[37] GigabitEthernet1/0/0 0x010.8.0.0/16 192.168.0.2 DU t[37] GigabitEthernet1/0/0 0x010.9.0.0/16 172.16.0.2 DU t[9992] GigabitEthernet3/0/0 0x010.9.1.0/24 192.168.0.2 DU t[9992] GigabitEthernet2/0/0 0x010.20.0.0/16 172.16.0.1 U t[9992] GigabitEthernet4/0/0 0x0首先,目的地址10.9.1.2与FIB表中各表项的掩码“0、16、24”作“逻辑与”运算,得到下面的网段地址:0.0.0.0/0、10.9.0.0/16、10.9.1.0/24。这三个结果可以匹配到FIB表中对应的三个表项。最终,路由器会选择最长匹配10.9.1.0/24表项,从接口GE2/0/0转发这条目的地址是10.9.1.2的报文。