网络协议之路由是怎么回事?
写在前面
要想去外面的世界看看, 就离不了路由器,而路由器工作的原理就是路由,那么具体是怎么路由的呢?本文就一起来看下这部分内容。
1:路由的配置
配置一条路由无非就是在配置以下三个信息:
1:包要去哪里,即目的IP
2:从路由器的哪个网口出去
3:下一跳的IP地址是啥?
知道了以上信息,就能以在局域网环境中传输包方式来完成一跳了,还是ARP获取MAC,修改目标MAC等操作。
那么如何配置呢,最简单的方式就是直接配置,如下:
ip route add 10.176.48.0/20 via 10.173.32.1 dev eth0
意思就是如果是包要去10.176.48.0/20,就要从eth0这个网口出去,下一跳的地址是10.173.32.1,就像这样:
当然这样子按照目的IP来配置路由器是完全可行的,但是一个个配置工作量还是蛮大的,所以也支持其他的配置方式,比如策略配置方式,即通过源IP,TOS等方式等方式来配置,如下根据源IP来进行配置:
ip rule add from 192.168.1.0/24 table 10 如果是来源IP是192.168.1.0/24则使用路由表10
ip rule add from 192.168.2.0/24 table 20如果是来源IP是192.168.2.0/24则使用路由表20
也可以配置多个出口,来实现负载均衡:
ip route add default scope global nexthop via 100.100.100.1 weight 1 nexthop via 200.200.200.1 weight 2
下一跳有俩,分别是100.100.100.1,权重1,200.200.200.1,权重2。
接着我们来看一个出口可以二选一的实际场景。
我家在有孩子之前只买了一家运营商的网络,因为我家对网络的要求不高,我跟我老婆基本上都不看视频什么的对网速要求比较高的网站,最多也就是看看新闻,查查工作中遇到的问题啥的,但是呢,后来有了孩子,孩子要上网课,所以我们又买了另一家运营商的网络,宽带呢更高,但是家里的路由器支持一个出网网口,即只能接一个外网,为此,我们还专门买了一个可以支持两个外网网口的更高级的路由器,最终,我们家的网络就像这样子:
其中eth2和eth3就是两个外网网口。
此时我们家的路由配置如下:
$ ip route list table main
60.190.27.189/30 dev eth3 proto kernel scope link src 60.190.27.190
183.134.188.1 dev eth2 proto kernel scope link src 183.134.189.34
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1
127.0.0.0/8 dev lo scope link
default via 183.134.188.1 dev eth2
意思是:
如果是要去60.190.27.189/30,即运营商2则从eth3口出
如果是要去183.134.188.1,即运营商1则从eth2口出
如果是去内网192.168.1.0/24,则从eth0出,此时只是在局域网内,不到外网
如果是去127则走lo,回环网口,此时是自己跟自己玩
默认走eth2
因为我们需要孩子屋使用高速网络,我们屋使用低速网络,为此还要进行如下的配置:
- 我们屋走低速网络
添加新的路由表:# echo 200 slow >> /etc/iproute2/rt_tables
配置slow路由表:# ip route add default via 60.190.27.189 dev eth3 table slow# ip route flush cache
配置来自我们的IP走slow路由表:# ip rule add from 192.168.1.102 table slow
这样我们屋走路由表slow
,而路由表slow走eth3网口,下一跳的IP的60.190.27.189。
- 孩子屋走高速网络
添加新的路由表:# echo 200 fast >> /etc/iproute2/rt_tables
配置slow路由表:# ip route add default via 183.134.188.1 dev eth2 table fast# ip route flush cache
配置来自我们的IP走slow路由表:# ip rule add from 192.168.1.101 table fast
这样孩子屋走路由表fast
,而路由表fast走eth2网口,下一跳的IP是183.134.188.1。
当然简单的网络环境,比如我家里的网络,手动挡捣鼓捣鼓还是问题不大的,但是当网络环境比较复杂时,手动的方式就显得力不从心了,此时就需要自动的方式来进行了。
2:动态路由配置
其实我们抽象的来看所有路由器,组成的其实就是一个图,而路由器无非就是找到一条最短路径而已,所以动态路由配置其实就是转化为了图的最短路径问题了,而解决最短路径问题,主要是Bellman-Ford 算法和Dijkstra 算法。具体在动态路由配置算法有以下两种。
- 距离矢量路由算法
该算法基于bellman-ford,适用于小型网络。 - 链路状态路由算法
该算法基于dijkstra算法。适用于大型网络。
但是只有算法还是工作不起来的,还需要具体协议的支持,毕竟先干嘛后干嘛还是要有一个规范的吗,所以就有了以下的具体协议: - 基于链路状态路由算法的 OSPF
OSPF(Open Shortest Path First,开放式最短路径优先)就是这样一个基于链路状态路由协议,广泛应用在数据中心中的协议。由于主要用在数据中心内部,用于路由决策,因而称为内部网关协议(Interior Gateway Protocol,简称 IGP)。
即,这是一个内网环境的路由协议。 - 基于距离矢量路由算法的 BGP
这是一个外网环境的路由协议。我们称为外网路由协议(Border Gateway Protocol,简称 BGP)。
网络世界一个独立的内网环境,比如一个公司网络,我们称为一个AS(Autonomous System),自治系统分为以下几类:
Stub AS:对外只有一个连接。这类 AS 不会传输其他 AS 的包。例如,个人或者小公司的网络。
Multihomed AS:可能有多个连接连到其他的 AS,但是大多拒绝帮其他的 AS 传输包。例如一些大公司的网络。
Transit AS:有多个连接连到其他的 AS,并且可以帮助其他的 AS 传输包。例如主干网。
每个AS之间都有边界路由器。BGP分为eBGP和iBGP,其中AS之间使用eBGP通信,AS内部使用iBGP,如下图:
写在后面
参考文章列表
网络协议之不能老在家里晃悠,也得出去看看啊! 。