hop计算机网络,计算机网络: 网络层(Control Plane)

网络层里分为两层: Control Plane 和 Data Plane,之前我有篇博客是写 Data Plane 的,这篇就写写 Control Plane 吧。先来说说这两个 Plane 是啥。

Data Plane 一般用来将路由器里的包从 Input 送到 Output,这个过程叫做 Forwarding。

Control Plane 用于将包从一个路由器发到另一个路由器,这个过程叫做 Routing。

而如何去管理,构建 Control Plane 是个非常重要的问题,因为它牵涉到如何将包从一个路由器发到另一个路由器,这也是本篇文章的重点内容。

Per-Router 构建法

什么是 Per-Router 呢?就是在每个路由器里都算出路由表,以此作为基础发信息。比如从要从北京发到广州,其中要经过杭州,上海,厦门,那么这些城市都要自己去算一张路由表。信息从这些“中间”城市经过时就会去看这个路由表,来确定下一站要去哪。

6f4491e4a534

但这种方法有个大问题,2,3个路由器好说,全球几十亿个路由器,每个路由器都要存一张到所有路由器的表那不是存数据存爆炸了?还有啊,每个路由器之间是要互相交换信息的,如果数据要共享那交换数据就跟下载 4K 视频差不多了。

要解决这个问题,我们可以想想一个国家是怎么治理地区的——分治法!想想新疆和西藏这些自治区,都是自己管理自己的。所以网络世界多了一个名词——Autonomous System,简写为 AS。

我们将路由器分在不同的 AS 里,每个 AS 去管理自己的路由器,那么路由器存的数据也就是 AS 里所有路由器的数据了,数据量一下子就减少了很多!

Autonomous System

每个 Autonomous System 都会有自己的 ID,也叫做 ASN (Autonomous System Number),一般为 16~32 位。下面就是 AS 的一个例子。

6f4491e4a534

先来介绍一下 AS 里的术语:

Local Traffic: 起点路由器到终点路由器的信息传输。

Transit Traffic: 这种传输会被别的 AS 传递到下一个 AS。

Transit AS: 这种 AS 可以传递 Transit Traffic 到下一个 AS。

Stub AS: Stub 英文就是根,所以这种类型的 AS 一般是叶子节点,一般只和一个 AS 有连接,而且只有 Local Traffic。

Multihomed Stub AS: 这种 AS 会连接多个 AS,但是只能有 Local Trafic。

上面的图中 AS1 是 Multi-homed stub,AS3 和 AS4 是 Transit AS,AS2 和 AS5 是 Stub AS。

AS 相关协议

AS 就相当于将大堆路由器分成很多小堆,所以 AS 之间沟通本质上也是路由器在沟通,不同的是沟通的路由器在不同的 AS 里。这些路由器就像是外交大使一样,而外交大使一般要求会别国的语言吧,这些“别国的语言”在这里就是协议。

AS 的协议分成两种:

Interior Gateway Protocol: 简写成 IGP,其实是一系列协议的统称,如 RIP,OSPF 等,这些协议主要是用来告诉 AS 里面路由器如何将包发到别的 AS,或者其他 AS 的信息。

Exterior Gateway Protocol: 简写成 EGP,这也是一系列协议的统称,在这些协议中 BGP (Border Gateway Protocol) 是用的最多的。这个是解决 AS 之间如何交流问题的。

6f4491e4a534

路由协议

上面说到的 RIP,OSPF 和 BGP 都是路由协议,后面还会介绍,不过现在我们要理解为什么要这些协议。上面我只是模糊地说这些协议都是用来告知“信息”的,那到底是什么信息呢?还记得刚开始说 Control Plane 的作用么?就是用来 Routing 的,那怎么做 Routing 呢?用 Routing Table 呀。Routing Table 怎么造起来呢?这些“信息”就是用来造 Routing Table 的。

所以现在我先介绍路由协议是什么(其实就是路由算法),再去讲这三个协议,其实他们都是路由协议的实现方式而已。

组成部分

路由协议重要的点有下面三个:

要有一种方式让路由器知道和别的路由器到底能不能通信。

要有一种方式让路由器知道要走哪条最短的路可以到达别的路由器。

要有一种方式使得改了网络结构后,上面两点会自动更新。

Link State 算法

每个路由器都会知道相邻路由器的信息

距离信息会广播到每个路由器,相当于是全局信息

每个路由器会使用自己的算法去计算 Routing Table

关键词:动态更新,使用局部数据

Distance Vector 算法

每个路由器都会知道相邻路由器的信息(没看错和上面的一样)

每个路由器会周期性地将自己的信息发给相邻的路由器

如果网络结构改变了,那么会更新相邻的路由器,最终整个网络都会完成更新

关键词:全局一波更新,使用全局数据

还是路由协议

下面开始讲对上面两种算法的应用,也就是上面提到的 RIP,OSPF 和 BGP。

