← 返回 计算机网络原理

计算机网络原理

第五章 第4节

这一节学一下BGP + SDN 控制平面。

一、为什么要层次化路由?

前面 LS、DV 都是在一个比较理想的小网络里讲的。 但是互联网太大,不能让所有路由器都在同一个平面里交换路由信息。

如果整个互联网都用一个统一路由算法,会有两个大问题。

1. 规模问题

互联网里有大量路由器和目标网络。

如果所有路由器都知道全网所有细节:

路由表会非常大;

路由信息交换量巨大;

链路变化会影响全网;

算法计算量太大。

所以要把互联网分层。

2. 管理问题

互联网不是一个人管理的。

不同网络属于不同组织:

学校;

公司;

ISP;

数据中心;

运营商。

每个组织都希望自己决定内部怎么路由,不想把所有细节暴露给别人。

所以互联网采用:

自治系统 AS + 层次化路由。

二、AS:自治系统

AS 全称:

AutonomousSystemAutonomousSystem

中文叫:自治系统。

一个 AS 通常是一个 ISP 或一个组织管理的一组路由器和网络。

每个 AS 有自己的编号:

ASNASN

比如 AS1、AS2、AS3。

AS 内部和 AS 之间

路由分成两类:

类型 | 英文 | 解决问题 | 典型协议 AS 内部路由 | intra-AS routing | 一个 AS 内部怎么走 | RIP、OSPF AS 之间路由 | inter-AS routing | 不同 AS 之间怎么到达 | BGP

可以这样记:

OSPF/RIP 管家里怎么走,BGP 管不同家庭之间怎么走。

三、层次路由的优点

1. 解决规模问题

AS 内部:

只需要处理本 AS 内部有限数量的路由器和网络。

AS 之间:

一个 AS 对外可以被看成一个整体,不需要暴露所有内部细节。

比如一个 AS 内部有很多子网,对外可以聚合成一个前缀。

这样外部路由器不需要知道 AS 里面每一台路由器怎么连。

2. 解决管理自治问题

每个 AS 可以自己选择内部路由协议。

比如:

AS1 内部用 OSPF;

AS2 内部用 RIP;

AS3 内部用 IS-IS。

外部看不到内部细节,只需要知道:

这个 AS 能到哪些网络前缀。

四、BGP 是什么?

BGP 全称:

BorderGatewayProtocolBorderGatewayProtocol

中文叫:边界网关协议。

它是互联网中事实上的:AS 间路由标准协议。

BGP 的作用是:

让一个 AS 告诉其他 AS:我能到达哪些网络前缀,以及通过我可以到达哪些目的网络。

BGP 不是普通的最短路算法

RIP、OSPF 更偏向于算“代价最小”的路径。

但是 BGP 不只是看最短路,它更重视:

策略。

比如:

商业关系;

谁是客户;

谁是提供商;

是否愿意帮别人转发流量;

哪条路径更赚钱;

哪条路径不想让别人用。

所以 BGP 是:路径向量协议 path-vector protocol。

它有点像 DV,但不是普通 DV。

五、eBGP 和 iBGP

BGP 分成两种连接。

第五章 第4节 配图 1

1. eBGP

eBGP 是 external BGP。

作用:

在不同 AS 的边界路由器之间交换可达性信息。

比如 AS2 和 AS3 之间的网关路由器会运行 eBGP。

eBGP 负责告诉对方:我这个 AS 或者通过我能到达哪些网络前缀。

2. iBGP

iBGP 是 internal BGP。

作用:在同一个 AS 内部传播从外部学到的 BGP 路由信息。

比如 AS2 的边界路由器 2c 从 AS3 学到了“可以到达 X”,那 2c 要把这个信息告诉 AS2 内部其他路由器,比如 2a、2b、2d。

这个内部传播就靠 iBGP。

eBGP 管 AS 之间说话,iBGP 管 AS 内部传播外部路由消息。

六、BGP 会话

两个 BGP 路由器之间会建立:半永久 TCP 连接。

它们通过这个 TCP 连接交换 BGP 报文。

所以 BGP 报文不是直接裸跑在 IP 上,而是基于 TCP。

这和 OSPF、RIP 对比一下:

协议 | 运行方式 RIP | 使用 UDP OSPF | 直接封装在 IP 中 BGP | 使用 TCP

七、BGP 通告的内容

第五章 第4节 配图 2

BGP 通告的路由信息可以概括成:

prefix+attributesprefix+attributes

也就是:网络前缀 + 路径属性。

1. prefix

prefix 是目的网络前缀。

