★路由递归查询方法及相关图示【转载】

      
我们知道,路由查
找的过程是寻找数据包下一跳的过程!IP路由逐跳将数据包送往目的地。所谓的下一跳就是和自己直连的某台路由器的对应接口IP地址,这是合乎情理的理解,
然而IP路由提供了另外一种方式,即下一跳不必非要和自己直连,它可以忽略当前路由器“附近的拓扑”,直接告知相对较远方的拓扑,如下图所示:

  到达Server的下一跳是R2,到达R2的下一跳是R1...以此类推。协议栈
的路由查找逻辑在查找路由时,如果发现nexthop不是和自己直连的,那么就会将此nexthop作为destination再次按照上述逻辑查找路由
表直到查到和自己直连的nexthop或者完全失败为止。这种路由相当于把nexthop推向了远方。这种递归查找能带来什么好处呢?显然的,递归路由可
以是nexthop受到附近网络拓扑变化的影响最小化!针对必须使用静态路由的情况,合理的递归路由规划可以大大简化静态路由的维护工作量,当然如果你使
用动态路由,那就没有必要了,要知道递归路由在带来维护方便的同时,其代价是路由器增加了查找压力。以一个例子说明,试看如下拓扑:


  试想,如果到达R1,R2的链路均出现了问题,现在需要将N1,N2,N3的nexthop都切换到R7,你就需要同时修改这三条路由(在无法
实现路由汇总的情况下,更糟糕),然而如果我们已经知道到达N1,N2,N3都要经过R3,那么就可以配置N1,N2,N3的nexthop均为R3,顿
时在逻辑上绕开了问题链路,实际上,协议栈
的路由查找逻辑帮助管理员找到了一条到达R3的路,最终的nexthop物力上还是和R0直连的,递归查找的结束条件就是destination和R0直
连。在配置上,寻址3个网络的需求变成了寻址R3的需求,配置也简化了不少,你只需要配置一个默认网关即可,链路切换时需要更改的配置也少了很多。

  然而记住,递归路由并没有改变任何数据包到达目标网络的路径,它最终还是要落实到一个直连nexthop上,如果我们根据递归路由的配置反推,
那么就可以配置出一个非递归的“正常路由”,这个正常的路由配置也能解决上述的繁琐配置问题,因此递归路由某种程度上是一种懒人的做法。另外,递归路由的
使用有一个要点,那就是你必须对整个网络拓扑比较熟悉,之所以要使用递归路由,目的是绕开那些经常变动的链路,而作为静态路由,链路变动就意味着所有相关
的路由都要重新配置,使用递归路由可以使配置工作量减小,是否使用递归路由的一个权衡点是:如果到达目标网络的链路在途中不能汇聚成比目标网络数量更少的
链路,递归路由就没有什么意义。

  归于实际,我发现Windows是有递归路由配置功能的,当然Cisco就
更别说了,可是Linux没有,说它没有还真是有一半,竟然没有实现完,空留一个CONFIG_IP_ROUTE_PERVASIVE宏,最可悲的是,竟
然在iproute2里面有一个NHFLAGS := [ onlink | pervasive
],这个pervasive是最可恶的。Linux总是这样,内核的实现与否和用户态程序实现与否总是不一致!!

时间: 2024-11-09 06:29:02

★路由递归查询方法及相关图示【转载】的相关文章

★路由递归查询方法及相关图…

       我们知道,路由查 找的过程是寻找数据包下一跳的过程!IP路由逐跳将数据包送往目的地.所谓的下一跳就是和自己直连的某台路由器的对应接口IP地址,这是合乎情理的理解, 然而IP路由提供了另外一种方式,即下一跳不必非要和自己直连,它可以忽略当前路由器"附近的拓扑",直接告知相对较远方的拓扑,如下图所示: 到达Server的下一跳是R2,到达R2的下一跳是R1...以此类推.协议栈 的路由查找逻辑在查找路由时,如果发现nexthop不是和自己直连的,那么就会将此nexthop作为

