BGP 协议详解

边界网关协议第 4 版(Border Gateway Protocol 4)· 依据 RFC 4271(2006 年 1 月)与 8 篇扩展文档编写
RFC 4271RFC 4760RFC 4456RFC 1997RFC 4360RFC 7432RFC 8365RFC 9136RFC 7938域间路由 · 路径矢量 · TCP/179

1.概述

1.1 BGP 是什么:互联网的路由胶水

BGP(Border Gateway Protocol,边界网关协议)第 4 版是域间路由(Inter-Domain Routing)的事实标准——全球互联网被划分为数万个自治系统(AS),AS 内部跑 OSPF、IS-IS 这类 IGP,AS 与 AS 之间几乎只跑 BGP。没有 BGP,各运营商的网络就是一座座孤岛。它也是一种 EGP(外部网关协议),与 IGP 的分工是「IGP 管网内的路,BGP 管网与网之间的路」。

在协议分类上,BGP 是路径矢量(Path Vector)协议:它不像距离矢量那样只告诉邻居「我离你几跳」,也不像链路状态那样泛洪全网拓扑,而是在每条路由里携带完整经过的 AS 序列(AS_PATH)——既有距离矢量的简单,又能凭 AS 序列可靠地发现并绕开环路。

范式代表协议一句话原理
距离矢量 DVRIP「我到 X 要 n 跳」——只传度量,不知路径,易环路、收敛慢。
链路状态 LSOSPF / IS-IS全网泛洪拓扑,每台设备独立算最短路径——看得全,但泛洪范围必须受限。
路径矢量 PVBGP「到 X 要经过 AS1→AS3→AS7」——路径即防环依据,还能按策略对路径做加减分。
BGP 跑在 TCP/179 上:BGP 不用 UDP,也不自己造可靠性机制——它把连接管理、按序交付、重传、流控全部外包给 TCP(目的端口 179)。所以 BGP 报文格式里看不到序号、确认号、重传定时器这些字段;BGP 自己的可靠性只剩两个词:KEEPALIVE 心跳Hold Timer。TCP 如何提供这一切(三次握手、累计确认、滑动窗口),见 TCP 协议详解页

1.2 九篇文档的家族地图

BGP-4 本体(RFC 4271)只有 100 来页,但围绕它长出了一个庞大的扩展家族。本页按下图脉络组织,覆盖全部 9 篇:

RFC主题解决什么 · 本页位置
RFC 4271BGP-4 核心规范报文格式、状态机、路径属性、决策过程——本页第 3–6 节的地基。
RFC 4760多协议扩展 MP-BGP用 AFI/SAFI 让 BGP 从「只懂 IPv4」变成「什么都能装」——第 9 节。
RFC 1997Community 团体属性给路由打 4 字节标签做批量策略——第 8 节上半。
RFC 4360Extended Community8 字节扩展团体,Route Target / Route Origin——第 8 节下半。
RFC 4456路由反射 RR免 iBGP 全互联的扩展性方案——第 7 节。
RFC 7432EVPN 架构用 MP-BGP 分发 MAC/IP 可达性——第 10 节。
RFC 8365EVPN over VXLANEVPN 路由在 VXLAN 封装下的具体用法——第 10.3 节。
RFC 9136EVPN IP 前缀路由RT-5 与 IRB 集成路由桥接——第 10.4 节。
RFC 7938数据中心 BGP 实践Clos 架构里 eBGP 通吃 Underlay/Overlay——第 10.5 节。

2.核心概念

2.1 AS 与 ASN:BGP 世界的「国家」与「国号」

自治系统(AS)是在单一管理域下、执行统一路由策略的一组网络——一家运营商、一个大型企业的骨干网通常各是一个 AS。每个 AS 有一个编号 ASN:

2.2 eBGP 与 iBGP:同一个协议,两种脾气

邻居 AS 号不同的会话叫 eBGP(外部),同 AS 内的叫 iBGP(内部)。报文格式完全一样,行为差异却在每一处:

维度eBGP(AS 之间)iBGP(AS 之内)
典型拓扑直连一跳:实现上通常把报文 TTL 置 1 限制在一跳内;跨多跳要显式配置 ebgp-multihop跨整网多跳:两端常是相隔多跳的路由器,TCP 能通即可,邻居地址常用 loopback
NEXT_HOP 行为发向 eBGP 邻居时改写为自己的接口地址转发给 iBGP 邻居时默认原样保留——iBGP 通病「下一跳不可达」由此而来(第 4.4 节)
AS_PATH发出时前置自己的 AS;收到含自己 AS 的路由即丢弃(防环)读写 AS_PATH 都不动——靠水平分割规则防环(下一条)
再通告规则学到的路由可自由发给 eBGP 与 iBGP 邻居iBGP 学到的路由不再发给其他 iBGP 邻居(RFC 4271 §9.2,水平分割)→ 需要全互联或路由反射(第 7 节)
默认管理距离更被信任(如 Cisco AD 20)较不被信任(如 Cisco AD 200)——避免与 IGP 抢转发权

2.3 NLRI:路由的「载荷」

BGP 通告的每一条目的地叫 NLRI(Network Layer Reachability Information,网络层可达信息)。IPv4 单播的 NLRI 编码极简,就是一个二元组:

<长度(1 字节,单位比特), 前缀(变长,按字节向上取整)>
例:192.0.2.0/24 → [24, 192.0.2]  10.0.0.0/8 → [8, 10]  默认路由 0.0.0.0/0 → [0](前缀 0 字节)

前缀部分只带长度字段所需的字节数(/24 带 3 字节、/8 带 1 字节),末尾不足一字节的比特位任意填充——所以 BGP 的 NLRI 天生支持 CIDR 无类前缀。撤销路由的编码与此完全相同;多协议地址族的 NLRI 则装进 MP_REACH/MP_UNREACH 属性里(第 9 节)。

2.4 路由信息库三件套:Adj-RIB-In / Loc-RIB / Adj-RIB-Out

RFC 4271 §3.2 给每台 BGP 路由器定义了三个概念性路由库,路由信息在其中的流动就是 BGP 工作的全部:

Adj-RIBs-In每邻居一份 · 原始入库
入策略filter / route-map
决策过程Phase 1/2/3 · §9
Loc-RIB最优路由 · 本机转发用
出策略route-map / prefix-list
Adj-RIBs-Out每邻居一份 · 打包成 UPDATE
悬停各环节查看说明 · 单击钉住
概念模型 ≠ 实现:RFC 强调三者是概念划分,不要求真存三份数据——实现常用一份数据加指针。但这个模型对排障极有用:路由「丢了」时,按 In → Loc → Out 的顺序逐段排查,总能定位到是哪一段被策略吃掉。

3.BGP 报文格式(RFC 4271 §4)

BGP 只有一类报文外壳 + 五种报文类型。所有报文都以 19 字节定长首部开头,其后按类型跟不同的数据部分;报文最大 4096 字节,最小就是裸首部 19 字节(KEEPALIVE)。多字节字段一律网络字节序。下图为首部结构(Marker 16 字节按每行 32 位展开为 4 行):悬停任意字段查看详解,单击可钉住

Marker(全 1)32 bits · 共 128 bits 之 1/4
Marker(全 1)32 bits · 2/4
Marker(全 1)32 bits · 3/4
Marker(全 1)32 bits · 4/4
Length16 bits · 19–4096
Type8 bits
数据部分…占位 · 变长
数据部分(OPEN / UPDATE / NOTIFICATION 的内容)0 – 4077 字节
悬停查看说明 · 单击钉住 / 取消

3.1 五种报文类型(悬停行查看详情)

