计算机网络原理
第五章 第4节
这一节学一下BGP + SDN 控制平面。
一、为什么要层次化路由?
前面 LS、DV 都是在一个比较理想的小网络里讲的。 但是互联网太大,不能让所有路由器都在同一个平面里交换路由信息。
如果整个互联网都用一个统一路由算法,会有两个大问题。
1. 规模问题
互联网里有大量路由器和目标网络。
如果所有路由器都知道全网所有细节:
路由表会非常大;
路由信息交换量巨大;
链路变化会影响全网;
算法计算量太大。
所以要把互联网分层。
2. 管理问题
互联网不是一个人管理的。
不同网络属于不同组织:
学校;
公司;
ISP;
数据中心;
运营商。
每个组织都希望自己决定内部怎么路由,不想把所有细节暴露给别人。
所以互联网采用:
自治系统 AS + 层次化路由。
二、AS:自治系统
AS 全称:
中文叫:自治系统。
一个 AS 通常是一个 ISP 或一个组织管理的一组路由器和网络。
每个 AS 有自己的编号:
比如 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 全称:
中文叫:边界网关协议。
它是互联网中事实上的:AS 间路由标准协议。
BGP 的作用是:
让一个 AS 告诉其他 AS:我能到达哪些网络前缀,以及通过我可以到达哪些目的网络。
BGP 不是普通的最短路算法
RIP、OSPF 更偏向于算“代价最小”的路径。
但是 BGP 不只是看最短路,它更重视:
策略。
比如:
商业关系;
谁是客户;
谁是提供商;
是否愿意帮别人转发流量;
哪条路径更赚钱;
哪条路径不想让别人用。
所以 BGP 是:路径向量协议 path-vector protocol。
它有点像 DV,但不是普通 DV。
五、eBGP 和 iBGP
BGP 分成两种连接。

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 通告的内容

BGP 通告的路由信息可以概括成:
也就是:网络前缀 + 路径属性。
1. prefix
prefix 是目的网络前缀。
比如:
意思是:我知道怎么到达这个目标网络。
2. attributes
属性描述这条路径的特征。
AS-PATH
AS-PATH 表示:到达该前缀要经过的 AS 序列。
比如:
表示要到达 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 可以到达 X。
这是 eBGP 通告。
第二步:AS2 内部传播
AS2 的 2c 收到后,通过 iBGP 告诉 AS2 内部其他路由器:
我知道一条到 X 的路径,路径是 AS3, X。

第三步:AS2 再通告给 AS1
AS2 的 2a 再通过 eBGP 告诉 AS1 的 1c:
注意这里 AS2 把自己加到了 AS-PATH 前面。
所以路径变成:

九、BGP 路径再通告
一个 AS 收到路径后,不一定会再通告给别人。
它会根据自己的策略决定:
是否接受这条路径,是否把这条路径再通告给其他邻居 AS。
所以 BGP 不是单纯地“学到了就传”。
而是:
学到路径 → 按策略过滤 → 选择路径 → 按策略再通告。
十、一个 AS 可能学到多条路径
比如 AS1 到 X 可能学到两条路径:
从 AS2 学到:
直接从 AS3 学到:
这时候 AS1 要选择一条最合适的路径。
BGP 路由选择就发生在这里。
十一、BGP 怎么把路由放进转发表?

假设 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。
也就是:
如果有多个出口都能到达同一个外部目的地,选择离自己最近的出口。

举例
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 通过通告实现策略

这部分是 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 数量最少的路径。
比如:
比:
短。
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:
软件定义网络。
十九、SDN 的核心思想
SDN 的核心是:控制平面和数据平面分离。
传统网络
每台路由器里都有:
数据平面:转发分组;
控制平面:运行路由协议、算路由表。
也就是每台设备都有自己的“大脑”。
SDN 网络
数据平面设备只负责:按流表转发。
控制逻辑集中到远程控制器:
控制器统一计算规则,然后下发给交换机。
所以 SDN 的结构是:

二十、为什么需要逻辑集中控制?
1. 更简单的网络管理
控制器有全局视图,可以统一管理网络。
避免每台设备分别配置导致错误。
2. 更容易实现流量工程
比如你想让:
的流量走:
而不是:
传统路由很难,因为传统路由主要靠链路权重间接控制。
SDN 可以直接下发流表:
这类流量从这些端口走。
3. 网络可编程
SDN 允许通过软件编写网络控制逻辑。
比如:
路由;
访问控制;
防火墙;
负载均衡;
流量监控;
安全检测。
二十一、SDN 和 PC 革命的类比
SDN 可以类比为主机架构/PC 革命。
传统网络设备像早期封闭系统:
专有硬件;
专有操作系统;
专有应用。
SDN 希望变成类似 PC:
通用硬件;
开放操作系统;
开放接口;
第三方应用可开发。
也就是说:
把网络设备从封闭专用盒子,变成开放可编程平台。
二十二、SDN 的四个关键特征
1. 基于流的通用转发
数据平面使用流表进行转发。
流表规则可以匹配多个层次的字段:
MAC;
IP;
TCP/UDP 端口;
输入端口等。
也就是前面讲的:
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 给交换机下发流表。
所以:
二十五、OpenFlow 在 SDN 里的位置
OpenFlow 是一种典型的:南向协议。

它用于控制器和交换机之间通信。
控制器通过 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 控制/数据平面交互例子

假设交换机 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 控制器。

特点:
控制应用和控制器分离;
支持 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 通告内容
重要属性:
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 控制器。
