路由表的基础概念
RIB和FIB
具有路由功能的网络设备,如路由器、三层交换机,都需要维护两种表:FIB(Forwarding Information Base,转发信息库)和RIB(Routing Information Base,路由信息库)
RIB
路由信息库,也叫路由表(在后文都将叫做路由表)。每个路由器既有本地核心路由表,又有协议路由表。
路由表 | 描述 |
---|---|
本地核心路由表(又称IP路由表) | 本地核心路由表中的路由条目由各个协议路由表中筛选而来,也就是说最优路由才会进入到这里,位于控制层面,只提供信息,不提供转发 |
协议路由表 | 存放着某一种协议发现的是所有路由信息 ,不都是最优路由 |
输入命令
display ip routing-table #就可以让华为路由器显示本地核心路由表。
本地核心路由器举例:
Destination/Mask | Proto | Pre | Cost | Flags | NextHop | Interface(出站接口) |
---|---|---|---|---|---|---|
127.0.0.0/8 | Direct | 0 | 0 | D | 127.0.0.1 | InLoopBack0 |
标识IP数据包要转发的目的网段 | 标识路由协议 | 标识该路由协议的优先级(比较相同目的地址,不同协议,不同路径) | 比较相同目的地址、相同协议,不同路径 | 路由标记—R:relay,中继。该条只指定了下一跳IP address,没有指定出接口,属于迭代路由 D:download to fib 的意思。表示该条目成功下发到FIB表中 | 表明下一跳ip地址,指明数据转发路径中的下一个三层设备 | 本地设备发出的出接口 |
协议路由表判定优质路径的标准—路由度量值
对于同一路由协议,去往某个目的网络的路径不止一条,此时就要比较选出最优路径,每种路由协议都有不同的路由度量依据,或是跳数,带宽、延迟。
只有用同样的路由协议得到的不同路由之间才有比较路由度量值的意义。不同的协议得出的路由需要比较的是路由协议优先级。
什么是路由迭代?
路由必须有直连的下一跳才能指导转发,从R1发往192.168.21.0/24网段的数据包,由于R1没有直连的路径。因此,该路由条目的Flags位为RD,那么如何才能将数据包转发到它该去的接口呢?这个计算直至某个直连的下一跳,再进行转发的过程就是路由迭代。
路由器时如何判断路由协议优先级的?
为了判断最优路由,每个协议都被赋予了一个优先级。最优路由将放在前面所说的IP路由表中。协议优先级又分为外部优先级和内部优先级
路由协议优先级 | 描述 |
---|---|
外部优先级 | 选择路由时首先比较外部优先级,除了直连路由,其他协议的优先级由用户手动决定 |
内部优先级 | 当两个路由协议具有相同的外部优先级时,会在内部优先级中进行比较,内部优先级不能被修改 |
以下是常见的路由协议对应的外部与内部的默认优先级
路由协议 | 缺省外部优先级 | 缺省内优先级 |
---|---|---|
DIRECT | 0 | 同外 |
OSPF | 10 | 同外 |
IS-IS | 15 | Level-1/2:15/18 |
STATIC | 60 | 同外 |
UNR(User Network Route,用户网络路由) | 60–66 | 65 |
RIP | 100 | 同外 |
OSPF ASE | 150 | 同外 |
OSPF NSSA | 150 | 同外 |
IBGP | 255 | 200 |
EBGP | 255 | 20 |
什么是报文五元组?
FIB
路由表中的所有条目应该都够在FIB(Forwarding Information Base)中找到对应。本地核心路由表是用于管理和选择路由路径的主要数据结构之一,在路由器或交换机上使用。而FIB是实际进行数据包转发决策的关键数据结构。
需要注意的是,本地核心路由表和FIB表的内容可能会随着网络拓扑变化、路由协议更新等原因而动态改变,因此保持这两个表的同步是非常重要的。
FIB表信息查看命令:
display fib [slot-id] #slot-fib 指定槽位
例如下图
FIB表中的字段说明:
-
Total number of Routes: 路由表总数。
-
Destination/Mask:目的地址/掩码长度0
-
Nexthop:下一跳。
-
Flag:当前标志,G、H、U、S、D、B的组合
-
- G(Gateway):网关路由,表示下一跳是网关
-
- H( Host):主机路由,表示该路由为主机路由
-
- U(Up): 可用路由,表示该路由状态是Up。
-
- S( Static):静态路由。
-
- D(Dynamic):动态路由。
-
- B( Black Hole):黑洞路由,表示下一跳是空接口。
-
TimeStamp:时间戳,表示该表项存在的时间,单位是秒。
-
Interface: 到目的地址的出接口。
-
TunnelID: 表示转发表项索引。该值不为0时,表示匹配该项的报文通过隧道转发( 如: MPLS隧道转发)。该值为0时,表示报文不通过隧道转发。
FIB表的最长掩码匹配原则
因为在ipv4封装中,ipv4报头只封装了源 ip 地址和目的 ip 地址 ,而没有子网掩码,因此将报文的目的地址与FIB表中各表项的掩码进行逻辑与 。一条IP命中了一个路由条目后并不是立即退出就按照这个条目指定的转发方式进行转发了,而是继续查找,如果在后面发现了更优的路由项,则覆盖原来的结果。直到全部路由表遍历一遍再转发。IP认为后面可能有更好的查找结果。如何判别更优呢,就是按照最长匹配原则。
例:一个路由器的FIB有3条路由条目,一个是172.16.1.0/24,出接口为S0,一个是172.16.2.0/24 ,出接口为S1;一个是172.16.0.0/16,出接口为S2。
那么当路由器收到去往172.16.2.1的包时,它怎么做决策呢?
答:很简单,把3条路由条目,一个是172.16.1.0/24,172.16.2.0/24 ,172.16.0.0/16都写成二进制,对应上路由条目各自的掩码(前缀长度),掩码为1的位是需要严格匹配的,掩码为0的位则无所谓(图中标识x的位)。
然后把数据包的目的IP地址:172.16.2.1也写成二进制,接下去就是从左往后的逐位匹配。剔除不匹配的路由条目1,剩下路由条目2和3,由于目的地址172.16.2.1和路由条目172.16.2.0/24的匹配长度最长,因此路由条目2胜出,最终数据包被从接口S1转发出去。这就是最长匹配原则。
路由负载分担和路由备份
通往某一个网段往往具有多条路由。而这些路由又有两种情况。
-
开销值相同,满足负载分担条件的路由
当实现负载分担时,路由器根据报文中的五元组【源ip地址、目的ip地址、源端口、目的端口、协议】进行报文转发,当五元组相同时,路由器总是会选择与上一次相同的下一跳ip地址进行转发。
比如在这个例子中,从PC1向Server1的路径有一上一下两条,由于没有设置优先级,因此它们具有相同的优先级。
而当PC1在ping Server1(200.0.0.2)一次后,每次tracert Server1 都会显示数据包走的路径都是之前走的上面的一条。
而当数据包的五元组不相同时,路由器会选择相对空闲的路径进行转发该数据包。这样就实现了负载分担。 -
优先级相对低,适合做路由备份的情况
路由器平常采用主路由转发数据,当主路由发生故障时,主路由变为非激活状态,路由器选择备份路由中优先级最高的路由转发数据,这样就实现了主路由—>备份路由的切换。
而当主链路恢复正常时,又会重新选择主路由来发送数据。
实现路由备份的多条路由可以是相同,也可以是不同的路由协议发现的,但必须是到达相同目的网段。
这些路由间至少存在路由协议或同一路由协议的路由度量上的差异才能实现路由备份。
关于FIB表的最长掩码匹配原则的一些内容,可以参考以下两篇文章
链接:文章1
链接:路由选择的最长匹配原则