比如:

200.23.16.0/20200.23.16.0/20

意思是:我知道怎么到达这个目标网络。

2. attributes

属性描述这条路径的特征。

AS-PATH

AS-PATH 表示:到达该前缀要经过的 AS 序列。

比如:

AS2,AS3,XAS2,AS3,X

表示要到达 X,需要经过 AS2,再到 AS3。

AS-PATH 的作用:

用于路由选择;

防止环路。

如果一个 AS 看到 AS-PATH 里已经有自己,就知道这条路会形成环路,于是不接受。

NEXT-HOP

NEXT-HOP 表示:

到达这个前缀时,下一跳应该交给哪个具体路由器接口。

注意,AS-PATH 是 AS 层面的路径,而 NEXT-HOP 是具体路由器层面的下一跳。

八、BGP 路径通告过程

假设 X 在 AS3 里面。

第一步:AS3 宣告 X

AS3 的网关路由器 3a 对 AS2 的 2c 说:

AS3,XAS3,X

意思是:通过我 AS3 可以到达 X。

这是 eBGP 通告。

第二步:AS2 内部传播

AS2 的 2c 收到后,通过 iBGP 告诉 AS2 内部其他路由器:

我知道一条到 X 的路径,路径是 AS3, X。

第五章 第4节 配图 3

第三步:AS2 再通告给 AS1

AS2 的 2a 再通过 eBGP 告诉 AS1 的 1c:

AS2,AS3,XAS2,AS3,X

注意这里 AS2 把自己加到了 AS-PATH 前面。

所以路径变成:

AS2AS3XAS2\to AS3\to X
第五章 第4节 配图 4

九、BGP 路径再通告

一个 AS 收到路径后,不一定会再通告给别人。

它会根据自己的策略决定:

是否接受这条路径,是否把这条路径再通告给其他邻居 AS。

所以 BGP 不是单纯地“学到了就传”。

而是:

学到路径 → 按策略过滤 → 选择路径 → 按策略再通告。

十、一个 AS 可能学到多条路径

比如 AS1 到 X 可能学到两条路径:

从 AS2 学到:

AS2,AS3,XAS2,AS3,X

直接从 AS3 学到:

AS3,XAS3,X

这时候 AS1 要选择一条最合适的路径。

BGP 路由选择就发生在这里。

十一、BGP 怎么把路由放进转发表?

第五章 第4节 配图 5

假设 AS1 的路由器 1a、1b、1d 通过 iBGP 学到:

通过 1c 可以到达 X。

但是 1a 自己还要知道:

我到 1c 怎么走?

这个不是 BGP 自己解决,而是靠 AS 内部路由协议,比如 OSPF。

例子

1a 学到:到 X 要先去 1c。

然后 OSPF 告诉 1a:到 1c 应该走接口 2。

于是 1a 的转发表里可以写:

目的 | | | 接口 X | | | 2

所以:BGP 决定去哪个出口,OSPF 决定怎么到这个出口。

十二、热土豆路由 Hot Potato Routing

热土豆路由是 BGP 里的一个经典策略。

它的思想是:尽快把分组扔出自己的 AS。

也就是:

如果有多个出口都能到达同一个外部目的地,选择离自己最近的出口。

第五章 第4节 配图 6

举例

AS2 内部路由器 2d 学到:

可以通过 2a 到达 X;

也可以通过 2c 到达 X。

如果根据 AS-PATH,两条可能一样或者 2a 那条更长。

但是热土豆策略不关心 AS 外面的总代价,它只关心:

在本 AS 内部到哪个出口最近。

如果 2d 到 2a 的 OSPF 代价更小,就选择 2a。

即使从全局看,通过 2a 可能不是最短路径。

热土豆路由:尽快把流量送出本 AS,只优化本 AS 内部代价。

十三、BGP 报文类型

BGP 报文在 BGP 对等体之间交换,使用 TCP 连接。

主要有四类。

1. OPEN

用于打开到远程 BGP 对等体的 TCP 连接,并进行身份认证。

2. UPDATE

用于:

通告新的路径;

撤销旧的路径。

这是 BGP 最核心的报文。

3. KEEPALIVE

用于保持连接。

如果没有 UPDATE,也要周期性发送 KEEPALIVE,表示:

我还活着,连接还有效。

4. NOTIFICATION

用于报告错误,也可以用于关闭连接。

十四、BGP 通过通告实现策略

第五章 第4节 配图 7

这部分是 BGP 和 OSPF/RIP 最大的区别。

BGP 不只是算最短路,而是根据策略决定:

