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

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

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

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

Autonomous System

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

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

  1. Local Traffic: 起点路由器到终点路由器的信息传输。
  2. Transit Traffic: 这种传输会被别的 AS 传递到下一个 AS。
  3. Transit AS: 这种 AS 可以传递 Transit Traffic 到下一个 AS。
  4. Stub AS: Stub 英文就是根,所以这种类型的 AS 一般是叶子节点,一般只和一个 AS 有连接,而且只有 Local Traffic。
  5. Multihomed Stub AS: 这种 AS 会连接多个 AS,但是只能有 Local Trafic。

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

AS 相关协议

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

AS 的协议分成两种:

  1. Interior Gateway Protocol: 简写成 IGP,其实是一系列协议的统称,如 RIP,OSPF 等,这些协议主要是用来告诉 AS 里面路由器如何将包发到别的 AS,或者其他 AS 的信息。
  2. Exterior Gateway Protocol: 简写成 EGP,这也是一系列协议的统称,在这些协议中 BGP (Border Gateway Protocol) 是用的最多的。这个是解决 AS 之间如何交流问题的。

路由协议

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

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

组成部分

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

  1. 要有一种方式让路由器知道和别的路由器到底能不能通信。
  2. 要有一种方式让路由器知道要走哪条最短的路可以到达别的路由器。
  3. 要有一种方式使得改了网络结构后,上面两点会自动更新。

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 算法差不多呀?哎,你有这感觉就对了。所以说这些协议就是上面算法的实现而已。我们来看个例子吧。

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

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

  1. 特别依赖邻居的信息,如果不设置一个值,路由器之间会不断发自己的 Routing Table 给对方,严重一点还会出现循环发包情况。所以一般会设置一个 Counter 值来看这个信息已经经过多少个路由器了。
  2. 因为每个路由器更新信息都依赖于相邻的人,所以当网络结构变了后,要一个一个传来更新,更新速度比较慢。
  3. 要关键的是,这个协议已经不用了,Rest In Peace.

OSPF

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

  • 使用 Link-State 算法
    • 每个路由器都会存放一个完整的 AS 网络结构
    • 会将 Link State 信息发给每个路由器
    • 使用 Dijkstra 算法
  • OSPF 会在整个 AS 里将信息广播到全部路由器
    • 使用 IP 层来完成

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

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

这些 LSA 有下面几种类型

  1. hello:用于与相邻 router 构建连接的,并用来选出 Designated Router (DR) and BackupDesignated Router (BDR )
  2. database description (DBD, DD), 包含了简短的数据库信息,用于检测是否和本地数据库一样,不一样就更新
  3. link-state request: router 用于获取数据库信息
  4. link-state update: 用于回应 LSR,还有更新最新信息
  5. link-state acknowledge (LSACK):告知已经收到了 LSU

再来说说 OSPF 的特点

  • 安全:所有的 OSPF 都会有鉴权,会更安全
  • 在相同总权重数下允许多条路
  • 可以在同一个 domain 下分层

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

  • 双层结构
    • 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 流程如下

  1. AS1 和 AS 2 构建 TCP 连接
  2. 交换 BGP 信息
  3. 只要是还有连接,那么就会周期性地更新信息

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

AS 之间的交互

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

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

选择 route

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

  • Local preference
  • Shortest AS-PATH
  • Closest NEXT-HOP
  • 额外的标准
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容