静态路由中的递归路由原理与冗余备份链路的实现

如图1-4的拓扑中, R1去往R4的10.1.1.0/24网段,可以配置静态路由并以R2的fa0/1接口的IP地址为下一跳,但当R2的fa0/1端口为down时,需手动把静态路由切换到R3的fa0/1接口的IP地址,反之亦然。

图1-4

当链路数量很大时,在静态路由中关联直连网段中的下一跳地址,配置工作将非常巨大。此时可以在静态路由中关联非直连网段中的下一跳地址。例如当R1要访问R4上的直连网段10.1.1.0/24时,可以将R1的静态路由直接关联R4的fa0/0接口的IP地址 (ip route 10.1.1.0 255.255.255.0 fa0/0 200.2.2.4)。但是,R1上没有去往200.2.2.0/24网段的路由,所以关联200.2.2.2为下一跳地址的去往10.1.1.0/24的静态路由是无法使用的。

基本环境配置与分析

R1

conf t

hostname R1

int fa0/1

ip add 100.1.1.1 255.255.255.0

no shut

exit

ip route 10.1.1.0 255.255.255.0 fa0/1 200.2.2.4        /配置去往10.1.1.0/24网段的路由并直接关联R4的fa0/0接 

                                          口的IP地址

R2

conf t

hostname R2

int fa0/1

ip add 100.1.1.2 255.255.255.0

no shut

int fa0/0

ip add 200.2.2.2 255.255.255.0

no shut

exit

ip route 10.1.1.0 255.255.255.0 fa0/0 200.2.2.4      /配置去往10.1.1.0/24网段的静态路由

R3

conf t

hostname R3

int fa0/0

ip add 200.2.2.3 255.255.255.0

no shut

int fa0/1

ip add 100.1.1.3 255.255.255.0

no shut

exit

ip route 10.1.1.0 255.255.255.0 fa0/0 200.2.2.4

R4

conf t

hostname R4

int fa0/0

ip add 200.2.2.4 255.255.255.0

no shut

int lo0

ip add 10.1.1.1 255.255.255.0

no shut

exit

ip route 1.1.1.0 255.255.255.0 fa0/0 200.2.2.2        /配置去往1.1.1.0/24网段的静态路由

查看R1路由表

从路由表中可以得知,R1想要发送报文给10.1.1.0/24网段,则先需要把报文发给下一跳地址200.2.2.4,而下一跳地址所在的网段不与R1直连且R1没有去往200.2.2.0网段的路由条目。R1目前只知道想要把报文发送给下一跳地址所在的200.2.2.0网段需通过fa0/1接口发出。由于R1的fa0/1是在MA(多路访问)网段,当前发给哪一个下一跳地址可以到达200.2.2.0网段还处于未知状态,所以这时候路由器会发送ARP请求以获取200.2.2.4的MAC信息。

在R1,R2和R3上开启debug arp,以验证ARP请求是否从R1发出并分别被R2和R3成功接收:

在R1上ping 10.1.1.1

从图1-5可以得知,结果R1无法ping通10.1.1.1,但是伴随着ping包R1发送了ARP请求。原因是R1要访问目的地址10.1.1.1需要先拥有访问下一跳地址200.2.2.4所在的网段路由条目,而R1没有去往200.2.2.0/24网段的路由,所以需要发送ARP请求以获取下一跳地址200.2.2.4所对应的MAC地址:

图1-5

由于思科路由器默认情况下所有的接口是开启代理ARP的,所以R2和R3都能接收到来自于R1的ARP请求。疑问:在此环境中,R2和R3是否会给R1返还ARP应答?

分析:代理ARP满足下列条件时才会生效

  • 当一个路由器的接口收到ARP请求时,请求者和被请求者不在同一个网段中(R1的f0/1接口和R4的f0/0接口不在同一网段中)
  • 收到ARP请求的路由器需要拥有去往源和目的网段的路由条目 (R2和R3同时拥有100.1.1.0/24网段和200.2.2.0/24网段的路由条目)
  • 接口的代理ARP功能为开启状态

