跟我们一起
玩转路由器

第十二章 路由通信(一)

第十二章 路由通信

12.1 路由原理

本章将详细介绍路由通信的原理,重点在于理解路由过程,而实验内容相对次要。在实际生产环境中,通常采用企业级路由器,而不使用Windows或Linux主机作为路由器。因此,读者应重点把握通信原理,而不是具体的实验操作。

12.1.1 路由器工作原理

在网络基础部分,可能已经介绍过路由器的工作原理,这里我们再简要回顾一下:

如图所示,假设有两台客户机A和B,以及两台路由器R1和R2。网络被划分为三个网段,分别为192.168.10.0、192.168.20.0和192.168.30.0,主机与路由器的网卡IP如图所示。当主机A需要与主机B通信时,因为它们不在同一子网内,必须通过网关进行通信。主机A的网关是路由器R1的e0口IP,即192.168.10.2;主机B的网关是30.1。注意,每经过一个路由器,我们称为一跳。

路由器的工作原理基于OSI七层模型中的网络层功能,通过识别IP地址来完成数据包转发。路由器内部有一个专门用于指定通信路径的表格,称为路由表。路由器在启动时,会自动扫描接口所连接的网段,并将这些信息写入路由表,称为直连路由。如图所示,R1和R2各有两条直连路由,显示了e0和e1接口连接的网段。因为是直连的,所以下一跳部分为空,用*表示。当主机A访问主机B时(如图所示),R1收到A发送的数据包,并根据目的IP(30.2)查找路由表。由于R1的路由表中没有30.0网段的信息,R1会拒绝转发,导致A和B无法通信。只有当R1的路由表完整时,R1才会按照路由条目的指示进行转发。路由表的建立有两种方法:一种是人工手动输入,称为静态路由;另一种是通过路由器运行路由协议,让路由器之间相互学习,建立完整的路由表,称为动态路由。下面我们将分别介绍这两种方法。

12.2 静态路由

12.2.1 静态路由原理

如上图所示,要使A和B能够通信,必须在R1和R2上添加完整的路由表信息。路由表中最重要的信息包括三列:本机接口、目标网段和下一跳地址。基于图示环境,我们可以得出:若要从R1到达主机B所在的网段(即30.0网段),需要通过R1的e1口发送数据包给R2的20.2接口。因此,我们需要手动添加一条路由信息:e1 30.0 20.2。也就是说,R1要到达30.0网段,需要通过e1口将数据包发送给20.2。同理,我们需要在R2上添加e0 10.0 20.1的路由信息,以便从R2到达10.0网段。当R1和R2上的路由信息都添加完毕后,A和B就可以通信了。

12.2.2 路由添加命令

手动添加路由信息时,可以指定目标网段、目标IP或默认所有网段,因此手动添加的路由信息有三种类型:主机路由、网络路由和默认路由。

主机路由:指示如何到达某个特定IP地址,即某台主机。 网络路由:指示如何到达某个网段。 默认路由:指示如何到达任何网络。 我们首先按照图示设置四台虚拟机,主机A和B可以使用Windows系统,R1和R2可以使用Linux虚拟机(需要连接两块网卡),并按图配置好IP地址。

接下来,我们配置路由器R1:

首先,在CentOS系统上启用路由功能,需要编辑路由配置文件:/usr/lib/sysctl.d/00-system.conf,具体配置过程如下:

vi /usr/lib/sysctl.d/00-system.conf —编辑路由配置文件,写入

net.ipv4.ip_forward = 1 —启用路由转发功能

systemctl restart network —重启服务,使配置生效

提示:网络或其他教材中可能使用echo … > … 的方式,但这种方式仅临时启用路由,原理相同,仅供参考。

route -n —查看路由表,也可以使用route命令不加参数或netstat -r命令

提示:在Linux 7.0之前的版本中启用路由:

vi /etc/sysctl.conf —编辑路由配置文件

修改或添加:net.ipv4.ip_forward= 1

service network restart

如图所示,路由表中只有两条直连信息。

我们先在主机A上配置好网关为10.2,然后ping主机B,查看提示结果:

如图所示,ping的结果显示10.2回复说目的网段不可达,这说明路由器R1上没有30.2的相关路由信息,因此不知道如何到达该路径,所以会报目的不可达。

如果我们在主机A上删除网关,即无网关状态,ping的结果如下:

如图所示,本机自己返回目的主机不可达,说明是由于没有网关造成的。

综上所述,通过执行ping操作,我们可以根据显示的结果来判断网络问题所在。

接下来,我们手动添加路由条目:

route add -net 192.168.30.0/24 gw 192.168.20.2 —添加网络路由

提示:也可以使用route add -net 192.168.30.0 netmask 255.255.255.0 gw 192.168.20.2 添加,但为了简化,子网掩码通常使用CIDR表示法,即/XX的简写格式。

