4、BGP基础:BGP协议概述、AS与AS号、BGP邻居建立、BGP路由属性
聊到BGP,我得先说说我的感受。刚入行那会儿,我觉得BGP就是个“大怪物”——协议复杂、概念多、配置还容易翻车。后来在数据中心和运营商网络里摸爬滚打几年,才慢慢摸到它的脾气。说白了,BGP就是互联网的“交通指挥系统”。没有它,不同网络之间根本没法好好通信。
4.1 BGP协议概述
BGP的全称是Border Gateway Protocol,边界网关协议。它工作在OSI模型的第七层——应用层,但传输层用的是TCP,端口号179。这一点和OSPF、IS-IS这些“内部协议”完全不同。OSPF直接跑在IP上,BGP却要依赖TCP的可靠性。为什么?因为BGP要传递的是整个互联网的路由表,丢一条都可能出大事。
BGP目前有两个主流版本:BGP-4和BGP-4+。前者支持IPv4,后者扩展了对IPv6的支持。我建议你直接学BGP-4+,因为现在IPv6的部署越来越多了。
- 路径矢量协议:BGP不关心链路带宽,只关心“怎么走”。它通过AS_PATH属性记录路径,避免路由环路。
- 可靠性传输:基于TCP 179端口,确保路由更新不丢失。
- 触发式更新:只有路由变化时才发送更新,不像OSPF那样周期性泛洪。
- 丰富的路由策略:BGP支持通过属性控制选路,这是它最强大的地方。
我记得有一次,客户问我:“为什么不用OSPF连接两个不同的公司网络?”我笑了笑说:“OSPF是内部用的,BGP才是跨组织的标准。你想想看,如果每个公司都用OSPF,那路由表得乱成什么样?”
4.2 AS与AS号
AS,全称Autonomous System,自治系统。你可以把它理解成一个“独立王国”——一个由单一机构管理、使用统一路由策略的网络集合。比如中国电信是一个AS,中国联通是另一个AS,阿里云也有自己的AS。
每个AS都有一个唯一的编号,叫AS号。这个编号由IANA分配,分为两种:
| 类型 | 范围 | 用途 |
|---|---|---|
| 公有AS号 | 1 - 64511 | 用于互联网上的BGP对等体,全球唯一 |
| 私有AS号 | 64512 - 65535 | 用于内部网络,不对外公布 |
AS号在BGP中扮演着关键角色。BGP通过AS_PATH属性记录路由经过的所有AS,从而避免环路。举个例子:如果一台路由器收到一条路由,发现自己的AS号已经在AS_PATH里了,它就知道这是个环路,直接丢弃。
4.3 BGP邻居建立
BGP邻居建立的过程,说白了就是两台路由器“握手”的过程。它分为几个阶段:
- Idle状态:初始状态,BGP进程还没开始。
- Connect状态:主动发起TCP连接。
- Active状态:TCP连接失败,等待重试。
- OpenSent状态:发送Open消息,协商参数。
- OpenConfirm状态:收到对方的Open消息,发送Keepalive。
- Established状态:邻居建立成功,开始交换路由。
配置BGP邻居其实很简单。我拿华为设备举个例子:
# 进入BGP视图
bgp 65001
# 指定对等体IP和AS号
peer 10.0.0.2 as-number 65002
# 激活IPv4单播地址族
ipv4-family unicast
peer 10.0.0.2 enable
这里要注意几个点:
- 对等体的IP地址必须可达,因为BGP依赖TCP。
- AS号必须匹配,否则邻居建立会失败。
- 默认情况下,BGP只交换IPv4单播路由。如果需要IPv6,得单独激活地址族。
4.4 BGP路由属性
BGP的路由属性,是它最核心、也最复杂的地方。每个属性都像是一个“标签”,告诉路由器这条路由该怎么处理。我挑几个最常用的给你讲讲:
4.4.1 公认必遵属性
- AS_PATH:记录路由经过的AS列表。用于防环和选路。
- NEXT_HOP:下一跳地址。BGP的下一跳不一定是直连,这点和IGP不同。
- ORIGIN:路由的来源。IGP(i)、EGP(e)、Incomplete(?)。
4.4.2 公认任意属性
- LOCAL_PREF:本地优先级。用于控制出站流量,值越大越优先。
- ATOMIC_AGGREGATE:聚合路由标记。
4.4.3 可选传递属性
- COMMUNITY:团体属性。用于打标签,方便策略控制。
4.4.4 可选非传递属性
- MED:多出口区分。用于控制入站流量,值越小越优先。
我举个例子帮你理解:假设你有两条路去北京,一条经过上海(AS_PATH短),一条经过广州(AS_PATH长)。BGP会优先选择AS_PATH短的那条。但如果你设置了LOCAL_PREF,那LOCAL_PREF高的路由会优先被选,哪怕AS_PATH更长。
- 优先选择LOCAL_PREF最高的路由。
- 如果LOCAL_PREF相同,选择AS_PATH最短的路由。
- 如果AS_PATH相同,选择ORIGIN优先级最高的(IGP > EGP > Incomplete)。
- 如果ORIGIN相同,选择MED最小的路由。
- 如果MED相同,选择EBGP路由优先于IBGP路由。
- 如果还是相同,选择下一跳IGP度量最小的路由。
说实话,这些属性刚开始学的时候确实容易晕。我建议你从LOCAL_PREF和MED入手,这两个在实际工作中用得最多。其他的属性,遇到具体场景再查也来得及。
4.5 本章知识体系
下面这张图帮你梳理了BGP基础的核心逻辑。从协议概述到AS号,再到邻居建立和属性,每一步都是环环相扣的。
好了,BGP的基础内容就讲到这里。记住,BGP不是用来取代OSPF或IS-IS的,它们各有各的战场。BGP擅长的是跨AS的路由控制,而IGP擅长的是AS内部的快速收敛。两者配合使用,才是网络设计的王道。
公众号:蓝海资料掘金营,微信deep3321