BGP (Border Gateway Protocol) 是一种用于互联网路由系统的自治系统(AS)间进行路由信息交换的协议。它是目前互联网上最广泛使用的路由协议。

BGP 的工作原理

BGP 使用 TCP 作为其传输协议(默认端口号为 179),确保路由表的可靠传输。BGP 通过交换网络可达性信息来构建一个一致性的路由表。这个信息包括了 AS 路径信息,这样 BGP 就可以做出决策并避免路由循环。

BGP 有两种主要类型:Internal BGP (iBGP) 和 External BGP (eBGP)。

  • iBGP:在同一个自治系统内部的路由器之间使用 iBGP,主要:RIP1/RIP2、OSPF、ISIS、EIGRP(思科私有协议.)
  • eBGP:在不同自治系统的路由器之间使用 eBGP,通常:BGPEGP是运行在AS与AS之间的路由协议,他解决AS之间选问题。

自治系统(AS)是由一个技术管理机构管理,使用统一选路策略的一组路由器集合,
自治系统编号范围:1-65535,其中1-64511是互联网上注册公有AS号,类似公网IP地址。
64512-65535是私有AS号,类似私网IP地址

BGP是一种运行在AS与AS之间的动态路由协议,主要作用是在AS之间自动交换无环路由信息以此来构建AS的拓扑图,从而消除路由环路并实施用户配置的路由策略。目前公网网络条目众多,IGP协议无法承载,而BGP可以轻松应对,通常BGP协议用于ISP和ISP之间或跨域地域总、分公司之间的路由信息交换

BGP的特征
●传输协议:TCP,端口号179
●BGP是外部路由协议,用来在AS之间传递路由信息
●是一种增强的路径矢量路由协议
●拥有可靠的路由更新机制
●具备丰富的Metric度量方法
●无环路协议设计
●为路由条目附带多种属性信息
●支持CIDR(无类别域间选路)
●丰富的路由过滤和路由策略
●无需周期性更新
●路由更新时只发送增量路由
●周期性发送KeepAlive报文以保持 TCP连通性
BGP的工作原理
BGP报文
●Open报文
OPen报文是TCP建立后发送的第一个报文,用于建立BGP对等体之间的连接关系,
主要包含BGP版本号、本地AS编号、Holdtime等信息

●UPdate报文
Update报文用来在BGP之间更新路由信息,Updata报文可以通告多条属性相同的可达路由信息
也可以撤销多条路由不可达的路由信息

●Notification报文
报文的作用是当BGP检测到错误状态时候,立即向对等体发送NOtification报文,之后BGP就会中断
只要收到Notification报文就会返回idle状态

●Route-Refresh
用来告知对等体所支持路由的刷新能力,BGP的入口策略路由发生变化,本地的BGP路由会向对等体发送
Route-Refresh报文,收到信息后,对等体将其路由信息重新发送给本地BGP路由器

●KeepAlive
该报文在对等体之间周期的发送报文,用以保持连接的有效性并维护其连接,KeepAlive报文只有一个BGP
报文头,默认KeepAlive报文发送周期为60S,保持时间180S,这个类似于OSPF中的Hello报文

BGP 的使用场景

BGP 主要在以下几种场景中使用:

  1. 互联网连接:BGP 最常见的使用场景就是在互联网服务提供商(ISP)中,它们使用 BGP 来交换路由信息,这样互联网用户就可以访问全世界的网络。
  2. 多宿主网络:对于有多个 ISP 连接的网络,BGP 可以用来做出智能决策,选择最佳的路径来发送流量。
  3. 数据中心:在大型数据中心中,BGP 可以用来在服务器之间分发路由信息,尤其是在使用了 VXLAN 或其他网络虚拟化技术的情况下。
  4. SD-WAN:在软件定义广域网(SD-WAN)解决方案中,BGP 可以用来在网络边缘设备之间交换路由信息,实现动态的路径选择和流量工程。

BGP 的优点和缺点

优点

  • 稳定性:BGP 是一个非常稳定的协议,已经在互联网上运行了很多年。
  • 灵活性:BGP 提供了很多选项和特性,可以适应各种复杂的网络环境。
  • 扩展性:BGP 可以很好地处理大量的路由。

缺点

  • 复杂性:BGP 是一个非常复杂的协议,需要专业的知识和经验来配置和维护。
  • 收敛时间:BGP 的路由收敛时间较长,可能不适合需要快速收敛的网络。
  • 无法感知链路状态:BGP 不像 OSPF 或 IS-IS 那样是一个链路状态协议,它无法直接获取网络的拓扑信息,因此可能不会选择到最优的路径。

Linux 实验BGP

sudo apt-get update
sudo apt-get install -y frr frr-pythontools


2 配置 FRRouting
然后,你需要修改 FRR 配置文件 /etc/frr/daemons 启用 zebra 和 bgpd 守护进程。将 zebra 和 bgpd 设置为 yes:

zebra=yes
bgpd=yes

sudo systemctl restart frr
3. 配置 BGP
接着,你可以进入 vtysh 配置 BGP。首先,启动 vtysh:

vtysh
然后进入配置模式,并配置 BGP:

configure terminal
router bgp <your AS number>
bgp router-id <your router ID>
neighbor <neighbor IP address> remote-as <neighbor AS number>
network <network you want to announce>
exit
write
4. 验证配置
最后,你可以使用以下命令查看你的 BGP 配置和状态:
show ip bgp summary
show ip bgp