Type报文最小长度职责
1OPEN29 字节建联握手:协商参数与能力
2UPDATE23 字节通告 / 撤销路由(唯一干活儿的报文)
3NOTIFICATION21 字节报错并立即拆链
4KEEPALIVE19 字节保活 + 对 OPEN 的确认
5ROUTE-REFRESH23 字节软重置:请邻居重发路由(RFC 2918)
悬停行查看各报文详解 · 单击钉住

3.2 OPEN 报文结构(RFC 4271 §4.2)

OPEN 固定部分 10 字节(最小全长 29 字节),逐字段如下表(悬停行查看详解):

字段长度要点
Version1 字节恒 = 4;谈不拢报 2/1 错误。
My AS2 字节决定 eBGP/iBGP;配错即 2/2 拆链。
Hold Time2 字节0 或 ≥3;双方取小;超时即拆链。
BGP Identifier4 字节= Router ID;选路决胜与 RR 防环都靠它。
Opt Parm Len1 字节可选参数总长度;0 = 无。
Optional Parameters变长TLV 列表;能力协商(RFC 3392)在此。
悬停行查看各字段详解 · 单击钉住

3.3 UPDATE 报文结构(RFC 4271 §4.3)

UPDATE 是五段式变长结构(前四段可因取值为 0 而缺席,最小全长 23 字节)。悬停下图各段查看含义:

① Withdrawn Routes Length2 字节 · =0 则无撤销
② Withdrawn Routes变长 · 可撤多条
③ Total Path Attribute Length2 字节 · =0 则纯撤销
④ Path Attributes变长 · 属性 TLV 序列
⑤ NLRI变长 · 与 ④ 共享属性
悬停各段查看说明 · 单击钉住

3.4 KEEPALIVE 与 NOTIFICATION(§4.4 / §4.5)

错误码/子码是 BGP 排障的第一现场,全表如下(悬停行查看场景提示):

错误码名称子码与典型场景
1报文首部错子码 1–3:Marker 失同步 / Length 非法 / Type 未知
2OPEN 报文错子码 1–7:版本 / AS 号 / RID / 可选参数 / Hold Time / 能力
3UPDATE 报文错子码 1–11:属性列表 / 必备属性缺失 / 标志 / 长度 / AS_PATH
4Hold Timer 超时无子码;邻居失联判死
5FSM 状态机错无子码;状态与报文不匹配
6Cease 终止管理性拆链;子码见 RFC 4486
悬停行查看排障提示 · 单击钉住

4.路径属性(RFC 4271 §5)

BGP 路由的灵魂不在 NLRI,而在路径属性——它是路由的「履历与政策标签」,防环、选路、策略全靠它。每个属性按 TLV 编码(悬停下图各字段):

Flags8 bits · O/T/P/E
Type Code8 bits
Length(1 或 2 字节)8/16 bits
Value(按类型解释)变长
属性 TLV:Flags + Type Code + Length + Value

4.1 四大分类总表(悬停行查看详情)

属性沿两个轴分类:公认(well-known)vs 可选(optional)——实现是否必须认识它;可传递(transitive)vs 不可传递——不认识时能否继续转发。组合出四类:

属性(Type Code)分类一句话
ORIGIN(1)公认 · 必遵 mandatory路由出身:IGP(0)/EGP(1)/INCOMPLETE(2)。
AS_PATH(2)公认 · 必遵 mandatory经过的 AS 序列;防环 + 选路双料主力。
NEXT_HOP(3)公认 · 必遵 mandatory下一跳 IP;eBGP 改写、iBGP 保留。
LOCAL_PREF(5)公认 · 自选 discretionaryAS 内优先级,越大越优,只管出站。
ATOMIC_AGGREGATE(6)公认 · 自选 discretionary「我是有损聚合」的标记,长 0。
AGGREGATOR(7)可选 · 可传递 transitive谁做的聚合:AS + Router ID。
COMMUNITY(8)可选 · 可传递 transitive4 字节标签(AS:NN),批量策略载体。
MED(4)可选 · 不可传递 non-transitive入站引导,越小越优,同邻居 AS 才比。
悬停行查看各属性详解 · 单击钉住

另有三个扩展属性在本页后续章节展开:ORIGINATOR_ID(9)/ CLUSTER_LIST(10)(路由反射,第 7 节)、MP_REACH_NLRI(14)/ MP_UNREACH_NLRI(15)(多协议,第 9 节)、EXTENDED_COMMUNITIES(16)(扩展团体,第 8 节)。

4.2 ORIGIN:路由的出身证明

1 字节枚举,由注入 BGP 的方式决定,沿途不可篡改(常被策略改写除外):

名称来源
0IGP通过 network 命令精确注入,或本地聚合产生——「根正苗红」,选路最优。
1EGP从古老 EGP 协议学来——历史化石,现网基本绝迹。
2INCOMPLETE重分发(redistribute)等其他途径注入——「来路不明」,选路最劣。

4.3 AS_PATH:路径即防环

4.4 NEXT_HOP:eBGP 改写,iBGP 保留

4.5 LOCAL_PREF 与 MED:一对方向相反的旋钮

对比LOCAL_PREFMED
方向出站:本 AS 从哪个口出去入站:建议对方从哪个口进来
传播范围只传 iBGP,出 AS 必剥可在相邻 AS 间传递,进本 AS 后内部可见,不再外传
大小越大越优(默认常 100)越小越优(缺省按 0)
比较前提所有路由间都可比一般只在同一邻居 AS 学来的路由间比
选路顺序位置最优先(仅次于厂商 Weight)靠后(AS_PATH、ORIGIN 之后才比)
优先级与「意志力」:LOCAL_PREF 在选路顺序里压过 AS_PATH 长度——意味着本地策略永远战胜拓扑直觉,这是 BGP「策略优先」哲学的集中体现;运营商之间也因此默认 LOCAL_PREF 不出域、MED 可以不理会,谁都不想被别人改写自己的流量走向。

5.BGP 状态机(RFC 4271 §6 / §8)

每个邻居会话由一台独立的状态机驱动,共 6 个状态。整条正向链路是「TCP 打通 → OPEN 互认 → KEEPALIVE 确认 → Established」;任何环节失败都会回退或拆链重来。实线为正向建联路径,虚线为出错回退;悬停状态节点查看含义与排障提示,迁移条件标在箭头旁。

启动 · 发起 TCP TCP 连接失败 ConnectRetry 超时 · 重试 TCP TCP 建立成功 · 发送 OPEN TCP 建立成功(被动)· 发送 OPEN 收到合法 OPEN · 回 KEEPALIVE 收到 KEEPALIVE OPEN 校验失败 · NOTIFICATION 拆链 Hold 超时 / NOTIFICATION 出错 / NOTIFICATION → 拆 TCP · 回 Idle Established 中周期性交换 UPDATE / KEEPALIVE 实线 = 建联正向流程 · 虚线 = 出错回退(任何状态收到 NOTIFICATION 或 ManualStop 亦回 Idle) Idle Connect Active OpenSent OpenConfirm Established
图 · BGP FSM 六状态迁移(对应 RFC 4271 §8 的 FSM 描述)
一处 RFC 文本与实现的差异:对「Connect 态 TCP 建立失败」,RFC 4271 §8.2.2 原文(未启用可选 DelayOpen 特性时)写的是回 Idle;而经典文献与主流厂商实现均为转 Active 继续重试——设备上看到的邻居在 Idle/Connect/Active 间循环正是这条路径。本图按实现行为绘制,阅读 RFC 原文时留意此差异。

5.1 状态迁移速查表