哪些路由要告诉谁,哪些路由不能告诉谁。

典型商业关系

有三类网络:

provider network:提供商网络;

customer network:客户网络;

dual-homed network:双宿网络,连接了两个提供商。

比如:

A、B、C 是 provider;

x、w、y 是 customer;

x 同时连接 B 和 C,所以 x 是 dual-homed。

策略的例子

ISP 通常愿意转发:自己客户的流量。

但不愿意免费帮其他 ISP 转发过境流量。

比如 x 同时连接 B 和 C。

x 可能不希望 B 通过自己去到 C。

所以 x 不会向 B 通告:我可以到达 C。

因为一旦通告,B 可能把去 C 的流量发给 x,x 就变成免费中转站。

(也就是说BGP策略其实是优先选择为我付钱的客户提供我能给的路径,比如说两个客户之间可以通路,或者和那些我向更高级ISP付款所买来的通路网络,也就是提供商建立的合作关系之间提供的通路,也就是购买者—中间客户商—更高级客户商之间的通路关系,但是拒绝其他未建立合作的客户商搭乘自己的通路,这样自己变成免费中转站)

BGP 的通告不是“我知道就告诉你”,而是“我愿意让你走,我才告诉你”。

十五、BGP 路由选择顺序

BGP 路由选择的一般因素。

当路由器学到多条到目标 AS 的路径时,会按以下因素选择:

本地偏好值 Local Preference;

最短 AS-PATH;

最近的 NEXT-HOP,也就是热土豆路由;

其他附加规则。

1. 本地偏好值

这是策略优先级最高的一类因素。

管理员可以设置:

更喜欢某个出口、某个提供商、某类客户路径。

2. 最短 AS-PATH

如果本地偏好相同,可能选择经过 AS 数量最少的路径。

比如:

AS3,XAS3,X

比:

AS2,AS3,XAS2,AS3,X

短。

3. 热土豆路由

如果前面还分不出来,就看哪个 NEXT-HOP 最近。

也就是选内部代价最低的出口。

十六、为什么 AS 内和 AS 间路由不同?

1. 策略不同

AS 内部:同一个管理者,更关注性能。

AS 之间:

不同组织之间,有商业和策略关系。

所以 AS 间路由不能只看最短路径。

2. 可扩展性不同

AS 内部规模相对有限,可以运行 OSPF 这种详细算法。

AS 之间规模巨大,只能用更抽象的 AS-PATH 和前缀通告。

3. 性能关注不同

AS 内:尽量优化性能,比如低延迟、高带宽。

AS 间:策略通常比性能更重要。

十七、BGP的总结

BGP 是互联网 AS 间路由协议。 它通过 eBGP 在 AS 之间传播网络前缀的可达性,通过 iBGP 在 AS 内部传播外部路由信息。

BGP 通告的核心内容是 prefix 加 attributes,其中重要属性有 AS-PATH 和 NEXT-HOP。

AS-PATH 可以描述经过哪些 AS,并防止环路;

NEXT-HOP 指出下一跳边界路由器。BGP 路由选择不只是最短路,而是基于策略、本地偏好、AS-PATH 长度、热土豆路由等因素。

十八、SDN 为什么出现?

传统互联网控制平面是:每台路由器自己运行路由协议,自己算路由表。

也就是每路由器控制平面。

这种方式的问题是:

配置复杂;

出错难排查;

不容易做统一流量工程;

不容易实现复杂策略;

网络设备往往是封闭专有系统。

所以后来出现 SDN:

SoftwareDefinedNetworkingSoftwareDefinedNetworking

软件定义网络。

十九、SDN 的核心思想

SDN 的核心是:控制平面和数据平面分离。

传统网络

每台路由器里都有:

数据平面:转发分组;

控制平面:运行路由协议、算路由表。

也就是每台设备都有自己的“大脑”。

SDN 网络

数据平面设备只负责:按流表转发。

控制逻辑集中到远程控制器:

控制器统一计算规则,然后下发给交换机。

所以 SDN 的结构是:

控制器=大脑\text{控制器}=\text{大脑}
交换机=手脚\text{交换机}=\text{手脚}
第五章 第4节 配图 8

二十、为什么需要逻辑集中控制?

1. 更简单的网络管理

控制器有全局视图,可以统一管理网络。

避免每台设备分别配置导致错误。

2. 更容易实现流量工程

比如你想让:

uzu\to z

的流量走:

uvwzu\to v\to w\to z

而不是:

uxyzu\to x\to y\to z

