大家好 , 今天是数通面试第七篇 , 来聊一聊路由的一些基础概念 , 这其实很重要 阿里云有一句话 : 基础不牢地动山摇 , 这里面的一些基础概念会伴随大家整个网络生涯.
路由表概述
首先来讨论一下路由表 , 路由表的一个作用就是给数据包转发时提供了可靠的依据 ,
当路由设备收到一个IP数据包时,查看IP头部中的目的IP地址,并在路由表中进行查找,在匹配到最优的路由后,将数据包发给该路由所指的出接口或下一跳。
就拿这个简单的路由表来说明一下 , 目的IP地址 比如框出来的这一条为例 , 192.168.3.0 /24 , 协议类型为静态 , 说明是手动添加的路由 , 其路由优先级为60 (注意这里的优先级都是可以手动配置修改的 ) , 开销 0 , 下一跳为56.1 , 出接口是vlan1 说明是一个vlanif的三层口 .
这里注意一个概念 , 大部分情况下我们说的路由表 多指设备路由表 , 他是由多个协议路由表共同创造出来的 , 比如有OSPF路由表 , BGP路由表 , ISIS路由表 , 去往同一目标网络的不同路由比较后最优者才会被加入到设备路由表中 .
比如路由表中存在192.168.3.0/24 static Pre 61的路由 , 但被60击败 你无法直接在设备路由表中查看到61 , 这不代表他不存在 ,等60这一条失效后 , 61优先级的就会成为此网段最优路由 , 并出现在设备路由表中.
今天就详细说几个典型的问题 ,
-
优先级和开销的对比 ,为什么情况下要比优先级?什么情况下比开销? 延伸到外部路由优先级和内部路由优先级
-
出接口和下一跳的关系 , 延伸到为什么以太网口必须指定下一跳 , 不能指定出接口 , 但p2p链路可以?
-
最长匹配原则是什么 ? 它和优先级/开销 , 在路由表生成过程中的作用有什么区别?
优先级和开销的对比
记住在对比优先级和开销 一定一定有一个重要的前提 , 那就是他们都是去往同一目标网络的
比如A去1.1.1.0/24 , B去2.2.2.0/24 那么他们就没有比较的必要 , 一定是A/B 2条路由都是去往1.1.1.0/24 ,此时才有比较的意义 . 比如你在上海想去北京 , 你可以比较高铁或者飞机 哪个更快 , 你如果要去北京的飞机和去南京的高铁比较 , 那就没有任何意义
先说结论 :
preference优先级, 是用来比较(不同路由协议)到达相同目标网络的优先级–>重点是比较不同协议
cost开销 , 是用来比较(相同协议)到达相同网络的(不同路径)的优先级 -->重点是比较相同协议不同路径
优先级例子 :
判断路由前提 , 都是2.2.2.2/32 为同一目标网络 , 可以比较 , 发现Proto协议类型不一致 , 此时可以比较preference 优先级 , 发现OSPF优于静态 , 遵从越小越优的规则 , 直连为0代表至高无上的优先级 , 此时就依靠优先级比较出OSPF这一条路由优选 , 只有最优的路由才会被加入到路由表 供数据包转发时作为查表
开销例子 :
还是刚刚的场景 , 都是2.2.2.2/32 为同一目标网络 , 可以比较 , 发现Proto协议类型一致 , 此时就可以比较cost开销 , 发现第二条的OSPF路由的总开销为100 , 遵从越小越优先的规则 , cost0的路由会被加入到设备路由表中
如果你要问我 , 如果cost也相同的话会怎样 , 如果去同一目标网络的多条路由 , 他们的优先级和开销都一样的情况下 ,那么这几条路由就是等价路由 , 等价路由可以实现流量负载分担 具体的规则看下图 不详细展开.
内/外部路由优先级
![image-20231220200658122](https://i-blog.csdnimg.cn/blog_migrate/c122739aeb1c1f4e07977fd1d823140a.png)
还是这个图 , 我们尝试修改一下静态路由协议的优先级
ip route-static 192.168.3.0 24 192.168.56.1 preference 100
此时你会发现 路由协议的优先级是可以被修改的 (直连除外 , 直连路由的优先级永远是最高的 , 它是所有路由的根基无法修改 值为0或者1) 这样就会出现一个问题 , 如果我把OSPF优先级和BGP路由的优先级 都设置为10 , cost都是0的状态 , 那按照上面的说法他们会成为2条负载分担的链路吗?
引出我们的关键话题 , 网络设备其实分别定义了外部优先级和内部优先级,外部优先级即前面提到的用户为各路由协议配置的优先级,缺省情况下如下 :
这是我们平时可以修改的值 , 也被成为外部路由优先级 , 当不同的路由协议配置了相同的优先级后,系统会通过内部优先级决定哪个路由协议发现的路由将成为最优路由。路由协议的内部优先级不能被用户手工修改 , 内部路由优先级的情况如下 :
不同路由协议的技术背景不同 , 效率可靠性不同 , 所以是不会设计成不同的路由协议负载均衡的 , 同时避免了路由环路的风险 , 内部优先级的很多设计很大程度上避免了环路 , 后续有机会会详细展开说明
出接口/下一跳
在配置静态路由时 , 为什么以太网口必须要指定下一跳 , 而p2p的串口只需要指定出接口 ?
让我们来做一个简单的对比实验 .
R3
ip route-static 4.4.4.4 32 g0/0/0
此时R3 ping 4.4.4.4是不通的 , 虽然他们之间只有一条链路 , 看上去R3把包从g0/0/0发送出去一定能到R4
R1
ip route-static 2.2.2.2 32 s0/0/0
在p2p链路上只配置出接口网络是能通的
来揭晓答案 , 静态路由配置时指定出接口 设备会默认这个目的ip地址为直连 (华为华三设备不会提示, 思科的设备会提示) , 这会直接导致一个致命的问题 , 在这个场景下 , R3会认为4.4.4.4这个地址为直连地址 , 此时他访问4.4.4.4在ARP获取其MAC地址时 , **不会封装给网关 , 而是直接广播 **
对端的g0/0/0 收到询问4.4.4.4的arp , 他只有一个操作 那就是丢包 . 这个问题我在ARP代理章节中有详细解释过 , 误认为是同网段的情况下 ARP将会以广播的形式发送 而非发送给网关进行转发 , 这将直接对方导致丢包 , 我方因为没有对端MAC甚至连2层的封装都无法完成 , 所以如果你硬要在以太网接口上使用出接口的方式配置路由的话 ,
在对端设备R4上的g0/0/0接口开启ARP代理功能 , 这将会让其收到ARP请求时查询自身路由表并做出对应回复(如果有的话) , 而非直接丢包
至于为什么p2p链路不需要指定下一跳 , 首先我们理解PPP是专门处理点到点之间的传输的 , 其次 他和以太网的架构没有关系 ,这代表ppp是没有mac地址这个说法的 , 没有mac地址也没有ARP , 不是以太网封装 , 其余的可以自行理解 ,不再详细展开 .
最长匹配原则
用这张图来解释一下 ,
如果你需要访问 192.168.1.20 这个地址 , 这2条路由一定会命中/26 因为匹配度最长 ,
- 192.168.1.0/24
- 192.168.1.0/26
因为这个特性 , 默认路由 0.0.0.0 0 是优先级最低的保底路由 , 在存在准确的明细路由时 , 一定不会走默认路由 , 深刻理解最长匹配原则会对路由表选路有一个清晰的掌控 , 比如在路由汇总场景下 , 明细路由匹配不精确也走了汇总 , 但对端存在默认路由 , 此时就会发生环路的场景(下篇细说这个问题) , 需要写一条长度在明细和默认路由中间长度的黑洞路由来避免这个问题 ,
来讨论一下今天最后一个问题
最长匹配原则和优先级/开销 , 在路由表生成过程中的作用有什么区别?
如果你仔细思考这个问题的话 , 你会发现这个问题本身就是一个坑 , 回答这个问题最直接的方式就是直接提出 , 这个问题本身就是错误的 .
最长匹配原则并不会参与路由表的生成 , 他的作用是 : 为数据在已经生成的最优路由表的转发过程中起决策作用
- 应用时机:最长匹配原则主要在路由器进行数据包转发决策时应用,而优先级/开销则在路由表构建和维护过程中起主导作用。
- 决策依据:最长匹配原则基于目的IP地址和子网掩码的匹配程度,而优先级/开销则基于路径的性能指标。
- 目标:最长匹配原则的目标是确保数据包沿最具体的路径转发,而优先级/开销则旨在确保数据沿最有效或最优的路径转发。