图1.1 静态路由协议实验网络拓扑图
我们在两个网段(192.168.1.0/24和192.168.2.0/24)中分别有3个路由器,Router0,Router1和Router2,我们的目标是Router0的数据包能顺利到达Router2,因为这是一个小型的具有简单拓扑结构的网络,因此我们决定采用静态路由协议达到这样的目标。
首先,我们必须给每个路由器的接口分配一个合法的IP地址,这是最为关键的一步,很多同学在给接口分配IP地址的时候会将同一条交叉电缆的两端口分配两个不在同一网段的地址,这样的结果是即使是直连的两端也无法通信。你可能会认为你另有办法;对于直连网络来说,只要配置好端口的IP地址,当然这里说的正确的配置好,不用静态路由,也可以互相通信。只有当不在同一个网段的路由器之间需要通信的时候,才需要设置静态路由,因此你有理由认为,我只需在Router1上画蛇添足的写上一条到Router0的静态路由就可以了。实际上我正是按照这样的想法做的。可结果却让我大吃一惊:
图1.2 错误配置下静态路由协议路由表
从上图中我们看到了Router1路由表中有两条Type为C和一条Type为S的路由条目,C是表示直连网络的意思,而S则表示是静态路由条目,我们在3台路由器的路由表中都发现了静态路由条目,从路由条目可以看出路由绝对没有问题,可为什么其他两台路由器任然无法和Router0通信呢?因此我们决定向下一层——数据链路层,查看个究竟。
现在,我们不妨看看3个路由器的ARP地址表:
图1.3 错误配置下ARP地址表条目
然后我们再来看看正确的端口IP地址情况下,ARP地址表的情况是怎么样的;
图1.4 正确配置下的ARP地址表
现在我们来比较一下,两张ARP地址表的内容,可以很快的看出,错误配置下ARP地址表的条目很少,而正确的配置情况下ARP地址表条目很完整,看来我们找到问题的所在了;ARP在解析IP地址的时候出现了问题,无法找到IP地址为192.168.3.1的接口的MAC地址。在这里我们必须清楚的知道,当数据报要跨路由器通过的时候,它真正需要知道的是下一条路由器接口的MAC地址。这个时候,我们可能会想知道ARP的工作机制,它是如何将IP地址解析为MAC地址的?当然对这个问题我不想多说,因为老师上课的时候讲的实在是很详细了,我想知道的是ARP的广播域有多大?Router1的ARP广播能不能到达Router0,这跟路由器隔离广播有没有关系?这是问题的关键所在。
翻阅了《CCNA学习指南》和《TCP/IP协议详解(卷一)》将近半个小时,问题终于解决了。路由器隔离广播域确实没错,但端到端的ARP广播是不经过路由器的,所以不存在这个问题。后来看到ARP的广播地址段是子网的广播才恍然大悟,192.168.1.0的ARP广播地址是192.168.1.255,这个广播根本到不了网段192.168.3.0/24,所以没办法得到接口IP地址为192.168.3.1的MAC地址。为了验证这个观点的正确,我决定将Router1上Fa0/0的IP地址掩码改为255.255.0.0,可发现没办法将一个C类IP地址的掩码改为255.255.0.0。只好作罢!