本文欢迎转载,转载请注明出处和作者。
前面实验的01~07,已经将基本的二层通信说完了。其中04、05的单臂路由与SVI,已经将使用单台路由器与三层交换机的三层路由也说明了。
但是,由于路由都集中在单台设备,并且还都是直连路由,根本无法体验到到底查询路由表,设置路由条目,到底是怎样的情况。
因此,此节开始讲述三层路由相关的知识。
1、实验:配置静态路由
1.1网络拓扑
拓扑图如下,其中引入了一个概念,就是lo的loopback环回接口。这种是路由器的逻辑接口,相当于在路由器上面虚拟出来的本地直连接口。
由于是虚拟出来的逻辑接口,不会占用物理端口,因此,一般,这种接口是用于配置来用于路由器的管理地址的,作为管理用途。
这里引入,是因为省略还需要在R1、R3两侧分别还要接入PC,然后在PC上面IP、子网掩码与配置网关,然后在路由器的接口上还要配置地址,所以直接采用loopback地址,模拟路由器上面接了PC终端。
当然如果改为在R1、R3两侧分别接入PC1、PC2,然后分配两个不同网段的IP地址,并且参照单臂路由,在R1、R3上面分别为PC1、PC2设置网关,也是可以的。
1.2预配置
R1:
en
conf t
host R1
int se2/0
ip add 12.1.1.1 255.255.255.0
clock rate 64000
no shut
int lo 0
ip add 1.1.1.1 255.255.255.0
no shut
R2:
en
conf t
host R2
int se2/0
ip add 12.1.1.2 255.255.255.0
no shut
int se3/0
ip add 23.1.1.2 255.255.255.0
clock rate 64000
no shut
int lo 0
ip add 2.2.2.2 255.255.255.0
no shut
R3:
en
conf t
host R3
int se2/0
ip add 23.1.1.3 255.255.255.0
no shut
int lo 0
ip add 3.3.3.3 255.255.255.0
no shut
上述命令配置完,会看到拓扑上面R1、R2、R3的链路都通了,都展示绿灯。
但是,R1上面ping R3的3.3.3.3是不通的。
注意路由器互联接口之间,一台DTE(数据终端设备)、一台是DCE(数据通信设备)。这里packet tracer里面选择的DCE的串口线,有方向的,拓扑图上面多了个时钟图标的就是DCE,DCE设备接口上面还要配置一个clock rate(时钟)即可,注意哪台设备的接口才是DCE。
1.3路由条目查看(重点)
我们在R1、R2、R3上面分别show ip route查看路由表。
如R1,路由条目前面的C表示路由条目类型,C表示直连的。
有1.1.1.0/24与12.1.1.0/24的两条路由,后面的接口,表示收到目的地址去往12.1.1.0/24的包,从哪个接口转发出去。(图中就是从se2/0转发出去,se2/0就是与R2相连的接口。)
可以看到,每个路由器的路由表中,只有自己直连路由的条目。(同理查看R2、R3)
如果没有去往某个网段的路由条目(例如R1没有3.3.3.0/24网段的路由条目),那么路由器接收到去往该网段的包,就会丢弃。
1.4配置第一条静态路由
接下来,开始手工配置静态路由。我们先配置R1,不配置R2、R3尝试。
目的是配通R1能否访问2.2.2.2。
R1:
在(config)的配置模式下,添加到2.2.2.0的静态路由
ip route 2.2.2.0 255.255.255.0 12.1.1.2
ip route意思静态路由,后面是目的网段的网络地址与子网掩码,最后面是去往这个目的网段,R1的下一条路由器的接口地址。(即R2与R1相连的接口的IP地址)
然后exit到#特权模式,然后ping 2.2.2.2尝试。
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
!!!
发现已经ping通了。
S 2.2.2.0 [1/0] via 12.1.1.2
12.0.0.0/24 is subnetted, 1 subnets
此时我们查看R1与R2路由表。发现R1多了一条路由,R2没有变化。
S表示静态路由,后面的via 12.1.1.2表示,通向2.2.2.0的包,都往下一条地址12.1.1.2转发。
1.4.1扩展ping测试
刚才的直接ping 2.2.2.2,我们只是控制了目的地址,但是源地址到底是用的什么呢?
我们用扩展ping测试一下。
在R1上面,只输入ping,然后回车。(那么就可以进行扩展ping)
Protocol[ip]:默认回车
Target IP:输入目的IP地址,输入2.2.2.2
Repeat、Data gram size、Timeout都默认回车。
Extend commands输入y,意思是是否需要扩展命令
Source address or interface输入1.1.1.1,这里是控制这个ping包的原地址,可以选择R1上面的任意IP地址或者接口(如int se2/0)
其他默认回车
然后发现ping不通2.2.2.2了。
再来一次扩展ping,只输入ping回车。
其他选项保持一致,Srouce address 改为选择12.1.1.1(选择se2/0同义)
然后发现又ping通了。
为啥会这样呢。
是因为,如果默认ping 2.2.2.2的时候,R1默认使用的是接口地址,也就是与R2连接的12.1.1.1(接口se2/0的地址),而不是loopback地址1.1.1.1。
1.4.2理论解释:
随着刚才R1配置了去往2.2.2.0/24的静态路由以后,目的地址为2.2.2.2的包,R1知道要从12.1.1.2的下一跳地址转发。
然后包到了R2后,R2查路由表后,知道包的目的地址是自己的lo口,然后会回包到源地址,此时默认ping源地址是12.1.1.1,在R2上面是有该路由条目的,所以R2能够正确回包到R1。
但是如果采用扩展ping,源地址修改为了R1上面的1.1.1.1,包从R1到了R2后,因为R2上面是没有去往1.1.1.0/24的地址的,所以就不知道包怎样转发,就会把包丢弃了,从而ping不通。
怎样才能让R2知道如何回包到1.1.1.1呢?答案很简单,手工在R2上面添加去往1.1.1.1的静态路由,尝试是否能够解决上述问题。
R2:
R2(config)ip route 1.1.1.0 255.255.255.0 12.1.1.1
查看R2路由表,show ip route,发现已经有到1.1.1.0/24的路由条目
重新在R1上面执行源地址为1.1.1.1与12.1.1.1的扩展ping目的地址2.2.2.2
发现已经可以ping通。(做通了才继续往下做。)
1.5继续配置R2&R3静态路由(重点)
R1与R2已经完全配置通了,但是R1不知道去往R3的路由(3.3.3.3)以及R3也不知道怎样去R1(1.1.1.1)
所以需要在R1上继续配置到R3的静态路由,以及R3上面配置到R1的静态路由。
这里还有4个知识点需要掌握。
R1:
ip route 3.3.3.0 255.255.255.0 se2/0
ip route意思静态路由,后面是目的网段的网络地址与子网掩码,最后面是去往这个目的网段,R1本端的出站接口地址。(这个案例里面,去往3.3.3.0,R1应该从se2/0接口扔给R2,再到R3,所以se2/0就是R1本端的出站接口)
R3:
ip route 1.1.1.0 255.255.255.0 se2/0
(知识点1:)
在R1上面配置了3.3.3.0的静态路由,R3配置了到1.1.1.0的静态路由。然后ping,能通吗?实验测试一下。
答案是ping不通,为什么呢,我们从数据包的流向分析一下。
R1 ping 3.3.3.3,查路由表,当然知道从se2/0接口把包转发出去,然后包到了R2。
R2查看路由表show ip route。
Gateway of last resort is not set
1.0.0.0/24 is subnetted, 1 subnets
S 1.1.1.0 [1/0] via 12.1.1.1
2.0.0.0/24 is subnetted, 1 subnets
C 2.2.2.0 is directly connected, Loopback0
12.0.0.0/24 is subnetted, 1 subnets
C 12.1.1.0 is directly connected, Serial2/0
23.0.0.0/24 is subnetted, 1 subnets
C 23.1.1.0 is directly connected, Serial3/0
R2上面有去3.3.3.0/24的路由条目吗?没有,所以R2会把这个ping包丢弃,因此无法ping通。所以解决方法是要在R2上面也配置到3.3.3.3的静态路由。
R2:
ip route 3.3.3.0 255.255.255.0 se3/0
请问设置完,R1上面ping 3.3.3.3,能通吗?测试一下。
答案是不行。为什么呢?我们尝试用扩展ping试一下。
(知识点2:)
R1上面扩展ping,然后目的地址3.3.3.3,然后源地址用12.1.1.1 ,其他默认。
ping不通3.3.3.3。
然后源地址修改为1.1.1.1再试一下,ping通了。
这忽然又与上面用默认接口能ping通,loopback地址不通截然相反了,又是什么问题呢。
还是老规矩,在R1、R2、R3上面show ip route,然后整个包的路由过程思考一下。
R1有到3.3.3.3的路由,包扔给R2,R2也有到3.3.3.3的路由,包扔给R3。
上面已经说明过了,默认ping是用的接口地址来ping的,也就是R1上面ping 3.3.3.3,源地址是12.1.1.1(se2/0的地址),R3要回包,则要看有没有到12.1.1.0的路由条目,R3的路由表如下。
Gateway of last resort is not set
1.0.0.0/24 is subnetted, 1 subnets
S 1.1.1.0 is directly connected, Serial2/0
3.0.0.0/24 is subnetted, 1 subnets
C 3.3.3.0 is directly connected, Loopback0
23.0.0.0/24 is subnetted, 1 subnets
C 23.1.1.0 is directly connected, Serial2/0
R3根本没有到12.1.1.0的路由条目,因为12.1.1.0不是R3的直连网络,所以是没有路由条目的,而到1.1.1.0/24的路由刚才已经手工配置过了,所以如果源地址是1.1.1.1的包,R3是可以回包的,但是如果源地址是12.1.1.0的包,R3根本不知道如何到12.1.1.0网络,因此会丢弃这个包。
解决办法,是R3手工添加到12.1.1.0/24的静态路由。
R3:
ip route 12.1.1.0 255.255.255.0 se2/0
重新再在R1默认ping 3.3.3.3,发现已经通了。
(知识点3)
上面这种思考,然后每台路由器show ip route,在这么小的实验环境可行。但是如果在大型生产环境,节点很多,根本很难通过上述手工的方式分析到底是哪里少了一条路由。这个时候就要用traceroute命令协助了。
回到上面的例子,我们先在R3上面no ip route 12.1.1.0 255.255.255.0 se2/0取消掉路由条目,等R1用默认ping与R3不通。
然后R1上面使用traceroute 3.3.3.3查看。
R1#traceroute 3.3.3.3
Type escape sequence to abort.
Tracing the route to 3.3.3.3
1 12.1.1.2 1 msec 1 msec 1 msec
2 * * *
3 * * *
发现包是可以从R1转发出去的,并且R2(12.1.1.2)是有给R1回包的。(1的那个)
但是下一条(R3)就没有回包了,因此可以猜测是R3上面的路由条目有问题,所以无法回包,因此应该在R3上面show ip route来排查。
同理,如果有R1~R10的路由,然后R1 ping R10上面的地址,然后不通,也可以traceroute来查看,到了哪一跳没有回包,基本上就可以定位是那个路由器上面的路由条目有问题了。
(知识点4)
最后一个知识点了,有眼尖的同学可能早就发现了,为啥R1上面配置的第一条静态路由,与后面3.3.3.0的静态路由,为啥一个配置的是出站接口,一个是下一跳的IP地址呢?这两个有什么区别呢?
ip route 2.2.2.0 255.255.255.0 12.1.1.2
ip route 3.3.3.0 255.255.255.0 se2/0
在配置静态路由时,既可指定发送接口,也可指定下一跳地址,到底采用哪种方法,需要根据实际情况而定。
1、对于支持网络地址到链路层地址解析的接口(直接连到主机)或点到点接口(ppp),指定发送接口即可;
2、对于nbma接口,如以太网接口、VLAN接口、封装x.25或帧中继的接口、拨号口等,支持点到多点,这时除了配置ip路由外,还需在链路层建立二次路由,即ip地址到链路层地址的映射(如dialer map ip、x.25 map ip或frame-relay map ip等),这种情况配置静态路由不能指定发送接口,应配置下一跳ip地址。
更简单的做法,保持使用下一跳IP地址来进行静态路由配置即可,那么无论什么类型的网络都可以了。
从上面的实验可以看出,维护静态路由是非常不科学与不方便,随着网络节点越来越多,每增删改一个网段,都需要全网的路由器手工配置一条静态路由,一旦有遗漏的,网络可能就不通,因此非常难以配置与维护。
因此,动态路由应运而生,可以让路由器之间自动交换路由条目,自动收敛网络,无需手工维护每一条路由条目。
下一篇,我们介绍动态路由。