除了网关,如何选择下一跳,如何去最快的将包传递过去呢?

那么首先说,路由器本身就是一台网络设备,其具有多张网卡,当一个入口的网络包传递到路由器的时候,会根据本地的转发信息库,来决定如何去转发,这个转发的信息库可以叫做路由表

一个路由表中包含着多条路由规则,每一条规则至少包含着三项信息

1.目的网络:去哪

2.出口设备:哪个口出去

3.下一跳的网关,下一跳的路由器地址

这个可以通过ip route命令配置

假如我们设置ip route add 10.176.48.0/20 via 10.173.32.1 dev etho0,意味着要去10.176.48.0/20的网络都从etho端口出去,下一跳是10.173.32.1

这种配置方式的核心思想是:根据目的IP路由来配置路由

如何配置策略路由:

在真实的网络环境中,除了根据目的ip地址来配置路由外,可以根据多个参数来配置,就是策略路由

可以配置多个路由表,根据源IP,入口设备,TOS来选择路由表,然后在路由表中查找路由

让来源不同的包走不同得路由

比如,我们设置

ip rule add from 192.168.1.0/24 table 10

ip rule add from 192.168.2.0/24 table 20

这就说明,从192.168.1.0/24来的,走table10中的路由表,从192.168.2.0/24来的,走table20的路由表

然后可以定义一条路由走多个路径,根据权重的不同

比如下面

ip route add default scope global nexthop via 100.100.100.1 weight 1 nexthtp via 200.200.200.1 weight 2

下一跳有两个路径,权重分别是1 和 2

有什么场景能够用到这种复杂的配置呢?

加入我们家中有两个网线,两个运行商的带宽不同,有两个租户,在内网分别是192.168.1.101/24和

192.168.1.102/24

网关是192.168.1.1/24

网关在路由器上

家中的网段是私有网段,出去的包需要转成NAT网段的IP地址

两个运营商要为这个网关配置一个公网的IP地址

图片

整体的配置如上

我们需要配置一下整体的网络路由

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/32 dev eth2 proto kernel scope link src 183.134.189.34.32

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

路由器的整体规则就是如果去运营商2,就走eth3

如果去运营商1,就走eht2

如果去内网,就走eth1

如果所有的规则都匹配不上,默认会走运营商一(eth2),走快的网络

那么,假设只给组户A走带宽比较低的网络,该如何配置呢?

我们新加入一个表,叫chao

echo 200 chao >> /etc/iproute2/rt_tables

添加一个规则

0: from all lookup local

32765: from 10.0.0.10 lookp chao

32766: from all lookup main

32767: from all lookup default

ip route add default via 60.190.27.189 dev eth3 table chao

ip route flush cache

默认的路由走慢的,少的网络还能这样折腾,多的可以就不容易了

接下来就是动态路由算法

使用动态路由算法,我们可以根据路由协议算法生成动态路由表,随着网络运行变化而变化

我们可以想象一下,如果去西天取经,如何找最短路径问题,就是对应的动态路由算法

常见的图求最短路径的算法有两种,Bellman-Ford算法和Dijkstra算法

1.距离矢量路由算法

基于了Ballman-Ford算法,这种的实现的思路就是,每个路由器都保存一个路由表,包含了多行,每一行都对应的包含了两部分信息,一部分是到目的路由器的方向,一部分是距离

可以看出来,每个路由器都是知道全局的信息的,那么是如何感知的呢?

每个路由器都知道自己和邻居的距离,然后每个路由器都将自己能够到达的路由器的距离告诉给邻居,邻居告诉邻居,然后计算出了距离

但是有问题

1,好的消息传得快,坏的消息传的慢

如果有个路由器加入了这个网络,他的邻居很快就能知道,但是一旦路由器挂了,因为挂了是没有广播的,每个路由器一旦发现原来的道理到不了了,就尝试用其他的路径访问,直到试过了所有的路径,才能确定其已经挂了

2. 图片

这样的时候,如果A和B建立了通道,B和C建立了,B距离A的距离是1,C距离B是1,A距离C是2

A挂掉了,B和A是邻居,发现连不上了,于是找C,而C和A的距离是2,那么就会把自己设置为3,然后C连A,于是又把自己设置为了4,依次类推,直到超过了一个阈值,才能判定是否真的挂了

3,每次发送的时候,都要发送整个全局的路由表,网络太大了,就很难受了,所以适合小型网络的搭建,现在一个数据中心的内部数目很大,就不适用了

