网络上常见的环路指的是什么

news2024/10/7 6:41:21

人类的创造力与破坏力同样强大"。

网路互通,同样也衍生出纷繁复杂的路由协议和各种因特网服务,以及"网络安全"这个庞大的领域。

这也是为什么说当今所有的网络通讯流量中,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为目的地址的恶意数据包就会在两个路由器之间无限循环,直到跳数寿命终结。

图片

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

本地生成的汇总路由指向这个逻辑空接口,这里要提一下路由查询的先后顺序:收到数据包先查看普通的单播路由条目,再查看本地汇总路由条目,最后才看默认路由。如图,这样就可以识别出那些数据包是恶意数据包,并且从null0口丢弃。

Link state路由协议与SPF算法

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

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

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

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

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

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

Ospf规定所有常规区域都要链接到骨干层,即使物理上与骨干层分隔,也要有条逻辑链路(虚链路)连接到骨干区域。这种树形结构从根本上就摒弃了环路。

因此ospf也是天然无环的。

与ospf相似的IS-IS,则不要求L1层必须连接到L2层,因而有两个独特的防环机制:第一,非L2区域的通信都要通告L2区域转发;第二,L2区域路由默认不会进入L1(除了路由泄露)。

因而实现了防环。

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,这也是一种路径向量的机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1539986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全实训Day8

写在前面 网络工程终于讲完了。这星期到了网络安全技术部分。 网络安全实训-网络安全技术 网络安全概述 信息安全:所有保障计算机硬件、系统、软件、数据不因有意或无意的行为导致的服务中断、数据损坏或丢失等安全事件的保障技术 网络安全:基于计算机…

CSS的特殊技巧

