计网学习笔记九 Routing Fundamentals
在这一讲开始讲路由器的控制平面。简单介绍了routing,两个最小cost算法。
参考看的文章:
VC网络和数据报网络中路由的区别:Differences between Virtual Circuits and Datagram Networks
三种路由方式(静态、默认和动态):Types of Routing
Routing简介
network对象不同:datagram和vc网络不同的route方式
需要有的特点:效率,弹性(鲁棒)和稳定性(避免震荡)
下面的内容会围绕一个抽象的network来介绍routing的一些组成元素。
Performance criteria 性能指标
可以按照以下几种方式来评判一条路由的性能:
- 最小跳数:直接等于routing过程中经过的跳数,越少越好;
- 最小消耗:根据链路消耗来决定routing路径,决定链路消耗的方式有:
- 链路上的延迟,即可以将当前路由器interface上的queue长度作为评判标准;
- 吞吐量,即interface的传输速率;
- 还有丢包率、运营商发送价格等...
Decision time 什么时候决策
对数据报网络,每个packet到达的时候就查一下表,然后决策;
对VC网络,只在VC网络建立的时候做一次decision,即在那时已经把路由表建好。
Decision place 在哪里决策
集中式:用一个专门的节点算好,然后配置到其它节点中(类似SDN);
分布式:每个路由节点分布地计算路由表;
Info source 提供信息的源
例子:高德地图是中心化的,收集全部的数据后发回中心地方统一计算;
信息源可以来自本地信息、邻近的交换信息、network中的全部交换信息,交换信息具体有一条链路的负载、消耗、路由器存着的一些信息如distance vector
.(但并不是需要所有的信息,看路由算法,可能会挑其中的一类或两类)
Info update timing 更新频率
分以下几种:
- 周期性更新;
- 发生重大(主要)变化时才进行更新,如可以考虑链路负载,一分钟更新一次负载,然后更新;
- 手动更新。
Different Routing Strategies 路由策略
分两种:
- 集中式:即静态路由,由中心节点计算后进行路由表发放,如SDN;或者网管手动配置。
- 分布式:有三种:flooding、random和adaptive(自适应路由,也就是动态路由)。
下面对这些路由策略具体介绍。
Central Routing
- Single fixed route for each source to destination pair.
- Determine routes using a least cost algorithm.
- Routes re-config upon major changes in network topology.
固定的路由表,由中心节点使用路由算法生成。生成总表后分到各个节点中。(互联网最悠久,但不是最常用)
Flooding
例子:传感器网络可以采用这种路由方式。
不需要任何的网络信息。
收到就flooding一下,最终有一系列的复制样本到达目的地;
代价就是会创建太多复制样本,高度占用信道;
还有会出现一个环路问题:加入TTL就可以解决。
如图接收端总共收到四份。非常鲁棒!只要双方保证连通性,保证可以收到packet。而且至少有一个包可以走上最小路径。
可以用来在一开始时找最小路径,用一次flooding即可,在VC网络很常见。
Random Routing
每次发包选一个口,可以是随机的,可以是轮询的,或者对每个口加权;
不需要任何的network信息支持,对连通性很强的网络很适合(有很多很多邻居);策略就是使packet在网络中一直走,来回走,直到目的地;
在random的基础上可以进行一定的加权。如何加权?
cost的标准和上面的一样:
Adaptive Routing
也就是动态路由(dynamic routing
)。很重要!几乎所有分组交换网络都使用!
需要网络信息,根据路由算法来权衡获取信息的质量和获取开销;
可以糅合一些重要信息,如链路断啦、负载太高啦啥的,有助于拥堵控制。
下面给一个Adaptive Routing例子,演示了在单节点路由,只需本地信息不需要网络信息进行路由:
路由策略有两种:
直接根据队列长度进行路由选择;
设置指向目标节点的偏好量B;看节点对四个邻居的偏好量,选择最高那个进行转发;
如果对这些种类傻傻地分不清,可以看看文章:
Least Cost Algorithms
简单介绍完路由,让我们来细致一点看动态路由具体是怎样算出路由的最小消耗路径的。主要有两种算法,都是之前学过的,用来建立一个最小生成树的算法,所以这里也不详细描述算法过程。算法只是路由过程的一个抽象,具体规定要看具体的协议。协议下一节描述。
Dijkstra’s Algorithm
算出当前节点到其它节点的最短路径,从近到远生成;
最终节点1的路由表如下:
震荡问题
当链路的cost设置不好时会发生震荡问题,即不同链路上的流量负载反复变动,从一边跑向另一边,又从那边跑回来(流量不同,更改路由,导致流量又不同,又更改路由);
解决方法:链路代价更新不要和路由算法严格绑定。具体过程:RFC 7964
Bellman-Ford Algorithm
先看一跳信息,再根据一跳结果看两跳信息,再看三跳四跳...迭代次数至少为N-1,直到没有新的交换信息。
最终节点1的路由表如下:
好消息与坏消息
BF算法在路由的使用有句话:“好消息传得快,坏消息传得慢”。是什么意思呢?
在network里面,节点会对本地连接的链路进行监听,如果链路的cost改变了,那么更新路由信息,重新计算DV,如果DV改变了就要将其向邻居通告;所以对应会出现以下两种情况:
好消息
可以看出这种链路的改变是很好的,z接收到y的DV改变信息也能很快完成自身的调整;
坏消息
坏消息也被称为“count to infinity” 问题。如下,如果c(x,y)变为60而不是1,会发生很严重的情况!
y和z互相发消息更新,44次后才稳定下来;(因为y不知道z的DV是经过y它自己的)
解决方法就是,做点手脚,使用毒性逆转(poisoned reverse):告诉y我z到x的DV是无限。
但因为毒性逆转只看下一跳,所以在三个或以上节点的环路出现时不能根本上解决问题。见习题P11.b。
Dijkstra vs. Bellman-Ford
Dijkstra又称为link state路由算法,Bellman-Ford又称为distance vector路由算法。
对于LS来说:
- 每一条链路上的信息都要广播给整个网络上的路由器节点,也就是说牵一发而动全身;
- 每个路由器节点都有整个网络拓扑的信息(每个节点都用这拓扑来计算路由)
- 由于算法特性,链路上的cost不能设置为负数。
对于DV来说:
- 每个路由器节点存储的不是整个拓扑的信息,而是只需要维护其邻居节点的DV就行了;
- 自己的DV如果改变了,需要对其广播出去,让邻居知道好做路由调整;
- 是将一层层的DV广播出去;
两者的信息复杂度、算法收敛速度、鲁棒性比较如下:
Determine Link Cost 链路代价计算
ARPANET中的路由算法
ARPANET作为互联网雏形,路由算法的发展经过了三个阶段,不同阶段链路代价的标准也不同:
第一阶段使用的是DV路由算法:
第二阶段是LS算法:
到了第三阶段,因为震荡问题的出现,LS算法作了一点改进:在负载量高的链路上增加一个等待的步骤,等待一定的时间后再进行路由更新;并且对链路cost的标准做出了改变:
Calculate Link Cost
Link utilization:计算链路使用率
Leveling: 对过去的数据在一个时间窗口做一个平滑
计网学习笔记九 Routing Fundamentals的更多相关文章
- Networking && Internet 计网学习笔记一
Networking && Internet 计网学习笔记一 参考书籍: James F. Kurose, Keith W. Ross. 计算机网络-自顶向下方法 (7th). 机械工 ...
- 计网学习笔记二 Link Layer Service
在上一周的计网学习了network和Internet的总论.在这一周开始的未来几讲将集中在链路层link layer,并且会有相应的计网lab完成.在这一讲中,我们主要关注链路层提供的服务. 课程资料 ...
- 计网学习笔记五 wireless && mobile networks
老师把无线网络用一节课一遍过了-感觉没能学透,便课后自己总结,看书,找资料补充,把无线网络大概摸了个七七八八.虽然不算精细,但还能看!内容包括WLAN总概,WiFi-WLAN的实现,802.11规定的 ...
- 计网学习笔记三 MAC与LAN
在上一讲中,我们学习了链路层可以提供的服务:framing,link access,reliable delivery,error detection&correction.这一讲我们从lin ...
- 计网学习笔记六 Network Layer Overview
这节课开始进入了网络层的学习,讲述了网络层提供的功能,还有路由器内部是什么样子的,以及virtual circuit网络和datagram网络的一点比较. 网络层有什么作用呢?用一句话来说,就是需要负 ...
- 计网学习笔记七 IP protocol basic
在这一节讲了IP协议的基本内容:包括IPv4提供的操作.数据报在IPv4下是怎么样的结构.数据报是怎样切片发送的.IPv4的编址方式有什么--IPv6在下一节讲网络层协议簇时细讲. IPv4协议的具体 ...
- MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九
<Microsoft SQL Server 2008 MDX Step by Step>学习笔记九:导航结构层次 SQL Server 2008中SQL应用系列及BI笔记系列--目录索 ...
- 多线程学习笔记九之ThreadLocal
目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...
- python3.4学习笔记(九) Python GUI桌面应用开发工具选择
python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
随机推荐
- @Import 源码解析
转发请注明出处: @Import通过快速导入的方式实现把实例加入spring的IOC容器中:一般@EnableXXX注解是通过@Import实现具体的功能(@EnableXXX注解上加个@Import ...
- [转帖]SQL中 join 、in 、exists 使用场景和执行效率
https://www.jianshu.com/p/c825c9bf42c2 众所周知,在sql 中,join /in /exists 都可以用来实现,"查询A表中在(或者不在)B表中的记录 ...
- [转帖]CentOS7上systemctl的使用
https://www.cnblogs.com/yeyuzhuanjia/p/14676182.html CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,原来管理系 ...
- [转帖]最全MySQL锁讲解:页锁、共享锁、行锁、表锁、悲观锁、乐观锁
我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突),如何保证数据并发访问的一致性.有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,从 ...
- [转帖]egrep 正则表达式
https://www.cnblogs.com/ordili/p/9395735.html 一.功能 用正则表达式在文件或输入中搜索匹配的字符串,并打印出匹配的行.egrep匹配之前,会删除每行结尾的 ...
- [转帖]Strace + pstack发现耗时点
https://www.jianshu.com/p/10ea6fff562c 如何使用strace+pstack利器分析程序性能 本文摘抄自如何使用strace+pstack利器分析程序性能 程序说明 ...
- 简单定位占用最高CPU的java进程信息
公司里面一个应用不小心点击就会导致系统性能下降很明显. 性能组的同事定位到了, 我这里以学习的态度重现一下这个过程. 1. 问题再现 产品一个非常大数据量的帮助, 点击之后就会占用非常多的cpu 因为 ...
- redis 6源码解析之 object
redis对象作为redis存储的基本单元,对应redisDb->dict 中的dictEntry->key和dictEntry->val. 更全面的图谱 源码解析参见:object ...
- python+selenium+opencv验证滑块
我们在使用selenium爬虫的时候在登录时经常会遇到滑块验证码问题,导致登录受阻,正所谓万事开头难. 登录就登录不进去更别提往后的操作的.今天以登录京东后台来演示下如何破解滑块. 一.登录 首先我们 ...
- 【如何提高IT运维效率】深度解读京东云基于NLP的运维日志异常检测AIOps落地实践
作者:京东科技 张宪波.张静.李东江 基于NLP技术对运维日志聚类,从日志角度快速发现线上业务问题 日志在IT行业中被广泛使用,日志的异常检测对于识别系统的运行状态至关重要.解决这一问题的传统方法需 ...