也可以使用route add -net 192.168.30.0/24 gw 192.168.20.2 dev ens34 命令,其中dev参数指定发出网卡,也可以省略不写,自动识别发出网卡。

添加完毕后,使用route命令查看路由表,结果如下:

如图所示,添加路由后,显示到达30.0网段,下一跳为20.2,表中gateway列表示下一跳地址,Iface列表示从本机的哪块网卡发出去。

然后,我们在主机A上添加好网关(10.2),ping主机B,会显示请求超时,这是因为路由器R2上还没有添加到达10.0网段的路由。提示:ping命令的通信过程是一去一回的,只有去和回都正常通信,才会显示ping通。因此,需要在R2上也添加路由:route add -net 192.168.10.0/24 gw 192.168.20.1,然后A和B就可以通信了。

在这里,我们会看到TTL的结果是126,这说明经过了两跳路由。提示:ping的结果是从对方回复时经过的路由跳数,Windows Server版系统的TTL默认值是128,每经过一跳,TTL会减1,所以A ping B的结果是TTL=126。我们可以使用tracert命令探测一下所经过的路由:

注意:tracert是Windows中的命令,在Linux中是traceroute,功能相同,务必记住。

接下来,我们演示一下主机路由和默认路由:

route del -net 192.168.30.0/24 —删除R1的网络路由

route add -host 192.168.30.2/32 gw 192.168.20.2 —添加主机路由,主机路由的掩码必须是/32,即255.255.255.255,为了区别VLSM或CIDR的变化。

添加主机路由后,A ping B可通,但是A ping 30.1不通了,仍会显示10.2回复目的网段不可达,因为R1路由表中只有30.2的信息,没有到达30.0的路由。

route del -host 192.168.30.2/32 —删除主机路由

接下来,我们来看默认路由。默认路由就是网卡的网关,即到任何非直连网络都走这个路径。我们在R1的20.1网卡上配置上网关,然后查看路由表:

如图所示,添加网卡的网关后,route命令可以看到网关,但看不到具体的网关IP,可以使用ip route命令查看路由表。A与B即可ping通。提示:ip系列命令在网络参数配置中有介绍。ip route add 192.168.30.0/24 via 192.168.0.2 dev ens34 也是添加静态路由的命令。

提示:在CentOS 7.4之前的版本中,route add default gw 192.168.20.2命令也可以手动添加默认路由,但在CentOS 7.4中,这个命令不起作用,只能在网卡上设置。

12.2.3 路由优先级

路由器的路由表中,主机路由、网络路由和默认路由的优先级如下:

主机路由 > 网络路由 > 默认路由

我们可以通过以下实验来证明:

route add -net 192.168.30.0/24 gw 192.168.20.2

先添加一条正确的网络路由

route add -net 192.168.30.2/32 gw 192.168.20.20

再添加一条错误的主机路由

当我们再次使用A ping B时,会发现网络不通了,说明错误的主机路由生效了,这也证明了主机路由的优先级高于网络路由。

用相同的方式,可以证明网络路由的优先级高于默认路由。

12.2.4 路由小结

通过以上实验,我们可以总结出路由器在转发数据包时的路由表审核过程:

路由器收到一个转发数据包后,根据数据包中的目的IP,首先查看路由表中有无完全匹配的主机路由,若有,直接执行,不查其他;若无,则查看路由表中有无相对匹配的网络路由,若有,直接执行,不查其他;若无,则按照默认路由执行;若无默认路由,则丢弃数据包,放弃转发。

接下来,我们来看一下客户机,这里我们使用的客户机是Windows系统,我们可以使用route print命令来查看路由表(提示:Windows系统查看路由表使用route print命令):

如图所示,路由表中只有一个10.0网段的直连路由(到10.0网段走192.168.10.1,即自己的网卡,到10.1又走127.0.0.1,即本机自己,说明是直连路由)。

Windows中添加路由的命令如下:

route add 192.168.30.0 mask 255.255.255.0 192.168.10.20

Windows的命令格式类似于Linux,也是指定到达30.0网段走10.20的下一跳。可见这条网络路由故意写成了错误的,则当A ping B时会不通,说明网络路由生效,并未走默认网关,可见Windows客户机也是按照路由表完成通信的。

总结可知:任何设备(路由器、主机)通信都必须通过查询路由表来决定通信路径,只不过,一般PC机上仅设置网关,即默认路由,来完成通信;任何设备(路由器、主机)当需要与异子网的主机通信时,都必须按照路由表所示,都要有下一跳网关的设置。

综上所述,希望大家可以通过路由案例,理解我们做的两个总结,这才是本章的重点所在。

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《第十二章 路由通信(一)》
文章链接:https://www.lu-you.com/settings/26703.html
本站资源来源于互联网整理,若有图片影像侵权,联系邮箱429682998@qq.com删除,谢谢。

评论 抢沙发

登录

找回密码

注册