当前状态触发事件动作下一状态
IdleManualStart(配置生效)起 ConnectRetryTimer;发起 TCP;监听 179Connect
ConnectTCP 建立成功停 ConnectRetry;发送 OPEN;HoldTimer 置大值(建议 4 分钟)OpenSent
ConnectTCP 建立失败释放资源(实现转 Active;RFC 4271 文本回 Idle)Active
ConnectConnectRetry 超时丢弃旧 TCP、重启定时器、重新发起Connect
ActiveConnectRetry 超时重启定时器,再次发起 TCPConnect
ActiveTCP 建立成功发送 OPENOpenSent
OpenSent收到合法 OPEN回 KEEPALIVE;按协商值起 Keepalive/Hold 定时器OpenConfirm
OpenSentOPEN 校验失败发 NOTIFICATION(错误码 2/x);拆 TCPIdle
OpenConfirm收到 KEEPALIVE重置 HoldTimerEstablished
OpenConfirmHold 超时 / NOTIFICATION拆 TCP,释放资源Idle
Established收到 KEEPALIVE / UPDATE重置 HoldTimer,正常收发路由Established
Established任何错误 / NOTIFICATION / Hold 超时(视情况回 NOTIFICATION;)撤销该会话全部路由;拆 TCPIdle
任意状态ManualStop(管理关闭)发 Cease NOTIFICATION;拆 TCPIdle

注:双方同时发起连接会产生两条并行 TCP——§6.8 连接冲突检测按 BGP Identifier 裁决,只保留一条。图中略去可选的 DelayOpen 特性与振荡抑制(DampPeerOscillations)细节。

6.最佳路径选择(RFC 4271 §9)

6.1 RFC 4271 的三阶段决策过程

§9.1 把决策形式化为三个阶段,每个阶段由不同事件触发:

阶段输入 → 输出干什么
Phase 1
计算 preference
每条新收到的路由 → preference 值或「不合格」对从邻居收到的每条路由算「偏好度」:eBGP 路由按本地入策略计算(此值随后作为 LOCAL_PREF 随 iBGP 传播);不合格者直接淘汰,不进下一阶段。
Phase 2
路由选择
同一目的地的所有候选 → 唯一最优每个目的地只留一条:先取 preference 最大者,并列则按 6.2 的顺序逐级打破平局;胜者装入 Loc-RIB。前提是下一跳能被本地路由表解析(§9.1.2.1)。
Phase 3
路由发布
Loc-RIB → 各 Adj-RIB-Out按出策略把最优路由加工(改 NEXT_HOP、前置 AS_PATH、剥 LOCAL_PREF、打 Community/MED……)后装进各邻居的 Adj-RIB-Out,打包成 UPDATE 发出。

6.2 打破平局:业界通用选路顺序

§9.1.2.2 的平局裁决链是各厂商实现的基础,厂商在最前面加了私有项、个别步骤细节略异。下表为从高到低的通用顺序(悬停行查看每步的实战注解):

#规则(从高到低)要点
0Weight 最大(厂商私有)仅本地有效;Cisco 系最优先,华为对应 PrefVal。
1LOCAL_PREF 最大出站首选;缺省通常 100,iBGP 内传递。
2本地注入优先network / 聚合 / 重分发产生的路由打头。
3AS_PATH 最短AS_SET 按 1 计;prepend 的作用点。
4ORIGIN 最小IGP < EGP < INCOMPLETE。
5MED 最小同邻居 AS 才比;缺省按 0。
6eBGP 优于 iBGP直连学来 > 内部转手。
7到 NEXT_HOP 的 IGP 代价最小热土豆:从最近出口甩出去。
8eBGP 最老者(厂商实现)最老 = 最稳定;非 RFC,可关闭。
9Router ID 最小RR 环境用 ORIGINATOR_ID 替代比较。
10邻居 IP 最小终极决胜,极少用到。
悬停行查看每步注解 · 单击钉住
口诀与厂商差异:大本地、短路径、低起源、低 MED、外优先、近下一跳、老路由、小 ID」。RFC 4271 定义的是第 1、3–7、9、10 步(第 1 步为 preference 框架);第 0 步 Weight、第 2 步本地注入、第 8 步最老是 Cisco 系的经典实现,华为/H3C/Juniper 顺序基本相同、个别步骤可配置。等价多径(ECMP)是另一条岔路:满足厂商「多径条件」(通常前 7 步全同)的路由可多条并装,不再决胜。

7.iBGP 水平分割与路由反射(RFC 4456)

7.1 全互联的平方灾难

iBGP 的防环规则(RFC 4271 §9.2):从 iBGP 邻居学到的路由,不得再转发给其他 iBGP 邻居——因为 iBGP 不改 AS_PATH,没有环路信息可用,只能「只学一手」。后果是:要让每台路由器都拿到全量外部路由,AS 内所有 BGP 发言者必须两两建立 iBGP 会话:

全互联会话数 = n(n−1)/2 → 10 台 45 条,50 台 1225 条,100 台 4950 条

每条会话都是一份 TCP 连接、一份配置、一份 UPDATE 复制——n 稍大即不可维护。RFC 4456 的解法:路由反射器(Route Reflector, RR)——特许少数路由器「打破」水平分割,把 iBGP 学到的路由反射给其他 iBGP 邻居。

7.2 RR 反射规则(RFC 4456 §6)

RR 把邻居分为 Client(客户)与 Non-Client(非客户,含其他 RR)。Client 之间不用互联,Non-Client 之间仍须全互联。RR 对每条新最优路由按下表反射:

路由从哪学来反射给 Client?反射给 Non-Client?
Non-Client iBGP 邻居✔ 反射给全部 Client✘ 不反射
Client 邻居✔ 反射给其余 Client✔ 反射给全部 Non-Client
eBGP 邻居照常发给所有 iBGP 邻居(非反射行为)
悬停行查看规则依据 · 单击钉住

7.3 反射带来的环:两件防环装备

打破水平分割等于重新引入环路可能,4456 用两个可选不可传递属性兜底:

属性(Type Code)谁创建防环机制
ORIGINATOR_ID(9)首个反射该路由的 RR看到自己的 RID → 丢弃;始发者拒收回流路由。
CLUSTER_LIST(10)每个经手的 RR 前置本 Cluster ID看到本 Cluster ID → 丢弃;防集群间环路。
悬停行查看机制 · 单击钉住
集群与冗余设计要点:一个 Cluster = 一台/多台 RR + 它们的 Client。生产部署通常每集群配两台 RR(同 CLUSTER_ID)做冗余——同 ID 使它们互为「重复反射」、靠 CLUSTER_LIST 自然去重;RR 之间按 Non-Client 全互联。另两条经验:RR 只反射最优路径,会隐藏备选路径(可用 add-path 或分集 RR 缓解);RR 应尽量只当控制平面、不站转发路径上,避免次优转发。

8.团体属性(RFC 1997 / RFC 4360)

8.1 Community:给路由贴 4 字节标签(RFC 1997)

COMMUNITIES 是可选可传递属性(Type Code 8),值为若干个 4 字节标签,惯例写法 AS:NN(高 2 字节 AS 号 + 低 2 字节自定义编号)——运营商对外公布自己的团体字典,如「65001:100 = 打 LOCAL_PREF 100」「65001:0 = 不要传给任何 eBGP 邻居」,客户只需在出方向贴标签即可远程定制策略。三个保留值具有全局语义:

知名团体值十六进制语义
NO_EXPORT0xFFFFFF01不出本 AS;只让直接邻居看到。
NO_ADVERTISE0xFFFFFF02不给任何邻居;本机自留。
NO_EXPORT_SUBCONFED0xFFFFFF03不出子联盟;联盟内部专用。
悬停行查看语义与用法 · 单击钉住

8.2 Extended Community:8 字节扩展标签(RFC 4360)

4 字节团体不够用(装不下 4 字节 ASN、没有类型字段),RFC 4360 定义 EXTENDED_COMMUNITIES 属性(Type Code 16,可选可传递):每条扩展团体 8 字节 = Type(1 或 2 字节)+ Value(其余字节)。Type 高字节的最高两位是标志:I 位(IANA 分配策略)与 T 位(0 = 跨 AS 可传递,1 = 不可传递),低 6 位指示结构。常用 Type 高位值:0x00/0x02 = 全局管理员为 2/4 字节 AS 号,0x01 = 全局管理员为 IPv4 地址。