结论:R2和R3都会给R1返还ARP应答,且用自己的fa0/1接口的MAC地址为R1作出相对的应答。

查看R2和R3的debug arp信息以验证:

从图中可以看出R2和R3分别用自己的fa0/1接口的MAC地址对R1所发出关于200.2.2.4的ARP请求作出应答。

查看R2和R3的fa0/1接口的MAC信息以验证以上的结论:

从接口的基本信息中发现R2和R3的fa0/1接口的MAC地址分别对应其ARP reply中所使用的MAC地址。

在跨网段的通信的环境中,当一台PC收到一条ARP应答,PC将无条件地接受此ARP应答且加入ARP缓存列表中,然后PC就利用ARP表项发送数据包给其他节点。

根据R1的debug信息,R1确实有收到ARP应答

但是R1收到的ARP应答却被过滤,根据其debug输出结果原因为wrong cable,其实际原因是对于PC终端,如果收到了路由器传递的Proxy-ARP Reply,则该PC会无条件信任这个Reply,并且将其加入ARP表中。

而对于路由器,如果该设备收到了Proxy-ARP Reply, 则该路由器会优先判断该Reply中应答者IP地址所在的网段是否可达,如果是则接收,如果不是则直接丢弃。

虽然该ARP是由R2和R3代替R4应答R1,但应答者的源地址是200.2.2.4。由于R1没有去往200.2.2.0/24网段的路由条目,所以R1直接把收到的所有ARP应答丢弃。

假设R1能够接收由R2或R3发来的ARP Reply报文并加入其ARP表中,那么R1将可以ping通10.1.1.1

换言之,R1如果要能够使用ip route 10.1.1.0 255.255.255.0 fa0/1 200.2.2.4这条静态路由条目,那么首先要保证R1能够信任由R2和R3发送的ARP Reply并且加入ARP表。因为当R1发包给目的网段时,数据包将先发给R2或者R3,而R2和R3拥有去往下一跳地址所在网段的路由条目,可以帮助R1把报文转发至R4。

要让R1可以信任由R2和R3发来的ARP Reply,只有在R1上手工添加一条去往200.2.2.0/24网段的静态路由。

在R1上配置

ip route 200.2.2.0255.255.255.0 fa0/1 100.1.1.2

加了这条去往200.2.2.0/24网段的静态路由以后,R1就可以信任并接收R2和R3发来的ARP应答且加表。

验证:

在R1上ping 10.1.1.1

由于R1要发包给目的网段10.1.1.1之前需要先把数据包发送给下一跳地址200.2.2.4,但是R1没有200.2.2.4的ARP信息,所以R1先要发送ARP请求以获悉200.2.2.4的MAC地址,因此R1收到两条ARP应答,一条来自于R2,另外一条来自于R3。R1会把最后收到的ARP条目将加入缓存表,所以R1将会把下一跳地址200.2.2.4所对应的R2的fa0/1接口的MAC地址或者R3的fa0/1接口的MAC地址加入ARP表,查看R1的ARP缓存:

从R1的ARP缓存表中得知,R1收到的最后一个ARP应答包来自R2 (因为200.2.2.4所对应的MAC地址属于R2的fa0/1接口),当R1再次使用静态路由ip route 10.1.1.0 255.255.255.0 fa0/1 200.2.2.4发包时,交换机将一直把从R1的fa0/1接口发出的报文转发给R2,再由R2转发给R4。

查看R1的路由表:

静态路由200.2.2.0/24 [1/0] via 100.1.1.2 FastEthernet0/1是告知路由器怎样发包给静态路由10.1.1.0所关联的下一跳地址,如果去往10.1.1.0网段的静态路由 (10.1.1.0 [1/0] via 200.2.2.4, FastEthernet0/1)称为主路由,则静态路由200.2.2.0/24 [1/0] via 100.1.1.2FastEthernet0/1就是为了解析主路由的递归路由

