前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第十二章 路由通信(一)

第十二章 路由通信(一)

作者头像
晓天
发布2019-07-04 14:32:29
1.8K0
发布2019-07-04 14:32:29
举报

第十二章 路由通信

12.1 路由原理

本章将介绍路由的通信原理,主旨是让大家理解路由的过程,而实验是次要的。在实际生产环境中,都使用的是企业级路由器,不会使用windows或Linux主机做路由用,所以读者应该把握好学习重点,更多的去思考通信原理。

12.1.1 路由器工作原理

其实,在网络基础部分,应该会有路由器工作原理的介绍。这里,我们再来简单介绍一下路由器工作原理:

如图,我们假设两台客户机A、B间假设两台路由器,那么可知,网络被分成了三个网段,我们假设三个网段分别是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。PS:在网络上,每经过一个路由器,我们称为一跳。

路由器的工作原理是按照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 ---重启服务,生效

tips:网络或其他教材中有用echo … > … 的方式,但这种方式仅是临时开启路由,原理都一样,所以仅看看即可。

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

tips:linux7.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 -net192.168.30.0/24 gw 192.168.20.2 ---添加网络路由

PS:也可以用routeadd -net 192.168.30.0 netmask255.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段的路由。PS:ping命令的通信过程是一去一回的,只有去和回都正常通信,才会显示ping通。所以需要在R2上也添加路由:route add -net 192.168.10.0/24 gw 192.168.20.1 ,然后A和B就会通了。

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

注:tarcert是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的变化。

添加主机路由后,ApingB可通,但是Aping30.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通了。PS:ip系列命令在网络参数配置中有所介绍。ip route add 192.168.30.0/24 via 192.168.0.2 dev ens34 也是添加静态路由的命令。

tips:其实在CentOS7.4之前版本,route add default gw 192.168.20.2命令也可以手动添加默认路由,但在CentOS7.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

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

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

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

12.2.4 路由小结

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

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

再来看一下客户机,这里我们用的客户机是windows系统,我们可以使用route print命令来查看路由表(PS: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的下一跳。可见这条网络路由故意写成了错误的,则当ApingB时会不通,说明网络路由生效,并未走默认网关,可见windows客户机也是按照路由表完成通信的。

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 教主小筑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档