扩展团体 8 字节:│ Type 高(1B:I/T 位 + 结构)│ Type 低(1B:子类型)│ Value(6B:全局管理员 + 本地管理员)│

最重要的两个子类型:

子类型用途
Route Target(RT,0x02)VPN/EVPN 的「进出口通行证」:每个 VRF/EVI 配 import/export RT 集合,路由导出时贴上 export RT,对端只把 RT 匹配的路由导入对应 VPN 实例。EVPN 靠 RT 控制 MAC/IP 路由在租户间的分发(第 10 节)——同一个 EVI 的成员共享同一 RT。
Route Origin / SoO(0x03)标记路由的「发源地」(Site of Origin):多宿主站点场景下,PE 把带本站点 SoO 的路由拒之门外,防止路由从同一 VPN 的另一个口绕回——站点级防环。

8.3 Large Community:为 4 字节 ASN 而生(RFC 8092)

老的 4 字节 Community(AS:NN)在 4 字节 ASN 时代彻底不够用:前 2 字节装不下一个 4 字节 AS 号。RFC 8092 定义 BGP Large Communities(可选可传递,Type Code 32),每条 12 字节 = 3 个 4 字节整数,惯例写法 ASN:Function:Parameter——第一段放 4 字节全局管理员 AS 号,后两段自定义功能与参数。它不是 Extended Community 的替代(后者只 8 字节且带类型语义、多用于 VPN/RT),而是「大号版普通 Community」,专供运营商在 4 字节 ASN 网络里做策略标记。

Large Community 12 字节:│ Global Administrator(4B,通常 = 4 字节 ASN)│ Local Data Part 1(4B)│ Local Data Part 2(4B)│
例:65540:100:1 = 「AS65540 定义的:功能 100(如设 LOCAL_PREF),参数 1(如 = 客户路由)」
对比Community(RFC 1997)Extended(RFC 4360)Large(RFC 8092)
长度 / Type4 字节 / Type 88 字节 / Type 1612 字节 / Type 32
装得下 4 字节 ASN✘ 前段只 2 字节△ 部分子类型可✔ 全局管理员整 4 字节
典型用途运营商策略标签(AS:NN)VPN/EVPN 的 RT/SoO4 字节 ASN 网络的策略标签
选型口诀:租户/VPN 隔离用 Extended(RT 是它的招牌);做运营商间策略标记——2 字节 ASN 用老 Community,4 字节 ASN 用 Large Community。三者可以同时挂在一条路由上,互不冲突。

9.MP-BGP 多协议扩展(RFC 4760)

9.1 为什么 BGP 能承载一切:AFI / SAFI

RFC 4271 的 UPDATE 本体只认识 IPv4 单播 NLRI。RFC 4760 的天才之处:不动协议本体,只新增两个属性 + 一个协商机制,就让 BGP 变成「任意地址族的运输船」——IPv6、VPNv4、标签路由、EVPN 全靠它。地址族用二元组标识:AFI(Address Family Identifier,2 字节,哪个网络层协议)+ SAFI(Subsequent AFI,1 字节,该协议下哪种用途)。常用组合(悬停行查看):

AFI / SAFI地址族说明
1 / 1IPv4 单播默认地址族;可用原生编码或 MP 属性。
2 / 1IPv6 单播联动 IPv6 详解页;下一跳 16 字节。
1 / 4IPv4 标签单播前缀携带 MPLS 标签(RFC 3107)。
1 / 128VPNv4RD + IPv4 前缀;MPLS L3VPN 核心。
25 / 70L2VPN EVPNEVPN 路由的家;本页第 10 节。
悬停行查看各地址族 · 单击钉住

9.2 两个新属性:MP_REACH_NLRI / MP_UNREACH_NLRI

4760 把「多协议可达」与「多协议撤销」分别装进两个可选不可传递属性(结构见 RFC 4760 §3/§4):

MP_REACH_NLRI(Type Code 14):
│ AFI(2B)│ SAFI(1B)│ Next Hop 长度(1B)│ Next Hop 地址(变长)│ 保留(1B,=0)│ NLRI(变长)│
MP_UNREACH_NLRI(Type Code 15):
│ AFI(2B)│ SAFI(1B)│ 撤销的 NLRI(变长)│

9.3 能力协商:OPEN 里的「装备清单」

两端怎么知道对方懂哪些地址族?OPEN 报文 Optional Parameters 里的能力参数(参数类型 2,RFC 3392):每条能力 = <能力码(1B), 长度(1B), 值>。多协议能力(能力码 1)的值就是 <AFI(2B), 保留(1B), SAFI(1B)>——每端在 OPEN 里列出自己支持的全部 AFI/SAFI。只有双方都声明了的地址族才能在该会话上使用;单方面宣布不算数,硬发会触发 NOTIFICATION 拆链(OPEN 错 / 子码 7 Unsupported Capability,RFC 5492)。其他常见能力:路由刷新(2,RFC 2918)、4 字节 ASN(65,RFC 6793)、Add-Path(69)、增强路由刷新(70)。

可扩展性的精髓:EVPN、VPNv4、labeled-unicast 都只是「新 AFI/SAFI + 新 NLRI 语义」——报文格式、状态机、属性体系一行没改。BGP 从 1994 年活到今天的根本原因,正是 4760 这套「船体不动、集装箱随便换」的设计。

10.EVPN 与数据中心(RFC 7432 / 8365 / 9136 / 7938)

10.1 EVPN 解决什么问题

VXLAN 把二层帧封进 UDP 打隧道(24 位 VNI 标识租户网络),但 RFC 7348 原始方案靠数据面泛洪学 MAC——未知 MAC 一律组播/头端复制泛洪,规模一大就失控。EVPN(Ethernet VPN,RFC 7432)的答案:用 MP-BGP 当控制平面,VTEP 之间通过 BGP 主动分发「MAC 在哪个 VTEP 后面」,把「边炸边学」变成「先知道再转发」,顺带免费得到多宿主、快速收敛、ARP 抑制(RT-2 同时带 IP,可代答 ARP)与租户间三层互通。它跑在 AFI/SAFI = 25/70(第 9 节),NLRI 统一为:

EVPN NLRI:│ Route Type(1B)│ Length(1B)│ Route Type specific(变长)│ (RFC 7432 §7)

10.2 五种路由类型(悬停行查看详情)

Type名称干什么
1Ethernet Auto-Discovery(EAD)以太网段可达性;多宿主别名与快收敛。
2MAC/IP Advertisement主力:MAC(+IP)位置通告,替代泛洪学习。
3Inclusive Multicast Ethernet Tag(IMET)BUM 组成员通告,搭建复制列表。
4Ethernet Segment(ES)多宿主发现与 DF 选举。
5IP Prefix(9136 新增)子网/前缀级三层可达性。
悬停行查看各路由类型 · 单击钉住

10.3 RFC 8365:EVPN over VXLAN 的封装细节

10.4 RFC 9136:RT-5 与 IRB 集成路由桥接

10.5 RFC 7938:数据中心用 eBGP 通吃 Underlay/Overlay

一页串起来的全景:4271 给船体(报文/FSM/属性/决策)→ 4760 给集装箱标准(AFI/SAFI)→ 4456 解决 iBGP 扩展性(DC 内也可 RR 化)→ 1997/4360 给标签(RT 是 EVPN 租户隔离的关键)→ 7432/8365/9136 定义 EVPN 这个最重要的「货物」→ 7938 给出 DC 场景的最佳实践组装图。

11.定时器 · 收敛 · 高可用

