美文网首页程序员程序员技术栈
计算机网络: 网络层(Control Plane)

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

作者: 写代码的海怪 | 来源:发表于2019-03-02 01:24 被阅读9次

    网络层里分为两层: 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
    • 额外的标准

    相关文章

      网友评论

        本文标题:计算机网络: 网络层(Control Plane)

        本文链接:https://www.haomeiwen.com/subject/dmsduqtx.html