递归路由的主要作用就是为了让R1收到关于去往目的网络的下一跳地址的ARP应答时认为该ARP应答是可信任的。但是递归路由中所关联的下一跳地址并不影响R1发送报文给10.1.1.0/24目的网络的路径选择。正真影响R1去往R4上10.1.1.0/24网段的路径选择的是ARP表中所解析到的关于主路由中下一跳地址200.2.2.4所对应的ARP表项。换言之,如果收到的ARP Reply是对应R2的fa0/1接口的MAC地址,则数据包将往R2转发。如果收到的ARP Reply是对应R3的fa0/1接口的MAC地址,则数据包将往R3进行转发。当R1发送ARP请求时,R2和R3都会进行应答,R1将会把最后收到的那条ARP Reply条目加入ARP缓存表中。

结论:R1发包给主路由的下一跳地址是基于ARP表项而非递归路由中的下一跳。ARP条目存活时间为4小时。

验证:R1主路由10.1.1.0 [1/0] via 200.2.2.4 FastEhternet0/1的路径选择是基于ARP表项而非递归路由的下一跳地址。

关闭R2的fa0/0和fa0/1接口:

int fa0/0

shutdown

int fa0/1

shutdown

此时在R1上ping 10.1.1.1是无法ping通的,原因是R1去往10.1.1.0/24网段的路由走的是R2这条路径,查看R1的ARP表项:

之前从R2接收到的对应200.2.2.4的ARP条目依然存在。

现在先在R1上删除静态路由ip route 200.2.2.0 255.255.255.0 fa0/1 100.1.1.2,然后再添加一条以100.1.1.3为下一跳的去往200.2.2.0/24网段的静态路由,以验证R1发往R4直连的10.1.1.0/24网段的路径选择是否与递归路由中下一跳有关。

R1配置

ip route 200.2.2.0 255.255.255.0 fa0/1 100.1.1.3

然后再次在R1上ping 10.1.1.1

结果是R1并没有将去往10.1.1.0/24网段的数据包转发给R3,ping失败。

疑问:是否是因为R4没有在去往100.1.1.0/24网段的静态路由中关联下一跳地址200.2.2.3,造成R4无法回包给R3

为了公平起见,在R4上新增一条去往100.1.1.0/24的静态路由,并关联200.2.2.3位下一跳地址:

ip route100.1.1.0 255.255.255.0 fa0/0 200.2.2.3

在R4上开启debug ip packet detail和debug ip icmp, 并且再次ping 10.1.1.1

如果在R4上没有弹出任何debug报文信息,则上述结论是正确的:

R4没有收到任何报文,则说明即使R1上的递归路由下一跳指向R3的fa0/1的IP地址,但由于ARP表项中下一跳地址200.2.2.4仍然对应R2的ARP Reply条目(即R2的fa0/1接口的MAC地址),所以R1仍然会选择通过R2转发报文至目的网段。因此静态路由中的递归路由的下一跳地址不会影响主路由的路径选择。

静态路由的链路冗余实例:以图1-4为网络环境,利用递归路由做R1去往10.1.1.0/24网段的冗余备份链路,当R2的链路为down,自动切换至R3。反之亦然。

分析

ARP请求的发送原理:一个路由器中如果已经拥有目标IP地址所对应的ARP表项,除非该表项消失,否则该路由器将不会再为该目标IP地址做ARP请求。

如果R1去往10.1.1.0/24网段所关联的下一跳IP是R2的f0/1接口的IP地址,即使R2的接口down了,也不会影响R1任何路由信息的改变。只要静态路由所在的R1路由器的出站接口fa0/1为up,该路由条目就会依然存在。即R1的主路由,递归路由和ARP表项都不会发生变化,R1会根据原始的ARP表项发包,将数据包发给R2。