协议正确只是及格,「多久发现故障、多快切完、切的时候丢不丢包」才是生产网络的命门。这一节把 BGP 的定时器体系、以及围绕它的收敛与高可用技术一次讲透——RFC 4271 之外,这里大量依赖厂商实现。

11.1 五个定时器:BGP 的节拍器

前面见过 Hold Time 与 ConnectRetry,但完整的 BGP 定时器有五个,其中 MRAI(最小路由通告间隔)常被忽略,却直接决定收敛速度与稳定性的平衡:

定时器典型默认作用与调优
ConnectRetry120 sTCP 重连节拍;调小加快重连,过小则空转。
Keepalive60 s心跳间隔,建议 Hold÷3。
Hold Time180 s失联判死阈值;快切靠调小或挂 BFD。
MRAI(通告间隔)eBGP 30 s / iBGP 5 s同前缀重发的最小间隔;攒抖动,稳定 vs 收敛的旋钮。
MinASOrigination15 s本地始发路由的最小通告间隔(存在感低)。
悬停行查看定时器详解 · 单击钉住
调定时器的第一原则:别为了「快」把 Hold Time 拧到 3/9 秒了事——链路瞬断或对端 CPU 尖峰就会误判拆链、引发全表抖动。正确姿势是 Hold 保持宽松(如默认或 10/30),把毫秒级故障发现交给 BFD(下一小节)。定时器两端必须能协商一致:Hold 取双方较小值,Keepalive 各自本地生效。

11.2 收敛加速:BFD 联动(RFC 5880 / 5881)

BGP 靠 Hold Timer 发现故障,最快也是秒级、默认更是 180 秒。BFD(双向转发检测)用极轻量的报文以毫秒级周期互探,一旦探测中断立即通知上层协议——把 BGP 邻居 down 的发现时间从「秒/分钟」压到「几十毫秒」。它是所有路由协议通用的「故障探针」,与 BGP 的关系是「BFD 负责喊『线断了』,BGP 负责『立刻撤路由、切备份』」。

Cisco NX-OS
router bgp 65001 neighbor 10.0.0.2 bfd remote-as 65002 # 全局默认 BFD 间隔在接口下调 interface Eth1/1 bfd interval 300 min_rx 300 multiplier 3
华为 VRP
bgp 65001 peer 10.0.0.2 bfd enable peer 10.0.0.2 bfd min-tx-interval 300 min-rx-interval 300 detect-multiplier 3
H3C Comware
bgp 65001 peer 10.0.0.2 bfd # BFD 参数在接口下 interface Ten-GE1/0/1 bfd min-transmit-interval 300 bfd min-receive-interval 300 bfd detect-multiplier 3

检测时间 ≈ min_rx × multiplier。上例 300 ms × 3 = 900 ms 内感知故障——比 Hold 180 s 快 200 倍。

11.3 会话不中断:Graceful Restart(RFC 4724)

路由器控制平面重启(如主备倒换、进程重载)时,若邻居立刻判死拆链,会引发全网撤路由、大范围抖动。GR(优雅重启)的思路:重启方与邻居约定,控制平面重启期间,转发平面继续按老表转发,邻居把该会话的路由标为「陈旧(stale)」暂不删除、给一个宽限期(Restart Time)等它回来,回来后刷新、清 stale——控制面重启,数据面零丢包

11.4 转发不中断:BGP PIC(前缀无关收敛)

传统 BGP 收敛慢的另一半原因:一条链路挂了,要逐条前缀重新下发转发表——互联网全表 90 万+条,逐条改要好几秒。BGP PIC(Prefix Independent Convergence)预先在转发表里为每个下一跳算好备份路径,主路径失效时只需切换「下一跳」这一个指针,所有依赖它的前缀一次性全切——收敛时间与前缀数量无关(这就是「前缀无关」的含义),从秒级降到毫秒级。

三件套配合记:BFD 负责「快速发现」(毫秒级喊故障)→ PIC 负责「快速切换」(毫秒级切转发)→ GR/NSR 负责「重启不丢」(控制面重启数据面不断)。三者解决的是不同环节,生产高可用网络通常一起上。厂商实现名略有差异(Cisco PIC Core/Edge、华为/H3C 也各有 FRR/PIC 特性),原理一致。

11.5 抑制震荡:路由抑制(RFC 2439,慎用)

Route Flap Damping(路由抑制/阻尼):对反复 up/down 的「抖动前缀」累积惩罚值,超阈值就临时压制它一段时间(不再通告),抖动停止后惩罚指数衰减、恢复通告。本意是保护全网不被个别抖动链路拖垮。

为什么现在不推荐默认开:RFC 2439 的经典参数会误伤正常路由——一条路径的正常变更经过多跳累积,也可能被判成抖动而长时间压制,反而拉长收敛。RIPE 与 RFC 7196 建议:要么关掉,要么用大幅放宽的参数(只抑制真正病态的高频抖动)。现代实践里,稳定性更多靠 MRAI + BFD + 上游前缀过滤,而非激进的 damping。三家都支持但默认关闭:Cisco bgp dampening、华为/H3C dampening(地址族视图)。

12.BGP 安全加固

BGP 是互联网的信任基石,却天生几乎没有安全机制——它默认相信邻居说的每一句话。历史上多次大规模断网都源于此(前缀劫持、路由泄露)。这一节按「保会话 → 防伪造 → 限规模 → 验真伪」四层讲加固。

12.1 会话认证:TCP MD5(RFC 2385)与 TCP-AO(RFC 5925)

BGP 跑在 TCP 上,攻击者若能注入伪造的 TCP 报文(RST 或假 UPDATE)就能搞垮或污染会话。TCP MD5 给每个 TCP 段加一个基于共享密钥的 MD5 摘要,对不上的段直接丢——这是最普及的 BGP 会话保护。TCP-AO 是它的现代替代:支持更强的 HMAC 算法、支持密钥滚动更换(keychain),逐步取代已显陈旧的 MD5。

Cisco NX-OS
router bgp 65001 neighbor 10.0.0.2 remote-as 65002 password 3 <加密串>
华为 VRP
bgp 65001 peer 10.0.0.2 password cipher <密钥> # 或用 keychain(推荐,可轮换) peer 10.0.0.2 keychain bgp-kc
H3C Comware
bgp 65001 peer 10.0.0.2 password cipher <密钥> # 或 keychain(与 password 互斥) peer 10.0.0.2 keychain bgp-kc

生产强烈建议改用 keychain(华为/H3C 均支持)实现不断链的密钥轮换;纯 MD5 password 改密钥会瞬断会话。

12.2 防远程伪造:GTSM / TTL 安全(RFC 5082)

直连 eBGP 邻居发来的报文 TTL 恒为 255(只跳一跳)。GTSM 反过来利用这点:配置本端只接受 TTL ≥ (255 − 允许跳数) 的 BGP 报文。攻击者若从远处(多跳外)伪造 BGP 报文,TTL 早被沿途路由器递减到很低,一到本端就因 TTL 不达标被丢——用一个 TTL 阈值挡住所有远程伪造,几乎零成本。

Cisco NX-OS
neighbor 10.0.0.2 remote-as 65002 ttl-security hops 1 # 仅 Nexus 9K 支持
华为 VRP
peer 10.0.0.2 valid-ttl-hops 1
H3C Comware
peer 10.0.0.2 ttl-security hops 1

12.3 限规模:Maximum-Prefix 前缀上限

邻居(尤其是客户或对等体)一旦配错或被劫持,可能把几十万条本不该发的路由灌进来,瞬间打爆你的内存/CPU——这就是「路由泄露」。Maximum-Prefix 给每个邻居设一个前缀数上限,超限即告警或拆链,是防泄露最基本的护栏。