2.链路状态路由算法

基于了Dijkstra算法

就是一个路由器启动的时候,首先发现了邻居,然后向邻居say hello,邻居回复后计算距离,然后将将自己和邻居的状态包广播租出去,发送到整个的网络的每个路由器里面,这样每个路由器都能收到他和邻居的关系的信息,因此,每个路由器都能在自己的本地构建起一个完整的图,然后针对这个图使用Dijkstra算法,找到最短路径

他们不需要在更新的时候发送整个路由表,而是只广播更新或者变化的网络拓扑,一旦一个路由器挂了,其邻居会广播这个消息,使得坏消息快速收敛

动态路由协议

1.基于链路状态路由算法的OSPF,开放式最短路径有限,基于链路状态的路由协议,常用于在数据中心内部,用于路由决策,因为被称为内部网关协议,简称IGP

内部网关协议的重点就是找到最短的协议,在一个组织内部,经常要求路径最短,当然如果发现了多个最短的路径,可以在这个路径之间进行负载均衡,被称为等价路由

图片

这种协议可以分摊流量,在一条路不通的时候,走另外的一条路,在我们将数据中心的网络时候,往往在接入层还有负载均衡,可以和OSPF结合,实现高吞吐量的接入层设计

2.基于矢量路由算法的BGP协议

一般用于外网的通信,可以用于国家之间,称为外网路由协议

在一个国家内部,我们一般会选择近的路去走,但是国家之间,可以能有些政策上的差异

可能有的不让你过,所以需要我们去避开

对于网络包,每个数据中都设置自己的Policy,例如,哪些外部的IP,可以让内部知晓,哪些可以过,那些不能过,这就好比,虽然我离着目标近,但是外人是不能走我家的院子的

于是,每个内部数据网络都是一个自治的系统AS(Autonomous System),那么对于自治的系统,分成了几种类型

1.Stub AS,只有外部链接,不会传递其他的AS的包,大多拒绝帮忙传输

2.Multihomed AS:可能有多个链接到其他的AS,但是拒绝大多数的请求传输

3.Transit AS:有多个链接到外部的AS,可以帮助其他的AS传输包,比如主干网

每个AS都有自己的边界路由器,通过这个和外部建立关系

图片

BGP分为两种,eBGP和iBGP,在多个AS之间,彼此的路由器使用eBGP来广播路由,在内部,我们使用iBGP,让内部路由器能够找到到达外网目的地最好的边界路由器

之前我们说了距离矢量路由协议的缺点,一个是收敛慢,在BGP中,除了下一跳hop,还包含了AS的路径,可以说,之前可能出现的彼此来回增长距离,直到阈值才停止的问题,可以利用路径来避免这个问题,因为C直到自己是通过B连接到的A,一旦B连不上A了,自己也连不上了

小结:

路由分为了静态路由和动态路由,静态路由可以配置较为复杂的策略路由,让不同的租户走不同的路

动态路由主流算法分为了 距离矢量算法和链路状态算法,基于两种算法产生的两种协议OSPF和BGP协议

课后思考:

1.路由器之间交换信息,是走路由吗?

2.路由器之间的信息交换是什么协议?报文格式呢?

BGP的信息交互,走的是TCP,OSPF走的是UDP

ospf发送的是ip包,而bgp使用的tcp协议,路由器之间建立了tcp连接,每60s发送一次keep alive消息

路由器之间的协议走的时候组播报文,组播报文走的是专门的组播路由协议

组播报文的地址是专用的地址,用于传输路由信息

AS是指的是一家公司的一个数据中心这样的一个概念,接入的是各个运营商的网络,运营商的网络也是数据中心的里面,运营商之间走的BGP协议

多线的BGP机房是怎么回事

很多主机商卖主机的时候,强调自己是BGP机房多线接入,虽然只有一个IP,但是和多个运营商访问延迟都低,如何做到的?

BGP主要用于互联网AS自治系统之间的互联,

使用此方案来实现多线路互联,IDC需要在CNNIC或者APNIC申请自己的IP地段或者AS号,然后通过BGP协议将网段IP广播到其他的网络运营商网络中

BGP协议互联后,网络运营商所有骨干路由设备会判断IDC机房,IP段最佳路由,来保证不同运营商的告诉接入

发表评论

邮箱地址不会被公开。 必填项已用*标注