1.精灵图 使用精灵图核心总结: 1. 精灵图主要针对于小的背景图片使用。 2. 主要借助于背景位置来实现--- background-position 。 3. 一般情况下精灵图都是负值。(千万注意网页中的坐标: x轴右边走是正值,左边走是负值&#xf…

Unity 中 苹果眼镜开发入口

1. 文档介绍了Unity对Apple新操作系统visionOS的支持。 2. Unity提供了完善的文档、模板和支持,帮助开发者快速为visionOS开发应用。 3. Unity的跨平台框架AR Foundation和XR Interaction Toolkit可以帮助现有移动和XR应用无缝迁移到visionOS。 4. 在visionOS上,可以利用Uni…

Python 从0开始 一步步基于Django创建项目(3)使用Admin site管理数据模型

本文内容建立在《Python 从0开始 一步步基于Django创建项目(2)创建应用程序&数据模型》的基础上。 Django提供的admin site,使得网站管理员,能够轻松管理网站的数据模型。 本文首先创建‘管理员账户’,即超级用户…

超快的 AI 实时语音转文字,比 OpenAI 的 Whisper 快4倍 -- 开源项目 Faster Whisper

faster-whisper 这个项目是基于 OpenAI whisper 的模型,在上面的一个重写。 使用的是 CTranslate2 的这样的一个库,CTranslate2 是用于 Transformer 模型的一个快速推理引擎。 在相同精度的情况下,faster-whisper 的速度比 OpenAI whisper …

【2024第十二届“泰迪杯”数据挖掘挑战赛】B题基于多模态特征融合的图像文本检索—解题全流程(持续更新)

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛B题 解题全流程(持续更新) -----基于多模态特征融合的图像文本检索 一、写在前面: ​ 本题的全部资料打包为“全家桶”, “全家桶”包含:数据、代码、模型、结果csv、教程…

解决淘宝镜像过期问题 ERR! request https://registry.npm.taobao.org

目录 一、问题描述 二、解决方案 2.1、针对于域名更换解决方案 2.2、针对于证书过期解决方案 三、进行测试 一、问题描述 针对于2022年5月31号和2024年1 月 22 日前的前端项目 npm.taobao.org和旧域名于2021年官方公告域名更换事件,已于2022年05月31日零时起…

【Node.js】全局变量和全局 API

node 环境中没有 dom 和 bom ,此外 es 基本上都是可以正常使用的。 如果一定要使用 dom 和bom,可以借助第三方库 jsdom 帮助我们实现操作。npm i jsdom 实例: const fs require(node:fs) const {JSDOM} require(jsdom)const dom new JS…

刷题日记——还是BFS

题目——奇怪的电梯&#xff08;simplified BFS&#xff09; 分析 这题是简化的BFS&#xff08;我一遍就AC了<夸夸自己~~>&#xff09;&#xff0c;照搬之前分析BFS的思路&#xff0c;需要定义这些数据结构&#xff1a; 结构体position&#xff1a;当前位置信息&#x…

遥感影像数据产品级别概述

1986年&#xff0c;美国航空航天局&#xff08;NASA&#xff09;定义了一系列数据处理"级别"&#xff0c;用以区分源于其地球观测系统&#xff08;EOS&#xff09;卫星获取的影像生成的标准数据产品。给定任何数据产品&#xff0c;我们可以根据其级别来判断其在生产过…

力扣爆刷第103天之CodeTop100五连刷1-5

力扣爆刷第103天之CodeTop100五连刷1-5 文章目录 力扣爆刷第103天之CodeTop100五连刷1-5一、3. 无重复字符的最长子串二、206. 反转链表三、146. LRU 缓存四、215. 数组中的第K个最大元素五、25. K 个一组翻转链表 一、3. 无重复字符的最长子串 题目链接&#xff1a;https://l…

C#,图论与图算法,用于检查给定图是否为欧拉图(Eulerian Graph)的算法与源程序

1 欧拉图 欧拉图是指通过图(无向图或有向图)中所有边且每边仅通过一次通路, 相应的回路称为欧拉回路。具有欧拉回路的图称为欧拉图(Euler Graph), 具有欧拉通路而无欧拉回路的图称为半欧拉图。 对欧拉图的一个现代扩展是蜘蛛图,它向欧拉图增加了可以连接的存在点。 这给…

2、事件修饰符、双向绑定、style样式使用、v-for循环遍历、v-if 和 v-show

一、事件修饰符 1、.stop 阻止冒泡事件 给谁加了阻止冒泡事件&#xff0c;谁下面的盒子就不会执行了 <div id"app"><div class"parent" click"log3"><div class"child" click"log2"><button click.…

IAB欧洲发布首张泛欧洲数字零售媒体能力矩阵图

2024年1月18日&#xff0c;互动广告署-欧洲办事处&#xff08;IAB Europe)发布了首张泛欧洲数字零售媒体能力矩阵图。为媒体买家提供的新资源概述了在欧洲运营的零售商提供的现场、场外和数字店内零售媒体广告机会。 2024年1月18日&#xff0c;比利时布鲁塞尔&#xff0c;欧洲领…

Spring详解,代码事例,IOC,AOP,事务。整合MyBatis,JUnit

Spring核心 核心概念 代码书写现状 耦合度偏高 解决方案 使用对象时&#xff0c;在程序中不要主动使用new产生对象&#xff0c;转换为由外部提供对象 IOC ( Inversion of Control )控制反转 对象的创建控制权由程序转移到外部&#xff0c;这种思想称为控制反转使用对象时&…

2024年C语言最新经典面试题汇总(1-10)

C语言文章更新目录 C语言学习资源汇总&#xff0c;史上最全面总结&#xff0c;没有之一 C/C学习资源&#xff08;百度云盘链接&#xff09; 计算机二级资料&#xff08;过级专用&#xff09; C语言学习路线&#xff08;从入门到实战&#xff09; 编写C语言程序的7个步骤和编程…

Structured Knowledge Distillation for Accurate and Efficient Object Detection

摘要 许多之前的知识蒸馏方法是为图像分类而设计的&#xff0c;在具有挑战性的任务&#xff08;如目标检测&#xff09;中失败。本文首先提出了知识蒸馏在目标检测中失败的主要原因是&#xff1a;&#xff08;1&#xff09;前景和背景之间不平衡&#xff1a;(2)缺乏对不同像素…

NLP 笔记:Latent Dirichlet Allocation (介绍篇)

1 问题介绍 假设我们有一堆新闻&#xff0c;每个新闻都有≥1个主题 我们现在只知道新闻的内容&#xff0c;我们希望一个算法&#xff0c;帮我们把这些新闻分类成主题人类可以根据每个每个文章里面的单词判断主题&#xff0c;那计算机怎么做呢&#xff1f; ——>LDA(Latent D…

一文详解Rust中的字符串

有人可能会说&#xff0c;字符串这么简单还用介绍&#xff1f;但是很多人学习rust受到的第一个暴击就来自这浓眉大眼、看似毫无难度的字符串。 请看下面的例子。 fn main() {let my_name "World!";greet(my_name); }fn greet(name: String) {println!("Hello…

HTML元素语义化补充之css函数(三)

文章目录 CSS中的函数css函数–varcss函数–calccss函数–blurcss函数–gradientlinear-gradient的使用 CSS中的函数 ◼ 在前面我们有使用过很多个CSS函数: 比如rgb/rgba/translate/rotate/scale等; CSS函数通常可以帮助我们更加灵活的来编写样式的值&#xff1b; ◼ 下面有几…