1 验证试验

1.1 实验目的

卷一中,讲到静态路由时,对于出接口与下一跳地址联合使用进行配置的情况有这么一句描述:当出接口失效时,即使下一跳地址通过路由递归查询可达,关于该目标的路由信息依然会删除。因此做本实验目的是为验证此话的正确性。

1.2 实验拓扑

1  实验拓扑

1.3 实验设计

相关链路信息如拓扑中所示,根据拓扑与实验目的,设计在R1上进行验证,对于网络中静态路由配置的设计如下:

Ø  R1去往R3lo1IP3.3.3.3/24)使用下一跳地址192.168.1.194,并验证其可达性及数据转发途径,此步用于验证下一跳地址可达。R1去往R3lo0联合使用s1/1接口及下一跳地址192.168.1.194,并检查数据发送途径。接着再关闭 s1/1接口,查看路由表情况。

Ø  R1去往其余非直连网段的路由使用下一跳地址192.168.2.2

Ø  其余路由器的静态路由可随意配置,保证全网可达即可。

1.4 实验过程

实验相关配置略去。

首先,验证下一跳192.168.1.194的可达性,并检验此时数据转发路径。通过ping 3.3.3.3来检查。此时,先查看一下R1的路由表,如图2所示。

2表明,此时R1去往3.3.3.0/24网络的下一跳是192.168.1.194,去往10.1.0.0/16网络的下一跳是192.168.1.194,并且其下一跳为s1/1,去往其余非直连网段的下一跳均为192.168.2.2

 

2  R1路由表

 

 

接着,执行ping 3.3.3.3验证下一跳可达性,如图3所示。

 

3  R1上执行ping 3.3.3.3

 

因为与3.3.3.3对应的下一跳地址为192.168.1.94,此时能ping通,意即下一跳地址也是可达的。同时对R1f0/0抓包如图4所示。

 

4  R1 f0/0接口抓包图

 

 

    由图中可以看出,f0/0接口只有ICMPping请求信息,却无ICMPping应答信息,结合图3及本实验的拓扑可知,ICMPping应答消息由R1s1/1接口接收到。因为3.3.3.3的下一跳为192.168.1.194,路由器经过递归查询,发现去往192.168.1.192/27网络的下一跳地址为192.168.2.2,故使用f0/0将数据发出;对于其他路由器,由于进行静态配置时均考虑优选具有最小cost的路径,故在返回ping应答时使用192.168.1.64/27数据链路。

然后,执行ping 10.1.5.1,验证目标可达性,如图5所示。

5  R1上执行ping 10.1.5.1

 

    由图5可知,10.1.5.1对于R1是可达的。从路由表中可发现,对于去往该目标的数据,对应的出接口为s1/1,而下一跳地址为192.168.1.194。但经分析发现,去往下一跳192.168.1.194将使用下一跳192.168.2.2,即使用出接口f0/0。故此时,在进行数据发送时该如何选择?

 

6  R1 s1/1口抓包

 

    由图6可发现,此时路由器选择了出接口地址发出数据。那么当R1s1/1接口发生故障时,将会是设么情况?

最后关闭 R1s1/1接口,查看路由表情况,如图7所示。

 

7  关闭R1s1/1接口后的路由表

   

由图7可发现此时,虽然下一跳地址192.168.1.194经过递归查询仍然可达,但是关于10.1.0.0/16网络的路由信息依然被删除,这也验证了卷一中所述内容。

2 改进实验

为验证书中所述的那句话,本实验至此已经完成实验目的。但是这其中还有很多值得思索的地方。

首先,就是为何要存在这么一种静态路由的配置方式?留意一下上面的验证实验,就会发现下一跳地址192.168.1.194的设定显得相当鸡肋,因为上述实验的重心全围绕在R1的接口s1/1上,由实验反馈的结果也可发现,无论是否存在此下一跳,去往R3环回0的数据总是基于出接口的,意即联合使用与单独使用出接口根本没有区别。这让我很怀疑,因为不可能会存在如此一条鸡肋的命令,因此我又仔细阅读了一下TCP/IP中的内容,发现了这么一句话:“减少查表”。经本人仔细思索后发现,对于本实验,原拓扑的设计存在一定缺陷,某些地方其实应使用以太网,因此本人修改了一下拓扑,并进行了进一步的改进实验。

2.1 深入分析

在开始改进实验前,首先要对原理进行相关的分析,也就是那句“减少查表”。

路由器里最基本的两张表是“路偶表”和“MAC地址缓存表”,因此,可以从这两张表上入手来理解“减少查表”这句话。