即使之前将去往目的网段10.1.1.0/24的下一跳地址改为R3的fa0/1的IP地址100.1.1.3,R1仍然不会把数据包转发给R3。

只有当ARP条目失效(4小时以后),R1删除之前接收到的从R2发来的关于去往10.1.1.0/24网段的下一跳地址200.2.2.4对应的ARP表项。R1才会再次针对主路由重新开始发送ARP请求,由于R2已经down,所有只有R3回复ARP请求,R1将R3所发送过来的ARP Reply加入ARP表,此时才会将去往目的网络10.1.1.0/24转发给R3。R1的ARP表项中200.2.2.4所映射的MAC地址将会是R3的fa0/1接口的MAC地址。

要等待长达4小时才能实现路径切换,在现实应用环境中是无法接受的。

由于递归路由中的下一跳地址不影响主路由的选路,而影响选路的仅仅是ARP表项(使用最后接收到的ARP应答条目,若最后收到的是R2的ARP Reply,则往R2转发数据包。如果最后收到的是R3的ARP Reply,则往R3转发数据包)。为了加快冗余备份链路的切换,可以通过缩短ARP的失效时间来实现,在R1上配置如下:

(为了提高论证的准确性,最好将R1的递归路由下一跳仍然改为100.1.1.2:
ip route 200.2.2.0 255.255.255.0 fa0/1 100.1.1.2)

int fa0/1

arp timeout 10       /设置ARP条目在ARP表中失效时间为10秒

10秒以后查看R1的arp表

此时200.2.2.4所对应的arp表项已经消失。

在R1上打开debug arp,并且ping 10.1.1.1,将会再次触发R1发送关于200.2.2.4的ARP请求。由于此时R2已经down,所以R1只会收到R3发来的ARP Reply。

注:在边缘路由器R4上把ARP失效时间也改为较小的值,因为R4也需要依赖ARP缓存表回复R1的ping包。

查看R1的ARP表:

此时R1的ARP表中,200.2.2.4所对应的MAC地址为R3的fa0/1接口的MAC地址,且R1能够ping通10.1.1.1。

注:由于在GNS3的模拟环境中偶尔会出现BUG,导致路由器的ARP缓存表无法正常更新。此时,只需将所有的路由器配置进行保存(在特权模式下使用wr命令),然后在GNS3中重启所有的设备,再进行ping测试并观察ARP表项的变化。

总结:

要提高静态路由的冗余性和灵活性,在递归路由中不需要关联任何的下一跳地址。例如R1的主路由是ip route 10.1.1.0 255.255.255.0 fa0/1 200.2.2.4, 为了解析200.2.2.4, R1的递归路由只需写成ip route 200.2.2.0 255.255.255.0 fa0/1即可。

只要将路由器的ARP失效时间改为较小值,不管之前主路由使用是哪一条路径发包,只要该发包路径down了之后,备用路径将根据之前设定的ARP失效时间切换过去,这就实现了高效的静态路由倒换。

时间: 2024-08-25 15:32:02

静态路由中的递归路由原理与冗余备份链路的实现的相关文章

CCNP路由实验之七 动态路由之BGP

?? 动态路由协议可以自动的发现远程网络,只要网络拓扑结构发生了变化,路由器就会相互交换路由信息,不仅能够自动获知新增加的网络,还可以在当前网络连接失败时找出备用路径.根据是否在一个自治域内部使用,动态路由协议分为内部网关协议(IGP)和外部网关协议(EGP).这里的自治域指一个具有统一管理机构.统一路由策略的网络.自治域内部采用的路由选择协议称为内部网关协议,常用的有RIP.EIGRP.OSPF.IS-IS:外部网关协议主要用于多个自治域之间的路由选择,常用的是BGP和BGP-4.在一个路由器

高级静态路由之递归路由(三)

