网工答应我,这个环路必备解决秘籍你一定要会!

2024-03-25 20:44

本文主要是介绍网工答应我,这个环路必备解决秘籍你一定要会!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你们好,我的网工朋友。

互联网行业尤其是网络构建这一领域,其实从根本上一直存在着一个无奈之处:

网络本可以设计的很简单,只要实现网络的连通性即可,甚至全互联,但就是因为要fight against"天灾人祸",互联网才衍生出了纷繁复杂的路由协议和各种因特网服务,以及"网络安全"这个庞大的领域

这也是为什么说当今所有的网络通讯流量中,80%的资源都被浪费,只有20%被用以有效数据的传输。

防环机制就是在这样一个大背景下产生的。

环路出现在互联网的各个层面,不同环路的出现原因与解决方法也不同。

通常网络环路分为第二层环路第三层环路,所有环路的形成都是由目的路径不明确导致混乱而造成的。

二层环路主要就是交换机广播流的恶性循环。

三层环路就复杂多了,通常由各种网络故障导致,这也是今天咱研究的重点。

本文会将三层环路分成三类单链路环路、跨结点环路、区域/AS间环路,由浅入深让你搞懂。

今日文章阅读福利:《 交换机在江湖 (高清pdf)》

作为华为官方持续连载中的电子期刊,它能提供大量真实、详细的配置案例,以及丰富的维护经验和秘笈。

私信我,发送暗号“江湖”,即可获取该份网工交换机秘籍。

01 交换层广播流与生成树

众所周知,交换网络是一个小型本地接入网(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,也是现在的主流

02 RIP的5种防环机制

Rip作为一个古老的路由协议,虽然正逐渐被淘汰,还是有必要了解一番以理解路由协议的进化史。

先谈一个易理解的的程序员逻辑,即路由器接从F0接口收到的某个路由条目A不应该从F0反发出去(水平分割)。

但是距离矢量路由协议的路由更新要向外发送完整的路由表。

因此从F0发出之前将A路由的度量值改为15,这样对方收到的A的度量值为16不可达(计数最大跳&毒性逆转)。

路由器R1检测到某网段的网络故障(比如收到icmp报错),它将要做两件事。

第一,告诉其他路由器:"你们无法从我这里到达这个子网";

第二,寻找其他路径到达这个子网。

此时R1将抑制定时器,即在规定时间内不接收邻居发来的关于该子网的路由。

试想若没有抑制定时器,这时邻居正好发送该子网的路由,而这条路径恰好经过R1,那么后果将不堪设想。

在抑制时间内R1在做什么呢?

当然是等待rip网络中所有路由器都收到这条16跳的路由后更正自己的路由表,因此需要触发更新,不必等时间到期再发路由表。

此外当某接口的度量值被改动了也会触发更新,防环原理相同。

可以看出rip的5个防环机制中,设置最大跳才是终极武器,它配合抑制定时器,不仅能解决"单链路环路",更能防止"跨结点环路"

03 EIGRP与DUAL算法

视角:周围可视/局部视角。

Eigrp的进步之处在于多了两张表邻居表与拓扑表。

邻居表的建立直接避免了单链路环路:当在收到的路由更新中看到下一跳是自己,那没得说了,这条更新定是来源于我的,拒收。

Eigrp的核心算法叫DUAL(弥散更新),其中有一条公式专门用来防止跨结点环路:

当邻居通向一个网络的报告距离(RD)比本地路由器通向同一个目的网络的可行距离(FD)短时,即符合了可行性条件(FC),该路径被写进拓扑表。

但这样的算法可想而知也是有缺陷的,即很多高开销的可行备份路径也会被当做"环路"而拒绝收录。

有一个特例:手动汇总导致的环路。

其实汇总本身是有"缺陷"的,当路由器把汇总的主类网路由更新传给对端时就相当于让对端生成了一些关于那些"不存在"的子类网路由指向自己。

这样就不合理了,如果该路由器有一个默认路由指向对端的话,环路就形成了。

一个以不存在的子网ip为目的地址的恶意数据包就会在两个路由器之间无限循环,直到跳数寿命终结。

解决方法(默认开启)是利用null0接口。

本地生成的汇总路由指向这个逻辑空接口,这里要提一下路由查询的先后顺序:

收到数据包先查看普通的单播路由条目,再查看本地汇总路由条目,最后才看默认路由。

如图,这样就可以识别出那些数据包是恶意数据包,并且从null0口丢弃。

04 Link state路由协议与SPF算法

视角:全局(整个区域)视角/上帝视角。

除了拥有邻居表,Ospf有一张很强悍的表,叫LSDB(链路状态数据库)(同is-is)。

在每个ospf区域中,通过互发lsa(跨网段传输的链路通告),每个路由器都能够获悉所在的整个区域的拓扑和链路状态。

这样一来在区域内选路就可以从全局的视角锁定最佳路径,并且百分百无环路,无论是单链路环路还是跨结点环路都可避免,这是链路状态路由协议的创新之处。

OSPF区域间路由环路的避免又是通过哪种方式实现的?

答案是:分层结构的拓扑实现。

Ospf规定所有常规区域都要链接到骨干层,即使物理上与骨干层分隔,也要有条逻辑链路(虚链路)连接到骨干区域。

这种树形结构从根本上就摒弃了环路。

因此ospf也是天然无环的

与ospf相似的IS-IS,则不要求L1层必须连接到L2层,因而有两个独特的防环机制

第一,非L2区域的通信都要通告L2区域转发;

第二,L2区域路由默认不会进入L1(除了路由泄露)。

因而实现了防环

05 BGP的高层防环机制

谈到Bgp就要有关AS自治系统,bgp的防环主要分为AS内防环与AS间防环(可以类比ospf的区域内和区域间)。

AS间:路由更新的as-path字段包含所经过的所有AS号,当bgp路由器看到路由更新中有自己的AS号就会果断放弃这条更新(但在特殊情况下可以用命令取消这个特性)。

这就是距离向量与距离矢量之间的区别:距离矢量路由协议(如rip)只记录到达目的地经过多少步,而距离向量路由器则记录了途中经过的路径。

看来学好思科还得咬文嚼字啊。

Ibgp的水平分割原则是:从IBGP邻居所收到的路由信息,不会传递给其它的IBGP邻居,但可以传递给EBGP邻居。

注意这和rip的水平分割不大一样

水平分割是为了防止3个及以上的ibgp peer围绕成环,造成自治系统内部的跨结点环路。

除了网络故障带来的路由环路,网络的不合理规划也会造成环路。

比如在BGP中如果让ibgp间的中转路径路由器处于另一个AS内的话就会造成环路。

当然这只是其中一个例子,意在说明人为的环路是很难避免的。

但思科想的还真周到,提供了next-hop-unchange 这条命令来处理上面那个环路。

注意,通常使用路由反射器(RR)来解决水平分割带来的路由不学习的问题。

但有趣之处在于,水平分割用来防环,路由反射器用来防水平分割,因而反射器又产生了环

后来RR经过改进,增加了一个特性叫插入簇ID与起源ID。

默认情况下RR会在路由更新中加入自己的router-id以及路由更新的起源路由器的router-id,这也是一种路径向量的机制。

整理:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

这篇关于网工答应我,这个环路必备解决秘籍你一定要会!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/846199

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned