主机路由
RIP主机路由问题
首先,我先来解释一下,什么叫主机路由。
所谓主机路由就是路由器不能匹配发过来的网段地址,它就把这个信息当作是一台主机来处理。很自然的也就是对IP地址进行32位的全匹配了。
配置RIP的过程就不说明了,详细参照实验1.9。
下边是R1的路由表信息:
Gateway of last resort is not set
192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C
192.168.1.64/26 is directly connected, Serial1/0
R
192.168.1.32/32 [120/1] via 192.168.1.66, 00:00:09, Serial1/0
路由更新过程是:
R2要把自己的路由表发给R1,R2的路由表如下所示:
由于192.168.1.64这个网段是自身直连的,所以R1不会把这条加入自身的路由表。而192.168.1.32这个网段它的路由表里没有,所以它会把这个信息加入到自身路由表里,但是传过来的信息没有掩码。那么R1就要看一下自身路由表,看看有没有和R1直连的并和这个IP地址是一个主类的路由。
如果有就把这个路由的掩码附给它,如果没有就根据A、B、C类来汇总。
这里S1/0接口的路由的IP地址的主类是192.168.1.0,而192.168.1.32的主类也是192.168.1.0,它们的主类一样,所以R1就认为192.168.1.32的掩码是26位的,但是在附给它之前路由器要算一下,192.168.1.32/26是否是192.168.1.32这个网段。方法就是用26位子网掩码255.255.255.192与从R2发来的路由信息192.168.1.32做“与”运算,
2进制“与”运算的真值表
第一个数 第二个数 结果
0 0 0
0 1 0
1 0 0
1 1 1
后8与运算过程:
1 1 0 0 0 0 0 0 掩码后8位
与 0 0 1 0 0 0 0 0 路由信息的后8位
0 0 0 0 0 0 0 0 “与”运算后的结果
经过上面的得出的结果是:192.168.1.0
如果算出来的结果和路由条目是一个网段,则匹配成功。路由器就会把这个路由信息加入到自身路由表里,这就是一条正常的路由信息;
如果不是同一个网段,那么路由器就会按照默认的规定把这个地址看作是一台主机的IP地址来处理,于是路由器就附上的掩码长度就是32位给192.168.1.32。这也就是主机路由了。就出现R1路由表出现的现象了。
下面我举两个例子来具体说明一下。
如果发过来的地址是192.168.1.128,那么和R1的子网掩码做“与”运算之后还是那样,没有变化,仍是192.168.1.128,结果和发过来的地址是一个网段的,因此匹配成功,就会出现一条正常的路由表目。
Gateway of last resort is not set
192.168.1.0/26 is subnetted, 2 subnets
C
192.168.1.64 is directly connected, Serial1/0
R
192.168.1.128 [120/1] via 192.168.1.66, 00:00:11, Serial1/0
如果发过来的是192.168.1.224,那么和R1的子网掩码与之后结果是192.168.1.192,和192.168.1.224不同,也就是说匹配后的地址和原来的地址不是同一网段的地址,因此路由器就把它当作主机来处理,会附上32位的子网掩码。就出现主机路由现象了。
Gateway of last resort is not set
192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C
192.168.1.64/26 is directly connected, Serial1/0
R
192.168.1.224/32 [120/1] via 192.168.1.66, 00:00:07, Serial1/0
(1) 如果接口的IP地址是在相同的主类网络号中,子网掩码不一致,会导致路由信息发布失败;
(2) 如果接口的IP地址是在不同的主类网络号中,子网掩码不一致,路由通告正常,且正常汇总 。
这时在R1的特权模式下ping 192.168.1.32,结果!!!!!,即通。这是为什么呐?
当R1源地址为192.168.1.65、目的地址为192.168.1.32的ping包发给R2,它查看自身的路由表之后,知道是发自己的所以它当然会收,而且它知道192.168.1.32这个网段是自己直连的,可以到达。所以它就把一个源地址为192.168.1.66、目的地址为192.168.1.65的包从来的接口又发回去。R1收到后它就是知道192.168.1.32这个主机是可达的。所以会ping通。但是实际上192.168.1.32这个地址是R2和R3直连的这个网段的地址而不是和R2直连的一台主机的地址。
这是ping 192.168.1.32的debug信息:
r1#ping 192.168.1.32
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.32, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/44/60 ms
r1#
*Jul 26 07:22:41.131: IP: s=192.168.1.65 (local), d=192.168.1.32 (Serial1/0), len 100, sending
*Jul 26 07:22:41.191: IP: s=192.168.1.66 (Serial1/0), d=192.168.1.65 (Serial1/0), len 100, rcvd 3
*Jul 26 07:22:41.211: IP: s=192.168.1.65 (local), d=192.168.1.32 (Serial1/0), len 100, sending
*Jul 26 07:22:41.251: IP: s=192.168.1.66 (Serial1/0), d=192.168.1.65 (Serial1/0), len 100, rcvd 3
*Jul 26 07:22:41.275: IP: s=192.168.1.65 (local), d=192.168.1.32 (Serial1/0), len 100, sending
*Jul 26 07:22:41.315: IP: s=192.168.1.66 (Serial1/0), d=192.168.1.65 (Serial1/0), len 100, rcvd 3
*Jul 26 07:22:41.331: IP: s=192.168.1.65 (local), d=192.168.1.32 (Serial1/0), len 100, sending
r1#
*Jul 26 07:22:41.371: IP: s=192.168.1.66 (Serial1/0), d=192.168.1.65 (Serial1/0), len 100, rcvd 3
*Jul 26 07:22:41.391: IP: s=192.168.1.65 (local), d=192.168.1.32 (Serial1/0), len 100, sending
*Jul 26 07:22:41.431: IP: s=192.168.1.66 (Serial1/0), d=192.168.1.65 (Serial1/0), len 100, rcvd 3
r1#
*Jul 26 07:22:52.375: IP: s=192.168.1.66 (Serial1/0), d=255.255.255.255, len 52, rcvd 2
192.168.1.32这个实际上可能连着多台主机、交换机或路由器,而R1只认为它是一台主机的IP地址。于是路由空洞就产生了。这是主机路由的最大危害。
解决主机路由的方法是:
如果相同的主类网络子网,子网掩码不同,那么中间路由器右侧的网段就必须在左边26位掩码表示能够匹配成功的范围之内,这样可以避免主机路由的出现。或干脆就直接把子网掩码配成一样的长度 转自杜松之家
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
讲的很不错,学习一下,OSPF中也有主机路由这个概念
看了楼主得帖子,特意注册了个,呵呵~~
你说的这个实验我自己做了一下,得出的结论和这片贴子不怎么一样啊~~
我按照这片贴子的思路设计了下,结果是无论何种情况rip对于和自己发送接口存在不一致子网掩码的同一主类路由根本就不发布~~~
不知道是不是现在的IOS版本已经变了 ~~