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 用于内部网络,不对外公布
避坑指南:我曾经在配置BGP时,不小心把私有AS号用在了公网对等体上。结果对方路由器直接拒绝了邻居建立,因为私有AS号在公网上是不合法的。嗯,这个坑我踩过,你别再踩了。

AS号在BGP中扮演着关键角色。BGP通过AS_PATH属性记录路由经过的所有AS,从而避免环路。举个例子:如果一台路由器收到一条路由,发现自己的AS号已经在AS_PATH里了,它就知道这是个环路,直接丢弃。

4.3 BGP邻居建立

BGP邻居建立的过程,说白了就是两台路由器“握手”的过程。它分为几个阶段:

  1. Idle状态:初始状态,BGP进程还没开始。
  2. Connect状态:主动发起TCP连接。
  3. Active状态:TCP连接失败,等待重试。
  4. OpenSent状态:发送Open消息,协商参数。
  5. OpenConfirm状态:收到对方的Open消息,发送Keepalive。
  6. 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,得单独激活地址族。
注意事项:BGP邻居建立后,默认不会发送任何路由。你需要通过network命令或import-route命令来注入路由。我曾经见过有人配完邻居后等了一小时,发现路由表还是空的——原来忘了注入路由。

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更长。

选路原则(简化版):
  1. 优先选择LOCAL_PREF最高的路由。
  2. 如果LOCAL_PREF相同,选择AS_PATH最短的路由。
  3. 如果AS_PATH相同,选择ORIGIN优先级最高的(IGP > EGP > Incomplete)。
  4. 如果ORIGIN相同,选择MED最小的路由。
  5. 如果MED相同,选择EBGP路由优先于IBGP路由。
  6. 如果还是相同,选择下一跳IGP度量最小的路由。

说实话,这些属性刚开始学的时候确实容易晕。我建议你从LOCAL_PREF和MED入手,这两个在实际工作中用得最多。其他的属性,遇到具体场景再查也来得及。

4.5 本章知识体系

下面这张图帮你梳理了BGP基础的核心逻辑。从协议概述到AS号,再到邻居建立和属性,每一步都是环环相扣的。

BGP基础知识体系 BGP协议 协议概述 路径矢量、TCP 179 AS与AS号 公有/私有、防环 邻居建立 6种状态机 路由属性 AS_PATH、LOCAL_PREF、MED 图:BGP基础四大核心模块

好了,BGP的基础内容就讲到这里。记住,BGP不是用来取代OSPF或IS-IS的,它们各有各的战场。BGP擅长的是跨AS的路由控制,而IGP擅长的是AS内部的快速收敛。两者配合使用,才是网络设计的王道。


公众号:蓝海资料掘金营,微信deep3321