Cisco NX-OS
neighbor 10.0.0.2 address-family ipv4 unicast maximum-prefix 1000 80 restart 30
华为 VRP
peer 10.0.0.2 route-limit 1000 # 华为为 peer x route-limit
H3C Comware
address-family ipv4 unicast peer 10.0.0.2 route-limit 1000 # 超限动作:alert-only/discard/reconnect

Cisco 语义:1000 = 上限,80 = 到 80% 告警,restart 30 = 拆链后 30 分钟重连。华为/H3C 用 route-limit,可选 alert-only(仅告警不拆链)。

12.4 前缀过滤与 First-AS 检查

12.5 验真伪:RPKI 源验证(RFC 6480 / 6811)

前面的手段都在「防会话被打」和「防明显错误」,但挡不住一个根本问题:凭什么相信 AS64500 真的拥有它通告的那个前缀?历史上「AS 谎称自己拥有某前缀」造成过全球性劫持(如某次把 YouTube 全球流量吸走)。RPKI(资源公钥基础设施)给出密码学答案:

部件作用
ROA(Route Origin Authorization)地址持有者在 RPKI 里签发的声明:「前缀 P 只允许由 AS N 通告,最大长度 L」——一份密码学签名的「产权证」。
RP / Validator(依赖方缓存)本地服务器同步全球 RPKI 数据,验证签名,生成「前缀→合法起源 AS」的有效载荷集(VRP)。
RTR 协议(RFC 8210)路由器通过 RTR 会话从 Validator 拉取验证结果。
源验证结果(RFC 6811)每条 eBGP 路由被判为 Valid(ROA 匹配)/ Invalid(有 ROA 但起源 AS 或长度不符,典型劫持特征,应丢弃)/ NotFound(无 ROA,暂放行)。用 route-policy 据此调 LOCAL_PREF 或直接拒绝 Invalid。
悬停行查看 RPKI 各部件详解 · 单击钉住
RPKI 能防什么、不能防什么:RPKI 源验证只解决「起源 AS 对不对」(防前缀劫持),不验证整条 AS_PATH 的真实性(防不了中间人篡改路径的「路由泄露」)——后者要靠 ASPA(AS Provider Authorization,起草中)与 BGPsec(RFC 8205,部署极少)。当前工程现实:RPKI(丢 Invalid)+ 前缀过滤 + Max-Prefix + First-AS 组合已能挡住绝大多数事故。三家新版本均支持 RPKI/RTR(如 Cisco rpki server、华为/H3C rpki session)。

13.扩展特性一览

BGP 的生命力在于「不改船体、只加集装箱」。除了前面已展开的 4 字节 ASN(2.1)、MP-BGP(第 9 节)、Large Community(8.3),还有几个高频出现在配置和面试里的扩展,这里集中收口。

13.1 Confederation 联盟:路由反射之外的另一条路(RFC 5065)

解决 iBGP 全互联平方灾难,除了路由反射(第 7 节),还有联盟:把一个大 AS 对内拆成若干「成员 AS(子联盟)」,成员之间跑一种特殊的 eBGP(叫 confederation eBGP),成员内部仍是 iBGP 全互联(或再套 RR)。对,整个联盟仍表现为一个 AS 号,外界看不到内部拆分。

对比路由反射(RFC 4456)联盟(RFC 5065)
改造方式加 RR 角色,配置改动小拆分内部 AS,改动大、迁移复杂
防环机制ORIGINATOR_ID / CLUSTER_LISTAS_CONFED_SEQUENCE/SET(对外不可见)
典型使用者绝大多数企业与 DC(主流)少数超大型运营商骨干(历史遗留居多)
悬停行查看 RR 与联盟对比详解 · 单击钉住

现网新建几乎都选路由反射;联盟主要出现在老牌运营商网络与考试里。知道它「是 RR 的替代方案、靠子 AS + confederation eBGP 实现」即可。

13.2 Add-Path:让 BGP 一次发多条路径(RFC 7911)

BGP 的一个「先天缺陷」:对每个前缀,一个会话只通告最优的那一条路径。这在 RR 场景尤其伤——RR 只反射自己选出的最优路径,客户端看不到备选路径,导致快速重路由(FRR)和负载分担缺料。Add-Path 给每条路径加一个 Path Identifier,允许同一前缀通告多条路径,让下游能预装备份、做 PIC/ECMP。RR + Add-Path 是现代 DC 常见组合。三家均以能力协商开启(如 Cisco additional-paths send/receive + advertise additional-paths)。

13.3 错误处理修订:RFC 7606(treat-as-withdraw)

RFC 4271 的原始规定太「暴烈」:UPDATE 里任何一个属性有错,整个会话拆链重来(NOTIFICATION 3/x),一条畸形路由能把整个邻居打掉、连累所有正常路由。RFC 7606 把大量此类错误「软化」:

13.4 优雅关断:Graceful Shutdown(RFC 8326)

计划内维护(升级、割接)时直接关会话,会瞬间黑洞流量、等收敛。Graceful Shutdown 用一个知名 Community(GRACEFUL_SHUTDOWN = 65535:0)提前通告:「这条路我马上要停了,请你先切到备份」——邻居收到后把这些路由的 LOCAL_PREF 降到最低,流量在会话真正断开前就平滑切走,实现零丢包维护。配一条出方向 route-policy 打这个 Community 即可,是运营维护的良好实践。

14.配置实战 · 三厂商对照

前面全是「原理」,这一节给「手感」——一个贯穿始终的实验拓扑,从 eBGP 建邻一路配到 EVPN,Cisco NX-OS / 华为 VRP / H3C Comware 三列并排。命令语法核对自三家官方配置文档;华为部分以官方命令关键字为准补全。照着敲能通,是本页作为「可传递学习文档」的落点。

14.1 实验拓扑

AS 65001(本方 · 含 RR) AS 65002(对端 ISP) eBGP · 10.0.0.0/30 iBGP(RR 反射) R1 · RRRID 1.1.1.1 R2 · ClientRID 2.2.2.2 R3 · ClientRID 3.3.3.3 R4 · ISP 边界RID 4.4.4.4 · AS65002
拓扑说明:R1 是 AS65001 的边界兼路由反射器,与对端 R4(AS65002)建 eBGP;R1 对内是 RR,R2/R3 是它的客户端,靠 R1 反射拿到外部路由,R2/R3 之间免全互联。下面各小节均以此拓扑为背景。

14.2 eBGP 建邻(R1 ↔ R4)

Cisco NX-OS(R1)
feature bgp router bgp 65001 router-id 1.1.1.1 neighbor 10.0.0.2 remote-as 65002 address-family ipv4 unicast address-family ipv4 unicast network 172.16.0.0/24
华为 VRP(R1)
bgp 65001 router-id 1.1.1.1 peer 10.0.0.2 as-number 65002 ipv4-family unicast peer 10.0.0.2 enable network 172.16.0.0 255.255.255.0
H3C Comware(R1)
bgp 65001 router-id 1.1.1.1 peer 10.0.0.2 as-number 65002 address-family ipv4 unicast peer 10.0.0.2 enable network 172.16.0.0 24

三家共同点:先建 BGP 进程/实例、配 RID、声明邻居 remote-as,再在地址族下激活邻居。差异:Cisco 用 address-family,华为用 ipv4-family,且华为/H3C 必须显式 peer x enable 激活地址族——忘了 enable 是华为/H3C 建邻的头号坑

14.3 iBGP + 路由反射 + next-hop-self(R1 作 RR)

