注:本文为 “路由选择顺序 / 路由条目形成” 相关文章合辑。
路由选择顺序详解
fengxingzhe008 已于 2023-12-22 20:33:28 修改
在不考虑策略路由等其他情况下,对 IP 包进行路由时,通常按照如下顺序进行。
1、最长掩码匹配原则
2、管理距离 / AD / 路由协议优先级
3、路由花销 / Cost / Metric
-----------------------------------------------------
根据评论更新了一个例子:
明明是直连路由 (地址,端口和链路都正常情况) 但是却不通的情况。
直连路由在收到更优的最长掩码之后,接口地址将变得不通信。此时虽然直连路由协议优先级 0 最优,但是被最长掩码原则抢先。这样情况可能会导致直连不通信。
IS-IS 报文分析 + 原理详解 + 典型配置_fengxingzhe008 的博客 - CSDN 博客 的第 2.3. 章节(已引用到这里)提供了一种直连不可通信的一种场景。
-----------------------------------------------------
2.3. ISIS 不验证接口掩码的问题
影响 ISIS 邻居的因素(1.4. )
ISIS Hello (IIH) 报文主要用于建立和维护 ISIS 邻居,因此相应的根据 ISIS 报文 ** 相应字段 ** 便可判断影响 ISIS 邻居影响的因素。
ISIS Header 层:
1、PDU Type。(实际上决定了使用哪种 Mac,甚至 PPP 无需用到 Mac)。Level-1 只建立 Level-1 邻居关系,Level-2 只建立 Level-2 邻居关系。而 Level-1-2 路由器实际上是既发送 Level-1 的报文又发送 Level-2 的报文。并不单纯是 OSPF 的 ABR 概念,ISIS 的路由器可以全部是 Level-1-2。
(ISIS 发送两种报文分别建立邻居,OSPF 则是一种报文)。实际上,可以将 Level 理解成两种 ISIS 协议的叠加,只是 ISIS 默认会将 Level-1 引入 Level-2 实现导通而已。
2、ID Length。集成 System ID 长度默认值,一般也不支持更改。
3、Maximum Area Address。默认为 3,一般也不支持更改。
IIH 层:
4、SystemID。相当于 OSPF 的 Router ID,用于唯一标识。
5、Area address (TLV)。level-1 要求必须一致,多个 NET 地址有一个相同即可。Level-2 不进行检查。
6、IP Interface address (TLV)。一般要求同网段即可,与 OSPF 不同的是,ISIS 不包含掩码因此掩码可不相同。
(例如:10.1.1.1/24 和 10.1.1.2/30 可以判定对方的主机地址在自己的网段中,因此可以建立邻居。但是这样会带来些许问题。)
对于 PtoP 链路,甚至可以强制忽略对端的 IP 地址。
7、Multi Topology (TLV)。一般要求相同。
其他影响因素:
8、接口 MTU。接口丢弃大于自己 MTU 的报文。
接口 MTU 默认 1500。值得注意的是 display isis interface 显示的却是 1497。因为 LLC 层占用了 3 字节。
9、接口认证。由于 ISIS 是 TLV 格式的,会忽略自己无法识别的 TLV。认证功能的实现是通过携带额外的 TLV 来实现的。
在第 1.4 章节中(上面就是 1.4),我们发现 IIH(ISIS Hello) 中携带的 TLV=IP Interface address 只有接口的 IP 地址,也即接口的掩码不影响 IS-IS 邻居建立。只需要邻居的接口主机位所包含于自己的网段中即可。
同时在广播网中的实节点在 TLV=IP Internal Reachabilit 中描述了自己叶子路由;伪节点描述的是所连接的实节点,度量 = 0)
最终效果是路由器可能出现多条主机位相同而掩码不同的 ISIS 路由,此时根据–掩码最长匹配原则可能导致网络不通的情况。
根据 ISIS 的 LSP 报文 AR12 上会根据每台路由器的叶子路由计算出多条路由。AR12 向 AR13 通信 10.1.1.3 时,根据最长掩码会将报文发往 AR11 (10.1.1.3 被 10.1.1.0/30 匹配到。)。AR11 发现为自己的广播地址,将其丢弃。
封装包 MAC 为下一跳的 MAC
此时会出现一个比较有意思的情况,没有建立 ISIS 邻居时 AR12 和 AR13 的接口地址可以通,而建立了 ISIS 之后反而因为最长掩码不通了。
-----------------------------------------------------
接下来对路由选择顺序进行详解:
1、最长掩码匹配原则。
路由器在转发相应数据包在路由表中进行路由选择时,优先选择掩码最大的路由条目。
举例:目的 IP=192.168.1.1 的数据包,可匹配路由
192.168.1.0/30,
192.168.1.0/29,
192.168.1.0/28,
192.168.1.0/24。
此时优先选择 192.168.1.0/30 的路由。
而目的 IP 在相同掩码情况下只具有一个网络。因此在路由表中到目的地址的掩码路由的路由只有一条。在不考虑其他情况下可唯一确定该路由。
2、管理距离 / AD / 路由优先级
管理距离 / AD / 路由优先级越小越优先。通常路由器会运行多种路由协议 (BGP,OSPF,ISIS 等),同一条路由可以既从 ISIS 学习到,又从 OSPF 中学习到。此时可人为定义协议优先级进行路由优选。协议优先级越小,越被路由优选。
Huawei 常用的路由协议优先级:
路由协议 | 协议优先级 |
---|---|
直连路由 | 0 |
OSPF-IN | 10 |
ISIS-level1 | 15 |
ISIS-level2 | 18 |
静态 Static | 60 |
RIP | 100 |
OSPF-OUT | 150 |
iBGP | 255 |
eBGP | 255 |
OSPF-IN 表示 AS 内部传递路由;OSPF-OUT 表示引入的外部路由;iBGP 表示从 iBGP 邻居学习到路由,eBGP 表示从 eBGP 邻居学习到路由,local 通常表示 aggress 聚合路由 (255 优先级)。
此外,bgp 的network命令或者import-route命令引入的路由的优先级直接继承被引用路由的优先级。
管理距离 / AD / 路由优先级只具有本地意义,只可控制本地路由表相关路由的选择。
修改命令,通常动态路由协议,还可进行路由策略选择
静态:
OSPF:
ISIS:
BGP:
针对 BGP 而言,此处仅介绍了 ipv4 unicast 地址族下的修改命令。而针对 EVPN/mulicast/VPN-instance/VPNv4 等地址族下的路由优先级还需针对实际情况进行考虑。
CISCO 常用的路由协议优先级:
路由协议 | 协议优先级 |
---|---|
直连路由 | 0 |
Static 静态路由 | 1 |
eBGP | 20 |
OSPF | 110 |
ISIS | 115 |
RIP | 120 |
eBGP | 200 |
修改命令如下:
OSPF:
distance ospf internal [1-255]
distance ospf external [1-255]
ISIS:
distance [1-255]
BGP:
distance bgp internal [1-255]
distance bgp external [1-255]
distance bgp local [1-255]
需要注意的是 CISCO 认为 255 的路由协议优先级为非信任来源学习而来,因此不认为其为有效路由。
举例:路由表存在从 OSPF 学习到的 192.168.1.0/30,从 ISIS 学习到的 192.168.1.0/30。
此时根据华为和 Cisco 的规则都选择 OSPF 学习到的路由,将报文转发向该路由的下一跳。
3、路由花销 / Cost/Metric
如果以上两者完全一致,则比较路由开销。路由开销小的,进行优选。
说明:OSPF 和 ISIS 都属于链路协议,实际路由的开销(cost/metric)要根据实际情况来选择。
如果开销一致,则取决于实际情况进行负载分担。(例如,BGP 路由仍需满足其他条件才可进行负载。并且不同厂家的 BGP 负载要求并不一致)
4、其他细节
* 路由比较 *:既然可以人为指定 IGP 协议的路由优先级,那么当 IGP 协议优先级相同时如果进行优选呢?
HUAWEI 通常按如下逻辑进行优选:(优先级相同)OSPF>ISIS > 静态 > RIP>BGP
并且需要注意的是上述仅是一个大致的结果,详细的分类需要根据实际情况进行决定。
同时需要注意不同厂家间的区别~
UNR 路由:User Network Route 用户网络路由。这是一类特殊的路由,由非接口 IP 产生,不存在于任何接口上。通常用于在特定场景下为用户提供路由服务。
Huawei 常用的 UNR 优先级如下:
Huawei 的 DHCP 路由如下图所示:
// 华为 dhcp 的缺省路由优先级为 60,dhcpv6 的缺省路由优先级为 64。并且可通过 dhcp client default-route preference <> 设定接收到 DHCP 路由的优先级。
黑洞路由:blackhole Route,这是一类出接口为本地空接口的特殊静态路由。匹配到黑洞路由的流量将会被丢弃。
黑洞路由往往用于防止路由环路,以及 BGP 发布聚合路由等场景下。
HUAWEI 实现上:
根据路由选择的原则,如果存在指向同一子网的普通静态路由和黑洞路由进行优选比较时(掩码,优先级等都一致的情况下),最终优选普通静态路由。
此处需要注意不同厂家间的区别!实际可能优选黑洞路由!
华为路由条目的形成过程
鹿鸣天涯于 2022-10-09 11:44:42 发布
1. 路由的类型可分为三类
1.1 直连路由:通过链路层协议发现的路由 (本总结以直连路由进行说明)
1.2 静态路由表:通过系统管理员手工添加设置好固定的路由表称之为静态(static)路由
1.3 动态路由: 通过动态路由协议发现的路由
2. 路由相关信息解释
2.1. 未经配置的路由器的初始路由表信息及解释
[Router1] display ip routing-table
Route Flags: R - relay, D - download to fibR:表示该路由是迭代路由 D:表示该路由下发到 FIB 表
-------------------------------
Routing Tables: PublicPublic: 表示此路由表是公网路由表,如果是私网路由表,则显示私网的名称,如 Routing Tables: ABC
Destinations : 4 Routes : 4
显示目的网络 / 主机的总数 显示路由的总数
Destination/Mask Proto Pre Cost Flags NextHop Interface
目的地址 路由协议 优先级 路由开销 路由标记 下一跳地址 出接口
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
(本地的回环网段:127.0.0.0 这个网段内所有地址都指向自己机器 127.0.0.1)
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
(本地广播路由:当接收到 127.255.255.255 广播数据包时,直接发给自己 127.0.0.1 )
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
(绝对广播路由:当接收到 255.255.255.255 广播数据包时,直接发给自己 127.0.0.1 )
注: 本地的回环地址:就是在主机上发送给 127 开头的 IP 地址的数据包,会自发自收,传不出去,外部设备也无法通过回环地址访问到本机。其实就是丢掉,不转发!
2.2 当对 AR1 路由器的 GE0/0/0 接口配 IP 地址后:192.168.1.254/24 ,路由表中会形成直连路由相关条目
如下:
[Router1] display ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 7 Routes : 7Destination/Mask Proto Pre Cost Flags NextHop Interface
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
192.168.1.0/24 Direct 0 0 D 192.168.1.254 GigabitEthernet0/0/0(生成 192.168.1.0 网段,指明本网段出接口就是 192.168.1.254)
192.168.1.254/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
(IP 地址范围通过掩码 32 位,锁定 IP 地址 192.168.1.254 本身)
192.168.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
(广播路由:当接收到 192.168.1.255 广播数据包时,直接发给自己 127.0.0.1)
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
注:
*/32 是网络掩码的位数 : 255.255.255.255
*/24 是网络掩码的位数 : 255.255.255.0
因此:
192.168.1.254/32 : IP 地址范围 就是一个 192.168.0.254
192.168.1.1/24 : IP 地址范围 从 192.168.1.1 到 192.168.1.255
3. 路由表中包含了下列关键项:
Destination: 表示此路由的目的地址。用来标识 IP 包的目的地址或目的网络。
Mask: 表示此目的地址的子网掩码长度。与目的地址一起来标识目的主机或路由器所在的网段的地址。
将目的地址和子网掩码 “逻辑与” 后可得到目的主机或路由器所在网段的地址。例如:目的地址为 10.1.1.1,掩码为 255.255.255.0 的主机或路由器所在网段的地址为 10.1.1.0。
掩码由若干个连续 “1” 构成,既可以用点分十进制表示,也可以用掩码中连续 “1” 的个数来表示。例如掩码 255.255.255.0 长度为 24,即可以表示为 24。
Proto: 表示学习此路由的路由协议
Direct: 表示直连路由
Static: 表示静态路由
EBGP: 表示 EBGP 路由
IBGP: 表示 IBGP 路由
ISIS: 表示 IS-IS 路由
OSPF: 表示 OSPF 路由
RIP: 表示 RIP 路由
UNR: 表示用户网络路由(User Network Routes)
说明:
S5700LI、S5700S-LI 和 S2750 仅支持direct、static、unr路由协议。
S5700SI 仅支持direct、static、rip、unr路由协议。
Pre: 表示此路由的路由协议优先级。针对同一目的地,可能存在不同下一跳、出接口等多条路由,这些不同的路由可能是由不同的路由协议发现的,也可以是手工配置的静态路由。优先级高(数值小)者将成为当前的最优路由。各协议路由优先级请参见路由协议的优先级。
Cost: 路由开销。当到达同一目的地的多条路由具有相同的路由优先级时,路由开销最小的将成为当前的最优路由。 用于不同路由协议间路由优先级的比较,Cost 用于同一种路由协议内部不同路由的优先级的比较。
NextHop: 表示此路由的下一跳地址。指明数据转发的下一个设备。
Flags: 显示路由标记,即路由表头的 Route Flags
NextHop: 表示此路由的下一跳地址。指明数据转发的下一个设备。
Interface: 表示此路由的出接口。指明数据将从本地路由器哪个接口转发出去。
via:
-
路由选择顺序详解 - 最长掩码匹配 / 路由协议优先级 / 开销_路由优先级顺序 - CSDN 博客 fengxingzhe008 已于 2023-12-22 20:33:28 修改
https://blog.csdn.net/fengxingzhe008/article/details/127437511 -
华为路由器的路由条目的形成过程及说明总结_unr 路由 - CSDN 博客 鹿鸣天涯于 2022-10-09 11:44:42 发布
https://blog.csdn.net/jayjaydream/article/details/127223933