由“10.4.6.0/24 [1/0] via 192.168.2.2”这条路由来说,去往10.4.6.0/24网络使用下一跳地址192.168.2.2。那么对于路由器来说,192.168.2.2这个地址又如何到达?因此再次查路由表,发现192.168.2.2是自己的直连网络(意即知道使用哪一个出接口),而且是以太网类型,因此要去查192.168.2.2MAC地址,查到之后封装数据并发送。那么对于“10.1.0.0/16 [1/0] via 192.168.1.194serial1/1”这条路由,先假设其仍要查ARP表,则从该语句中即可获知其出接口为serial1/1,下一跳地址为192.168.1.194,由此便可直接查与192.168.1.194相对应的MAC地址(实际情况中串线不需查找)。和只用出接口的情况相比,就省去了一次路由查询的步骤,这也就是所说的“减少查表”。

现根据以上分析,对实验拓扑进行稍微修改,来验证上述推理。

2.2 实验拓扑

8  修改后实验拓扑图

2.3 实验设计

    实验设计与1.3中相同,不同的仅为拓扑中的线缆类型。

2.4 实验过程

    R1相关的ARP缓存信息及路由表信息,如图9所示:

 

9  R1相关信息

 

从图9中路由表可看出其192.168.1.64/27192.168.2.0/24两个直连网段为以太网,且192.168.1.66192.168.2.2两个地址均作为某些网络的下一跳地址出现在路由表中,故ARP缓存中维护了相关的信息。

如图9,首先ping 3.3.3.3,成功,这验证了R1-R4-R2-R3路径的可用性。然后ping 192.168.1.194,也成功,但是在ARP缓存中却发现了关于192.168.1.194的条目,而其状态为Incomplete。按理说,缓存状态为Incomplete时,该条目是不可被使用的,也就意味着ARP缓存表明现在192.168.1.194这个地址目前是不可达的,但是实际情况是现在192.168.1.194是可达的,这与ARP缓存中表明的信息是矛盾的。这个问题就要回归到图9中的路由表中了,查看路由表我们可发现对于192.168.1.194来说,它的下一跳是192.168.2.2,于是再查路由表发现192.168.2.2在直连的以太网网络中,因此要查关于192.168.2.2MAC地址,这即是说查完路由表后发现192.168.1.194其实不在直连网络中,去往该目的是需经过路由器R4代理的,因此它不会使用ARP中关于192.168.1.194的缓存条目,所以ping是可以成功的。

这也说明了一点,数据转发先进行路由匹配,一直匹配到直连网络为止,在路由匹配完成之前,不会理会二层表中的信息。由此,也一定程度上解释了为何图1010.1.5.1无法ping通。

 

10  ping 10.1.5.1

 

对于图10中现象,另一点需要知道的是,在联合使用出接口与下一跳地址的情况下,虽然该条目仍然标记为“S-静态路由”,但是路由器会将其以直连的方式处理,因为在该路由条目中存在出接口的信息,所以对于10.1.5.1,由于其接口类型为以太网,因此需要查找下一跳192.168.1.194对应的MAC地址。而ARP缓存中指出192.168.1.194是一条“不完全”的条目,因此该条目不可用,故10.1.5.1不可达。

但是当在R1F0/0口上进行抓包时,是接到了关于192.168.1.194ARP应答的,如图11

 

11  R1F0/0接口收到的ARP应答

 

既然接收到了ARP应答,一般来说是可以形成“完全”的ARP缓存条目的,但是ARP缓存中却一直标记为“不完全”。于是本人打开了debug功能,查看具体是何原因,如图12所示。

如信息中所示,路由器先创建了一条不完全的条目,然后发出了ARP请求,随后接收到了R2给定应答,然后该应答被过路掉,原因是“wrong cable”,本人理解为“错误的接口”,也就是说路由器认为192.168.1.194不在F0/0接口上,所以不能形成完全的条目。

 

12  R1 debug信息

 

实际情况也是如此,192.168.1.194的路由是指向F4/0接口的,但是本人很疑惑路由器作出此判断的依据。

对于ping 192.168.1.194,第一次查询路由表找到了下一跳,第二次查询路由表找到了出接口F4/0,第三次查询找到了F4/0出接口上的下一跳MAC,所以数据发送成功。

对于ping 10.1.5.1,第一次查询路由表就找到了下一跳及出接口F0/0,然后需要获知下一跳的MAC地址,便发查询,也收到应答。在这整个过程中,能指示出下一跳接口冲突的也就在路由表中,去往10.1.0.0/16告诉192.168.1.194是与F0/0对应的,192.168.1.192/27则显示他是与出接口F4/0对应的。但关键问题是在对10.1.0.0/16进行路由查询的时候,根本用不着对下一跳192.168.1.194再进行一次路由查询(出接口与下一跳联合使用的目的就是减少查询),因此路由器也就理应不知道使用了错误的接口,也就是说路由器判断“wrong cable”的依据不应该是来自于与路由表,可能是由于某些其他的机制及算法做出了此判断。

这个问题我暂时仍未想通,留待日后解决,也欢迎同行们给予指点。

 