Cisco NX-OS(R1)
router bgp 65001 neighbor 2.2.2.2 remote-as 65001 update-source loopback0 address-family ipv4 unicast route-reflector-client next-hop-self neighbor 3.3.3.3 remote-as 65001 update-source loopback0 address-family ipv4 unicast route-reflector-client next-hop-self
华为 VRP(R1)
bgp 65001 peer 2.2.2.2 as-number 65001 peer 2.2.2.2 connect-interface LoopBack0 peer 3.3.3.3 as-number 65001 peer 3.3.3.3 connect-interface LoopBack0 ipv4-family unicast peer 2.2.2.2 enable peer 2.2.2.2 reflect-client peer 2.2.2.2 next-hop-local peer 3.3.3.3 enable peer 3.3.3.3 reflect-client peer 3.3.3.3 next-hop-local
H3C Comware(R1)
bgp 65001 peer 2.2.2.2 as-number 65001 peer 2.2.2.2 connect-interface LoopBack0 peer 3.3.3.3 as-number 65001 peer 3.3.3.3 connect-interface LoopBack0 address-family ipv4 unicast peer 2.2.2.2 enable peer 2.2.2.2 reflect-client peer 2.2.2.2 next-hop-local peer 3.3.3.3 enable peer 3.3.3.3 reflect-client peer 3.3.3.3 next-hop-local

要点:① iBGP 邻居用 loopback 建邻(update-source / connect-interface),链路冗余时会话不随单条物理口抖动;② next-hop-self(华为/H3C 叫 next-hop-local)解决第 4.4 节的 iBGP 下一跳不可达;③ 把 R2/R3 设为 reflect-client,它们之间就免全互联。名词差异:Cisco route-reflector-client / next-hop-self,华为 H3C reflect-client / next-hop-local

14.4 路由策略:入方向调 LOCAL_PREF + 出方向 prepend

场景:R1 从 R4(ISP)学来的路由,入方向统一设 LOCAL_PREF=200(让本 AS 优先走这个 ISP 出站);同时出方向对某些路由 AS_PATH prepend 两次(让入站流量别走这条)。

Cisco NX-OS
route-map IN-ISP permit 10 set local-preference 200 route-map OUT-ISP permit 10 set as-path prepend 65001 65001 router bgp 65001 neighbor 10.0.0.2 address-family ipv4 unicast route-map IN-ISP in route-map OUT-ISP out
华为 VRP
route-policy IN-ISP permit node 10 apply local-preference 200 route-policy OUT-ISP permit node 10 apply as-path 65001 65001 additive bgp 65001 ipv4-family unicast peer 10.0.0.2 route-policy IN-ISP import peer 10.0.0.2 route-policy OUT-ISP export
H3C Comware
route-policy IN-ISP permit node 10 apply local-preference 200 route-policy OUT-ISP permit node 10 apply as-path 65001 65001 bgp 65001 address-family ipv4 unicast peer 10.0.0.2 route-policy IN-ISP import peer 10.0.0.2 route-policy OUT-ISP export

核心差异一句话:Cisco 叫 route-map + set + in/out,华为 H3C 叫 route-policy + apply + import/export。匹配子句同理:Cisco match,华为/H3C if-match。记住这组「方言对照」,三家路由策略就通了。

14.5 安全与可靠性加固(一次性叠加)

Cisco NX-OS(R1→R4)
neighbor 10.0.0.2 remote-as 65002 password 3 <密文> ttl-security hops 1 bfd address-family ipv4 unicast maximum-prefix 500000 90 router bgp 65001 graceful-restart
华为 VRP(R1→R4)
bgp 65001 peer 10.0.0.2 password cipher <密钥> peer 10.0.0.2 valid-ttl-hops 1 peer 10.0.0.2 bfd enable graceful-restart ipv4-family unicast peer 10.0.0.2 route-limit 500000
H3C Comware(R1→R4)
bgp 65001 peer 10.0.0.2 password cipher <密钥> peer 10.0.0.2 ttl-security hops 1 peer 10.0.0.2 bfd graceful-restart address-family ipv4 unicast peer 10.0.0.2 route-limit 500000

这一段把第 11、12 节的护栏一次性落到 eBGP 邻居上:MD5 认证 + GTSM 防伪造 + BFD 快速探测 + Max-Prefix 防泄露 + GR 优雅重启——生产 eBGP 邻居的「标准安全基线」。

14.6 EVPN over VXLAN 骨架(Spine-Leaf 控制面)

对应第 10 节:数据中心里在 l2vpn evpn 地址族上建 iBGP(常以 Spine 作 RR),Leaf 之间通过 EVPN 分发 MAC/IP。下面是 Leaf 侧启用 EVPN 地址族的骨架(各家 VXLAN/EVI 实例配置另在接口与 EVPN 实例下,此处只示意 BGP 侧):

Cisco NX-OS(Leaf)
nv overlay evpn feature bgp router bgp 65001 neighbor 1.1.1.1 # Spine/RR remote-as 65001 update-source loopback0 address-family l2vpn evpn send-community extended
华为 VRP(Leaf)
bgp 65001 peer 1.1.1.1 as-number 65001 peer 1.1.1.1 connect-interface LoopBack0 l2vpn-family evpn peer 1.1.1.1 enable peer 1.1.1.1 advertise-ext-community
H3C Comware(Leaf)
bgp 65001 peer 1.1.1.1 as-number 65001 peer 1.1.1.1 connect-interface LoopBack0 address-family l2vpn evpn peer 1.1.1.1 enable peer 1.1.1.1 advertise-community

EVPN 靠 扩展团体(RT)控制租户路由分发,所以必须 send-community extended(华为 advertise-ext-community)。地址族名:Cisco/H3C 用 l2vpn evpn,华为用 l2vpn-family evpn。完整 EVPN 还需配 VXLAN 隧道、L2/L3 VNI 与 EVPN 实例——超出本页 BGP 范畴,见第 10 节原理与厂商 VXLAN 配置指导。

15.抓包与排障实战

15.1 Wireshark 里的 BGP

bgp # 只看 BGP 报文
tcp.port == 179 # 等价视角:BGP 承载于 TCP/179
bgp.type == 1 # 只看 OPEN(2=UPDATE,3=NOTIFICATION,4=KEEPALIVE,5=ROUTE-REFRESH)
bgp.nlri_prefix # 只看携带前缀通告/撤销的 UPDATE
bgp.notification.error_code # 拆链现场:错误码(配合子码字段过滤)

识别特征:TCP 流里以 16 字节全 1(一串 ff)开场的报文即 BGP。抓包位置建议选在一侧路由器直连接口上;eBGP TTL=1 的习惯意味着中间设备上通常抓不到 eBGP 会话。

15.2 建联报文序列

正常建联在抓包里是这样一条链(悬停各节点):

TCP 三次握手SYN / SYN+ACK / ACK
OPEN ⇄ OPENType 1 · 参数+能力
KEEPALIVE ⇄ KEEPALIVEType 4 · 建联确认
UPDATE ×n + 周期 KEEPALIVEType 2 / 4 · 稳态
悬停各阶段查看说明 · 单击钉住

15.3 厂商命令对照

同一件事三家命令各说各话,下面按「目的 → Cisco / 华为 / H3C」三列并排,复制即用。华为与 H3C 同属中文阵营但语法并不互通,别混着敲。