★路由递归查询方法及相关图…

       我们知道,路由查 找的过程是寻找数据包下一跳的过程!IP路由逐跳将数据包送往目的地.所谓的下一跳就是和自己直连的某台路由器的对应接口IP地址,这是合乎情理的理解, 然而IP路由提供了另外一种方式,即下一跳不必非要和自己直连,它可以忽略当前路由器"附近的拓扑",直接告知相对较远方的拓扑,如下图所示: 到达Server的下一跳是R2,到达R2的下一跳是R1...以此类推.协议栈 的路由查找逻辑在查找路由时,如果发现nexthop不是和自己直连的,那么就会将此nexthop作为

AngularJS基于ui-route实现深层路由的方法【路由嵌套】_AngularJS

本文实例讲述了AngularJS基于ui-route实现深层路由的方法.分享给大家供大家参考,具体如下: 1.前面我们通过了简单的ng-route实现了简单层次的路由,对于深层次的路由,我们可以通过ui-route来实现. (1)ng-route的局限性:一个页面无法嵌套多个视图,也就是说一个页面只能有包含一个页面一个控制器的切换. (2)ui-route的改进:在具有富客户端的单页应用中,要在一个页面中呈现不同的视图,我们可以通过ui-route实现路由的嵌套. 2 . ui-route的使用

htaccess-如何实现php路由分发 方法变量自定义参数名称以及个数

问题描述 如何实现php路由分发 方法变量自定义参数名称以及个数 比如有一个方法 public function a($b,$c,$d){ echo $b,$c,$d; } 要输入的链接是.......&b=1&c=2&d=3 然后输出123 这个该在.htaccess怎样写

ci框架[2.x]版本 设置了路由,方法里面用segment怎么接收参数

问题描述 ci框架[2.x]版本 设置了路由,方法里面用segment怎么接收参数 配置文件里面路由规则是默认的,如下: $config['uri_protocol'] = 'AUTO'; 配置路由规则如下: $route['special/(d+).html'] = "home/special_detail/$1"; 访问地址:http://www.test.cn/special/21.html 在控制器里面接收参数id: function special_detail(){ $id

C#启动windows服务方法的相关问题分析_C#教程

C#启动windows服务的方法都是什么呢?C#启动服务类型为Disabled的windows服务会遇到什么样的问题呢?那么本文就向你介绍C#启动windows服务的方法的相关内容. C#启动windows服务的方法是什么呢?来让我们开始吧: C#启动windows服务的由来:我们知道, 在C#代码中启动一个已经存在的windows服务,我们可以用这样的代码来完成: 复制代码 代码如下: //ACPI is an example of service name System.ServicePro

Ajax发送和接收二进制字节流数据的方法_AJAX相关

HTML5 Ajax 2.0标准中,增强了Ajax的许多功能,包括发送FormData数据,上传数据进度条等诸多功能.但实际上,Ajax可以字节发送二进制数据. 发送二进制数据 var oReq = new XMLHttpRequest(); oReq.open("POST", url, true); oReq.onload = function (oEvent) { // Uploaded. }; var blob = new Blob(['abc123'], {type: 'tex

adsl路由设置方法

小型企业办公网络采用ADSL共享上网经济实惠.升级ADSL Modem是一项技术性很强的工作.如果稍有不慎,就可能导致设备不能正常工作,因此大家在动手之前请三思而后行! 通常的做法是使用集线器配合代理服务器软件,利用一台电脑作为代理服务器,其他电脑通过这台代理共享ADSL上网. 不 过这种共享上网的方式,随着时间的推移出现了不少弊病,最明显的就是如果代理服务器不开机,其他电脑都无法连接Internet.那么能否绕过代理服务器,直接通过共享的ADSL Modem实现对Internet的访问呢? 有

非窗口类中使用定时器的方法及相关知识的介绍

本文代码运行效果图如下: 摘 要:本文主要通过一些简单的例子,介绍了如何在Visual C++的窗口和非窗口类中使用定时器.重点介绍了如何用静态成员函数和静态数据成员在非窗口类中使用定时器,同时,又介绍了与定时器相关的知识,例如回调函数,C++类中的静态成员,以及模板类中的映射类等. 关键字 C++ 类 定时器 静态函数 静态成员函数 静态数据成员 回调函数 映射类 摘 要:This page introduce how to use timer in window class and none