路由的递归查询对静态路由来讲,对于动态路由就没必要了.之所以要使用递归路由,目的是绕开那些经常变动的链路,可以使静态路由的配置工作量减小. 一.实验拓扑 二.实验说明 1.R1若想跟R4通信,R1必须拥有去往R4的静态路由,若简单的拓扑,若干条静态路由即可,若去往R4的链路有很多条,或者经常变动,则需要管理员经常写大量的静态路由来保证通信.此时为了减少工作量,就可以使用递归路由. 2.递归路由的实现就是静态路由直接关联目标网段路由器的入站接口的IP地址. 3.实现非对称路由.R1的icmp ec

静态递归路由

静态递归路由目的主要应用与以下场景,当网络还不是特别大,配置量还不是特别复杂的时候,在如下R1路由器上写一条去往R4的F0/0的静态路由,当写下如下配置过程后路由器一般是执行以下流程(猜测的)?1. 当R1去往192.168.1.0的业务,查看下一跳地址是否在本地RIB中有该条路由,包括直连路由?2. 在RIB中查找172.16.100.4是否在本地RIB中存在, 查看本地RIB发现一条172.16.100.0/24静态路由,下一跳为10.1.12.2?3. 继续在本地RIB中查找10.1.12

.NET/ASP.NET Routing路由(深入解析路由系统架构原理)

出处:http://www.cnblogs.com/wangiqngpei557/ 阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4.1UrlRoutingModule 对象内部结构 4.2RouteBase.Route.RouteCollection.RouteTable 路由核心对象模型 4.3RouteValueDictionary.Rou

【转】.NET/ASP.NET Routing路由(深入解析路由系统架构原理)

阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4.1]UrlRoutingModule 对象内部结构 4.2]RouteBase.Route.RouteCollection.RouteTable 路由核心对象模型 4.3]RouteValueDictionary.RouteData.RequestContext 路由数据对象模型 4.4]IRou

NET/ASP.NET Routing路由(深入解析路由系统架构原理)(转载)

NET/ASP.NET Routing路由(深入解析路由系统架构原理) 阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4.1UrlRoutingModule 对象内部结构 4.2RouteBase.Route.RouteCollection.RouteTable 路由核心对象模型 4.3RouteValueDictionary.RouteData

.NET/ASP.NET Routing路由(深入解析路由系统架构原理)http://wangqingpei557.blog.51cto.com/1009349/1312422

阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4.1]UrlRoutingModule 对象内部结构 4.2]RouteBase.Route.RouteCollection.RouteTable 路由核心对象模型 4.3]RouteValueDictionary.RouteData.RequestContext 路由数据对象模型 4.4]IRou

IT菜鸟之路由器基础配置(静态、动态、默认路由)

路由器:连接不同网段的设备 企业级路由和家用级路由的区别: 待机数量不同(待机量) 待机量:同时接通的终端设备的数量 待机量的值越高,路由的性能越好 别墅级路由,表示信号好,和性能无关 交换机:背板带宽(专业术语)是内部的传输速度 网关:是用来处理不同网段数据通信 网关地址一般是路由器的地址 no 任何生效性的操作都可以使用no使其失效 rip Routing Information Protocol 路由信息协议 destination host unreachable 目标主机不可达 sho

.NetCore MVC中的路由(2)在路由中使用约束

.NetCore MVC中的路由(2)在路由中使用约束 0x00 路由模板中的约束 在配置路由模板时,除了以静态字符和变量的形式外,还可以通过配置对变量进行约束.实际如果不嫌麻烦的话在路由到的Action中对变量进行检查也是一种方法,不过对于变量的通用的约束当然是放在路由层面更加合适.而且这样做会简化Action的代码,使Action更加专注于自身业务,符合AOP的思路.这篇文章主要介绍路由模板中的约束. 0x01 在路由模板中使用约束 在路由模板中使用约束是很简单的,如下所示: {contro