目的Cisco IOS / IOS-XE华为 VRPH3C Comware
邻居 FSM 状态 / 概要show ip bgp summarydisplay bgp peerdisplay bgp peer
邻居细节(能力、定时器、计数)show ip bgp neighborsdisplay bgp peer verbosedisplay bgp peer verbose
BGP 路由表(Loc-RIB)show ip bgpdisplay bgp routing-tabledisplay bgp routing-table
某邻居收到的路由show ip bgp neighbors X received-routesdisplay bgp routing-table peer X received-routesdisplay bgp routing-table peer X received-routes
某邻居发出的路由show ip bgp neighbors X advertised-routesdisplay bgp routing-table peer X advertised-routesdisplay bgp routing-table peer X advertised-routes
EVPN 路由(L2VPN EVPN 地址族)show bgp l2vpn evpndisplay bgp evpn all routing-tabledisplay bgp l2vpn evpn routing-table
软刷新入方向(重发 route-refresh)clear ip bgp X soft inrefresh bgp all importrefresh bgp ipv4 unicast all import
按团体值查路由show ip bgp community 100:10display bgp routing-table community 100:10display bgp routing-table community 100:10
按 AS_PATH 正则查路由show ip bgp regexp ^65002$display bgp routing-table regular-expression ^65002$display bgp routing-table regular-expression ^65002$
对等体组 / Update 组show ip bgp update-groupdisplay bgp update-peer-groupdisplay bgp update-group
路由抖动 / 抑制信息(dampening)show ip bgp dampening flap-infodisplay bgp routing-table flap-infodisplay bgp routing-table flap-info
VPN/MPLS 标签分配show bgp vpnv4 unicast labelsdisplay bgp vpnv4 all routing-table labeldisplay bgp vpnv4 routing-table label
硬重置会话(断开重连 TCP)clear ip bgp Xreset bgp ipv4 unicast peer Xreset bgp ipv4 unicast peer X
开调试(排障抓包)debug ip bgp updatesdebugging bgp updatedebugging bgp packet update
悬停行查看每家命令详解 · 单击钉住
提示:三家都不默认缓存「邻居发来的原始路由」。想用 received-routes 看到全部内容,必须提前开 neighbor X soft-reconfiguration inbound(Cisco)/ peer X keep-all-routes(华为)/ peer X keep-all-routes(H3C),否则只能看到优选进 Loc-RIB 的那部分。软刷新(soft in)本质是对方重发一遍 OPEN + ROUTE-REFRESH,不会断连接;而硬重置(clear/reset)会真的断开 TCP 重连,慎用。

15.4 常见故障速查(悬停行查看处置)

现象首要怀疑处置
邻居卡 Idle本端未配置或被 shutdown核对 neighbor 配置与激活状态。
邻居卡 ActiveTCP/179 不通或对端未监听ping/telnet 179;查 ACL、multihop、update-source。
拆链循环(有 NOTIFICATION)OPEN 参数 / 能力不匹配按子码 2/2、2/3、2/6、2/7 逐条核对。
会话正常但无路由下一跳不可达 / 策略过滤 / 地址族未激活next-hop-self;查过滤;查 activate;查团体。
路由存在但非最优水平分割 / 选路被压 / 出方向未发按 6.2 顺序比对属性;查对端出策略。
周期性掉线(码 4)链路丢包 / 对端繁忙 / 半开连接查丢包与对端负载;适当调大 Hold Time。
悬停行查看处置建议 · 单击钉住

16.术语与符号速查 · 参考文献

16.1 术语速查

术语含义
AS / ASN自治系统及其编号:单一管理域、统一策略的网络;ASN 16 位(RFC 4271)→ 32 位(RFC 6793),私有段 64512–65534(RFC 6996)。
eBGP / iBGP外部/内部 BGP 会话:跨 AS vs 同 AS;差异集中在 TTL、NEXT_HOP 改写与水平分割(2.2)。
NLRI网络层可达信息:路由的目的地,编码为 <长度, 前缀> 二元组(2.3)。
AFI / SAFI地址族二元组(2B + 1B):MP-BGP 用它们区分 IPv4/IPv6/VPNv4/EVPN 等货物(第 9 节)。
Adj-RIB-In / Loc-RIB / Adj-RIB-Out路由信息库三件套:原始入库 → 优选本机用 → 按邻居待发(2.4)。
OPEN / UPDATE / NOTIFICATION / KEEPALIVEBGP 四种基本报文(Type 1–4);ROUTE-REFRESH(5)为 RFC 2918 增补。
Hold Time保活超时:OPEN 协商取双方较小值,0 或 ≥3;收不到报文超过它即拆链。
ConnectRetryTimer连接重试定时器:FSM 重发 TCP 的节拍器,初值实现自定(常见约 120 秒)。
ORIGIN路径属性(1):路由出身 IGP(0)/EGP(1)/INCOMPLETE(2),越小越优。
AS_PATH路径属性(2):经过的 AS 序列;防环 + 选路;prepend 可人为拉长。
NEXT_HOP路径属性(3):下一跳 IP;eBGP 改写、iBGP 保留,next-hop-self 治 iBGP 不可达。
LOCAL_PREF路径属性(5):AS 内优先级,越大越优,只传 iBGP,出站主旋钮。
MED路径属性(4,MULTI_EXIT_DISC):入站引导,越小越优,同邻居 AS 才比。
RR / Cluster路由反射器及其集群:免 iBGP 全互联;Client 免互联、Non-Client 仍须全互联(第 7 节)。
ORIGINATOR_ID / CLUSTER_LISTRR 防环两属性(9/10):见自己 RID / 本 Cluster ID 即丢弃。
Community4 字节路由标签(AS:NN,Type 8);知名值 NO_EXPORT/NO_ADVERTISE/NO_EXPORT_SUBCONFED。
RT(Route Target)扩展团体子类型 0x02:VPN/EVPN 的导入导出标记,租户隔离的关键。
SoO(Site of Origin)扩展团体子类型 0x03:发源地标记,站点级防环。
EVPN / VNI / IRB以太网 VPN(25/70);VXLAN 24 位租户标识;集成路由桥接(同设备二三层打通)。
水平分割(iBGP)iBGP 学到的路由不再转给 iBGP 邻居(§9.2)→ 全互联或 RR。

16.2 参考文献

编号内容
RFC 4271A Border Gateway Protocol 4 (BGP-4),2006-01。本页主要依据:§4 报文格式、§5 路径属性、§6 错误处理、§8 FSM、§9 决策与 RIB。
RFC 4760Multiprotocol Extensions for BGP-4,2007-01。第 9 节依据:AFI/SAFI、MP_REACH/MP_UNREACH_NLRI、能力协商。
RFC 4456BGP Route Reflection,2006-04。第 7 节依据:Client/Non-Client 反射规则、ORIGINATOR_ID、CLUSTER_LIST(废止 RFC 2796/1966)。
RFC 1997BGP Communities Attribute,1996-08。第 8.1 节依据:COMMUNITIES(Type 8)与三个知名团体值。
RFC 4360BGP Extended Communities Attribute,2006-02。第 8.2 节依据:8 字节扩展团体(Type 16)、RT 与 Route Origin。
RFC 7432BGP MPLS-Based Ethernet VPN,2015-02。第 10 节依据:EVPN 架构、EVPN NLRI 与 RT-1–RT-4、AFI 25/SAFI 70。
RFC 8365A Network Virtualization Overlay Solution Using EVPN,2018-03。VXLAN 封装下 EVPN 路由的用法(VNI、标签字段复用)。
RFC 9136IP Prefix Advertisement in EVPN,2021-09。RT-5 编码与对称 IRB 流程(IRB 模型见 RFC 9135)。
RFC 7938Use of BGP for Routing in Large-Scale Data Centers,2016-08。Clos 拓扑 eBGP 通吃 Underlay/Overlay 的设计实践与 ASN 布局。
RFC 2918Route Refresh Capability for BGP-4,2000-09。ROUTE-REFRESH(Type 5)软重置。
RFC 3392Capabilities Advertisement with BGP-4,2002-11。OPEN 可选参数类型 2 能力协商框架(RFC 5492 修订并增补子码 7)。
RFC 5065Autonomous System Confederations for BGP,2007-08。联盟:另一种 iBGP 扩展性方案(与 RR 互补)。
RFC 6793BGP Support for Four-Octet AS Number Space,2012-12。4 字节 ASN 与 AS_TRANS/AS4_PATH 兼容机制。
RFC 6996Autonomous System (AS) Reservation for Private Use,2013-07。私有 ASN 段(64512–65534、4200000000–4294967294)。