传统路由很难,因为传统路由主要靠链路权重间接控制。

SDN 可以直接下发流表:

这类流量从这些端口走。

3. 网络可编程

SDN 允许通过软件编写网络控制逻辑。

比如:

路由;

访问控制;

防火墙;

负载均衡;

流量监控;

安全检测。

二十一、SDN 和 PC 革命的类比

SDN 可以类比为主机架构/PC 革命。

传统网络设备像早期封闭系统:

专有硬件;

专有操作系统;

专有应用。

SDN 希望变成类似 PC:

通用硬件;

开放操作系统;

开放接口;

第三方应用可开发。

也就是说:

把网络设备从封闭专用盒子,变成开放可编程平台。

二十二、SDN 的四个关键特征

1. 基于流的通用转发

数据平面使用流表进行转发。

流表规则可以匹配多个层次的字段:

MAC;

IP;

TCP/UDP 端口;

输入端口等。

也就是前面讲的:

Match+ActionMatch+Action

2. 控制平面和数据平面分离

交换机只负责高速转发。

控制器负责计算和安装规则。

3. 控制功能在数据平面交换机之外

控制器不在每台交换机内部,而是远程运行。

它可以是服务器集群。

4. 可编程控制应用

控制器上面可以跑各种网络应用:

routing;

access control;

load balance;

firewall;

traffic engineering。

二十三、SDN 架构三层

SDN 可以分成三层:

1. 数据平面交换机

也就是底层 SDN-controlled switches。

特点:

快速;

简单;

硬件实现转发;

按控制器安装的流表处理分组。

它们不自己算复杂路由。

2. SDN 控制器

控制器像网络操作系统。

它负责:

维护网络状态信息;

收集拓扑;

收集链路状态;

管理主机信息;

管理交换机信息;

计算流表;

和底层交换机通信;

给上层应用提供 API。

3. 网络控制应用

比如:

routing;

firewall;

load balancing;

access control;

traffic engineering。

这些应用通过控制器提供的接口来控制网络。

二十四、北向接口和南向接口

1. 北向接口 Northbound API

控制器向上给网络控制应用提供的接口。

比如:

应用想要查看拓扑、设置路径、做负载均衡,就通过北向 API 调用控制器。

常见形式有 REST API。

2. 南向接口 Southbound API

控制器向下和交换机通信的接口。

比如:

控制器通过 OpenFlow 给交换机下发流表。

所以:

应用控制器交换机\text{应用}\overline{↔}\text{控制器}\overline{↔}\text{交换机}

二十五、OpenFlow 在 SDN 里的位置

OpenFlow 是一种典型的:南向协议。

第五章 第4节 配图 9

它用于控制器和交换机之间通信。

控制器通过 OpenFlow:

查询交换机状态;

修改流表;

下发转发规则;

接收交换机事件;

管理端口状态。

二十六、OpenFlow 报文类型

PPT 里把 OpenFlow 报文分成几类。

1. 控制器到交换机报文

Controller-to-switch messages。

常见功能:

查询交换机特性;

设置交换机配置;

修改状态;

添加、删除、修改流表项;

让交换机从某个端口输出分组。

2. 异步消息

Asynchronous messages。

由交换机主动发给控制器。

比如:

有分组进来但没有匹配流表项;

某条流被删除;

某个端口状态变化。

3. 对称消息

Symmetric messages。

控制器和交换机双方都可以发送。

比如:

keepalive;

echo;

错误通知。

二十七、OpenFlow 控制器-交换机报文重点

1. 特性

控制器查询交换机支持什么能力。

交换机回复:

端口信息;

支持的表;

支持的动作等。

2. 配置

控制器查询或设置交换机配置参数。

3. 修改状态

控制器增加、删除、修改 OpenFlow 流表项。

这是最核心的操作。

4. 分组输出

控制器可以指示交换机:

把某个分组从某个端口发出去。

5. 分组进入 Packet-in

当交换机收到一个分组,但不知道怎么处理时,可以把它发给控制器。

控制器再决定怎么处理。

6. 流移除

当某个流表项超时或被删除时,交换机通知控制器。

7. 端口状态

当端口 up/down 变化时,交换机通知控制器。

二十八、SDN 控制/数据平面交互例子

第五章 第4节 配图 10

假设交换机 S1 发现链路坏了。

第一步:S1 检测到链路失效

S1 通过 OpenFlow 端口状态报文通知控制器。

第二步:控制器更新网络状态

控制器收到报文后,更新自己的链路状态数据库。

第三步:路由应用收到变化