RIP

RIP 也叫做 Routing Information Protocol。 先说明,这个协议是属于内部 Routing 的也就是属于 IGP。

使用 Distance Vector 算法

每个路由器都知道相邻路由器的 Link 权重

Link 的权重通常都是按 Hop 来算的

将自己 Routing Table 广播到相邻路由器

使用 Bellman-Ford 算法来计算 Routing Table

路由器会以下信息发给自己邻居

通过 UDP 发送 RIP 信息

Routing Table

这个怎么感觉和上面的讲的 Distance Vector 算法差不多呀?哎,你有这感觉就对了。所以说这些协议就是上面算法的实现而已。我们来看个例子吧。

6f4491e4a534

A 将自己的 Routing Table 发给 B,B 就会更新自己的 Routing Table,就是这么简单!

不过呢,这个协议也有自己的缺点:

特别依赖邻居的信息,如果不设置一个值,路由器之间会不断发自己的 Routing Table 给对方,严重一点还会出现循环发包情况。所以一般会设置一个 Counter 值来看这个信息已经经过多少个路由器了。

因为每个路由器更新信息都依赖于相邻的人,所以当网络结构变了后,要一个一个传来更新,更新速度比较慢。

要关键的是,这个协议已经不用了,Rest In Peace.

OSPF

OSPF 也叫做 Open Shortest Path First。这个协议也是属于 IGP 的。下面是它的实现。

使用 Link-State 算法

每个路由器都会存放一个完整的 AS 网络结构

会将 Link State 信息发给每个路由器

使用 Dijkstra 算法

OSPF 会在整个 AS 里将信息广播到全部路由器

使用 IP 层来完成

既然要存放全局信息就要存在大容量数据结构里,而不是一张小表格,所以这些数据存放在数据库里,其中包含了 LSDB (Link State Database) 和存放整个网络拓扑结构的数据库。流程如下

6f4491e4a534

当 AS 的网络结构发生变化后,会产生 LSA (Link State Announcement) 来通过所有路由器去完成数据库的更新。每个 LSA 会有一个 ID ,路由器以此来判断是否已经接收过这个 LSA 了。

6f4491e4a534

这些 LSA 有下面几种类型

hello:用于与相邻 router 构建连接的,并用来选出 Designated Router (DR) and BackupDesignated Router (BDR )

database description (DBD, DD), 包含了简短的数据库信息,用于检测是否和本地数据库一样,不一样就更新

link-state request: router 用于获取数据库信息

link-state update: 用于回应 LSR,还有更新最新信息

link-state acknowledge (LSACK):告知已经收到了 LSU

再来说说 OSPF 的特点

安全:所有的 OSPF 都会有鉴权,会更安全

在相同总权重数下允许多条路

可以在同一个 domain 下分层

6f4491e4a534

这上面的分层过程中,要注意下面几个点

双层结构

LSA 只会在同一个 area 出现

每个节点都会有完整的 area 信息

只从 border router 里知道到别的 area 最短路径

Area Border Router

知道到别的网络最短路径

Backbone Router

Route 会受限于 Backbone Router

Boundary Router (Gateway) 会连接到别的 AS

BGP

OSPF 说了很多,因为这是比较主流的,下面说一个用于 EGP 的主流协议——BGP (Border Gateway Protocol)。

BGP 又可以分成下面两个

eBGP (external Border Gateway Protocol): Border Router 从相邻的 AS 里获取子网的 reachability

iBGP (internal Border Gateway Protocol): 将别的 AS 的 reachability 传给 AS 里的路由器

看起来 iBGP 属于内部 Routing 呀,不对,因为这个主要是用来告知该 AS 路由器里别的 AS 的情况,所以属于外部 Routing。

AS 之间交换 BGP 流程如下

AS1 和 AS 2 构建 TCP 连接

交换 BGP 信息

只要是还有连接,那么就会周期性地更新信息

其实 BGP 到这里就没有了,BGP 就是传递其他 AS 的信息的,不是说好要造一个 Routing Table,然后用 XXX 算法来实现么?这就要扯到 Policy 了。

AS 之间的交互

现在要解决的是 AS 之间的交互,就是刚刚说的外部 Routing。我们先想一个简单的思路:求 AS 的最短路径来完成 Routing,好,我给下面的例子

6f4491e4a534

如果用最短路径,左边路径是 3 个 hop,右边是 1 个 hop,难道我就要走右边了么?不见得吧,那有 4 个 Router 呢。所以外部 Routing 要比我们想像得要复杂,不能简简单单地用算法解决,而是应该在不同悦下用不同的方式去做 Routing,这里的 “不同方式” 就是所说的 Policy。流程如下

6f4491e4a534

选择 route

主流怎么选择最“好”路径可以参考下面的标准

Local preference

Shortest AS-PATH

Closest NEXT-HOP

额外的标准

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值