路由环路知识点总结

人类的创造力与破坏力同样强大 。
网路互通,同样也衍生出纷繁复杂的路由协议和各种因特网服务,以及"网络安全"这个庞大的领域 。
这也是为什么说当今所有的网络通讯流量中,80%的资源都被浪费,只有20%被用以有效数据的传输 。
防环机制就是在这样一个大背景下产生的
环路出现在互联网的各个层面,不同环路的出现原因与解决方法也不同 。
通常网络环路分为第二层环路和第三层环路,所有环路的形成都是由目的路径不明确导致混乱而造成的 。
二层环路主要就是交换机广播流的恶性循环 。
三层环路就复杂多了,通常由各种网络故障导致,也是本文研究的重点 。
本文将三层环路分成三类:单链路环路、跨结点环路、区域/AS间环路 。
交换层广播流与生成树
众所周知,交换网络是一个小型的本地接入网(LAN),所以二层交换机默认允许转发广播流(路由器则默认丢弃) 。
除了广播流,交换机查询mac地址表无果时会将数据帧从除接收接口外的所有接口发送出去 。
所以最初,当三个交换机两两相连时,一个数据帧会在其中无限循环 。
生成树就是为了让交换网络中防环而出现的 。
由于具体的生成树工作原理过于复杂需另成文,在此只做介绍不做详解 。
 

路由环路知识点总结

文章插图
 
生成树最原始的版本是802.1d,也就是STP(Spanning Tree Protocol),但这个版本的标准是所有VLAN共用一个生成树,所以也叫CST(Common Spanning Tree)思科在此基础上增强了一下,发布了PVST+(Per Vlan Spanning Tree) 。
802.1d的下一个版本是802.1w,也就是RSTP(Rapid STP),但还是共用生成树,搞不懂IEEE不长点记性 。于是思科又搞了一下,发布了PVRST+ 。
IEEE又基于思科的MISTP的方案,发布了802.1s(MSTP),这个就比较强了,但凡是大一点的交换网络都用MSTP,也是现在的主流 。
RIP的5种防环机制
Rip作为一个古老的路由协议,虽然正逐渐被淘汰,还是有必要了解一番以理解路由协议的进化史 。
先谈一个易理解的的程序员逻辑,即路由器接从F0接口收到的某个路由条目A不应该从F0反发出去(水平分割),但是距离矢量路由协议的路由更新要向外发送完整的路由表,因此从F0发出之前将A路由的度量值改为15,这样对方收到的A的度量值为16不可达(计数最大跳&毒性逆转) 。
路由环路知识点总结

文章插图
 
当路由器R1检测到某网段的网络故障(比如收到icmp报错),它将要做两件事 。
第一,告诉其他路由器:"你们无法从我这里到达这个子网";
第二,寻找其他路径到达这个子网 。
此时R1将抑制定时器,即在规定时间内不接收邻居发来的关于该子网的路由 。试想若没有抑制定时器,这时邻居正好发送该子网的路由,而这条路径恰好经过R1,那么后果将不堪设想 。
在抑制时间内R1在做什么呢?
当然是等待rip网络中所有路由器都收到这条16跳的路由后更正自己的路由表,因此需要触发更新,不必等时间到期再发路由表 。
此外当某接口的度量值被改动了也会触发更新,防环原理相同 。
可以看出rip的5个防环机制中,设置最大跳才是终极武器,它配合抑制定时器,不仅能解决"单链路环路",更能防止"跨结点环路" 。
 
EIGRP与DUAL算法
视角:周围可视/局部视角 。
Eigrp的进步之处在于多了两张表:邻居表与拓扑表 。
邻居表的建立直接避免了单链路环路:当在收到的路由更新中看到下一跳是自己,那没得说了,这条更新定是来源于我的,拒收 。
Eigrp的核心算法叫DUAL(弥散更新),其中有一条公式专门用来防止跨结点环路:当邻居通向一个网络的报告距离(RD)比本地路由器通向同一个目的网络的可行距离(FD)短时,即符合了可行性条件(FC),该路径被写进拓扑表 。
但这样的算法可想而知也是有缺陷的,即很多高开销的可行备份路径也会被当做"环路"而拒绝收录 。
有一个特例:手动汇总导致的环路 。
其实汇总本身是有"缺陷"的,当路由器把汇总的主类网路由更新传给对端时就相当于让对端生成了一些关于那些"不存在"的子类网路由指向自己 。
这样就不合理了,如果该路由器有一个默认路由指向对端的话,环路就形成了,一个以不存在的子网ip为目的地址的恶意数据包就会在两个路由器之间无限循环,直到跳数寿命终结 。


推荐阅读