运行在控制器上的 Dijkstra 路由应用被通知:

网络拓扑变了。

第四步:路由应用重新计算路径

应用读取控制器维护的网络图和链路状态,重新算最短路径。

第五步:生成新的流表

路由应用与控制器中的流表计算模块交互,得到新的流表项。

第六步:控制器下发新流表

控制器通过 OpenFlow 把新规则安装到对应交换机上。

这一过程对应一句话

交换机报告事件,控制器更新状态,应用重新计算,控制器下发规则。

二十九、ODL 和 ONOS

两个 SDN 控制器。

1. OpenDaylight,ODL

ODL 是一个开源 SDN 控制器平台。

特点:

提供 REST、RESTCONF、NETCONF 等北向接口;

有服务抽象层 SAL;

支持 OpenFlow、NETCONF、SNMP、OVSDB 等南向协议;

可以集成拓扑处理、交换机管理、统计管理、转发规则管理等功能。

2. ONOS

ONOS 也是开源 SDN 控制器。

第五章 第4节 配图 11

特点:

控制应用和控制器分离;

支持 intent 意图框架;

关注分布式、高可靠、可扩展;

适合运营商级网络。

Intent 意图框架

Intent 的意思是:

应用描述“想要什么”,而不是描述“具体怎么做”。

比如应用说:

我要让主机 A 和主机 B 连通,并且带宽满足要求。

控制器负责把这个高层意图翻译成具体流表规则。

三十、BGP 和 SDN 的整体关系

传统互联网控制平面

代表:

RIP;

OSPF;

BGP。

特点:每台路由器运行协议,分布式计算路由。

SDN 控制平面

代表:

OpenFlow;

ODL;

ONOS。

特点:

逻辑集中控制,控制器计算规则,交换机按流表执行。

三十一、复习

1. BGP 是什么?

BGP 是互联网 AS 间路由协议,是路径向量协议,负责在 AS 之间通告网络前缀可达性。

2. eBGP 和 iBGP 区别

类型 | 作用 eBGP | 不同 AS 之间交换路由信息 iBGP | 同一 AS 内部传播外部学到的 BGP 路由

3. BGP 通告内容

prefix+attributesprefix+attributes

重要属性:

AS-PATH;

NEXT-HOP。

4. AS-PATH 的作用

表示经过的 AS 序列;

用于路由选择;

防止环路。

5. NEXT-HOP 的作用

指出到达该前缀应交给哪个下一跳路由器。

6. BGP 报文类型

OPEN;

UPDATE;

KEEPALIVE;

NOTIFICATION。

7. 热土豆路由

在多个出口都能到达目标时,选择本 AS 内部代价最低、最近的出口,尽快把流量送出本 AS。

8. BGP 路由选择顺序

一般考虑:

本地偏好值;

最短 AS-PATH;

最近 NEXT-HOP;

其他规则。

9. SDN 的核心

控制平面和数据平面分离,控制器逻辑集中计算,交换机按流表转发。

10. SDN 三层架构

网络控制应用;

SDN 控制器;

数据平面交换机。

11. 北向接口和南向接口

接口 | 方向 | 作用 北向 API | 控制器 ↔ 应用 | 给应用提供网络抽象和控制能力 南向 API | 控制器 ↔ 交换机 | 下发流表、收集状态

12. OpenFlow 是什么?

OpenFlow 是控制器和交换机之间的南向协议,用来安装流表、查询状态和处理事件。

BGP 是互联网 AS 间路由协议。

它通过 eBGP 在 AS 之间交换路由,通过 iBGP 在 AS 内部传播外部路由。BGP 通告的是 prefix + attributes,其中 AS-PATH 表示经过的 AS 序列,NEXT-HOP 表示下一跳。

BGP 的路由选择受策略影响,不只是最短路径,常见因素包括本地偏好、AS-PATH 长度、热土豆路由等。

SDN 是一种新的控制平面思想。

它把控制平面和数据平面分离,数据平面交换机只按流表转发,远程控制器维护全局网络状态并计算规则。

OpenFlow 是典型南向协议,用于控制器和交换机之间下发流表、查询状态和处理事件。ODL、ONOS 是典型 SDN 控制器。

AS间路由BGPBGPprefix+ASPATH+NEXTHOP+策略SDN控制/数据平面分离OpenFlow控制器下发流表AS\text{间路由}⇒BGPBGP⇒prefix+AS-PATH+NEXT-HOP+\text{策略}SDN⇒\text{控制}/\text{数据平面分离}OpenFlow⇒\text{控制器下发流表}