另外,关于下一跳MAC地址的维护问题,192.168.1.66192.168.2.2两个下一跳地址的MAC地址信息是自动维护的,然而对于192.168.1.194,当CEF功能打开时,路由器会自动发送192.168.1.194ARP请求,如图13,但是当CEF功能关闭时,只有在使用到该条路由条目时,才会触发192.168.1.194ARP请求。关于CEFARP缓存之间的关系,也留待以后学习。

 

13  打开CEF时自动维护192.168.1.194MAC信息

 

13还说明了另外一个问题,仔细观察可发现其没有了192.168.1.192/27的路由,换句话说就是192.168.1.192/27网络不可达,也就是下一跳192.168.1.194不可达,但是关于10.1.0.0/16的路由条目依然存在,这说明当出接口和下一跳地址联合使用时,当下一跳地址不可达时是不会删表的。

 

下面,实验继续,先将192.168.1.192/27的路由调整一下,指向下一跳192.168.1.66,意即使用F0/0接口,如图14

 

14  经调整后R1路由表及ARP缓存

 

经过调整之后,可发现10.1.5.1可以ping通了,ARP缓存中192.168.1.194也形成了完全的ARP条目。

 

2.1的分析中,已经得出一个初步的结论,那就是出接口与下一跳联合使用时用于以太网,同时下一跳地址要是直连网段内地址,否则无任何意义。但是TCP/IP中还说了一句“路由递归查询”,虽然查出接口这一过程就是在进行路由递归查询,但是这很常见,有些简单,故我增加了这个路由递归查询的过程,将它做的复杂一些,为192.168.1.66这个下一跳做了一个主机路由。如图15

 

如图15所示,关于192.168.1.66的主机路由被加入到了路由表中,同时进行ping 192.168.1.66的操作并开启相关的debug信息。可发现,去往192.168.1.66的数据没有使用路由表中的那条直连信息,而是选择了绕远路,使用主机理由。这说明对于被加入路由表中的路由条目,进行匹配的时候是不考虑该条目使用的是何协议,是否是直连,只进行最长匹配规则。如果对于相同的目标有不同协议的路由条目,则根据管理距离加入最优条目。

如图15 debug信息显示,此时数据由F4/0接口发出,但是R4又将该数据发回给R1,同时也发送了一条重定向消息,这是由于R4的路由表中去往192.168.1.64/27的路由是指向R1的,如图16所示,最终R1丢弃了该数据。

 

15  添加192.168.1.66的主机路由

16  R4路由表

17  R4路由修改后的路由表

    为进行实验,将R4的路由进行调整,调整后路由表如图17。下面在R1ping 192.168.1.66,成功,如图18

 

18  ping 192.168.1.66成功

 

这个时候ping 10.1.5.1也是成功的,不会再报“wrong cable”的错误。这种情况我称为“伪非直连”,意思是说其实192.168.1.66实际上是直连,但是在路由表中给它条路由,让它绕绕路,看起来像是非直连。这种情况与上面实验过程中的“伪直连”情况有些相似之处,但是“伪直连”情况下会报“wrong cable”错误,而“伪非直连”却没出现这种情况。

 

最后,不联合使用出接口和系一条地址,将其变为两条分开的路由语句看看会出现什么情况,如图1920

 

19  使用两条命令配置出接口及下一跳

20  配置完成后R1路由表

21  出接口失效后,删除直连信息

将图20与图14对比,可以发现在路由条目后的表述上是有所不同的。图14中表明下一跳及出接口是相关的,当出接口失效时该条目将被删除;图20表明的则是负载均衡,当出接口失效后,只删除directly connected, FastEthernet0/0项,保留下一跳有关的路由。如图21,将F0/0接口shutdown掉之后,该路由条目依然存在。

3 结论

Ø  数据转发先进行路由匹配,一直匹配到直连网络为止,在路由匹配完成之前,不会理会二层表中的信息。

Ø  联合使用出接口及下一跳地址进行静态路由配置,当出接口失效时,会直接删除该路由条目。

Ø  联合使用出接口及下一跳地址进行静态路由配置,当下一跳地址失效时,不会删除该路由条目。

Ø  出接口和下一跳联合使用的环境是BMA网络,且指定其下一跳地址应为直连网络中的地址,否则不但配置将变得毫无意义,同时也有可能加重网络负担。

Ø  关于同一网段的、单独指下一跳地址和单独指出接口的两条路由语句同时出现时,意味着负载均衡。

Ø  关于路由表中出现的路由,匹配规则为最长匹配;和管理距离相关的为加表规则,意即管理距离小的将加表。

Ø  对于形如“10.1.0.0/16 [1/0] via 192.168.1.194 FastEthernet0/0”的路由语句,其只表明去往10.1.0.0/16网络的下一跳地址192.168.1.194是与FastEthernet0/0相关联的,并不表明去往192.168.1.194的数据就必须使用FastEthernet0/0接口。