基于FRR全面解析BGP协议(一):BGP协议基础知识

BGP协议基础知识

定义

边界网关协议(Border Gateway Protocol,BGP)是一种实现自治系统AS之间的路由可达,并选择最佳路由的矢量性协议 。简单地讲,就是交换两个网络的路由信息。

特征

  • BGP使用TCP为传输层协议,TCP端口号179。

  • 路由器之间的BGP会话基于TCP连接而建立。运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。

  • 两个建立BGP会话的路由器互为对等体(Peer)。BGP对等体之间交换BGP路由表。

  • BGP路由器只发送增量的BGP路由更新,或进行触发更新(不会周期性更新)。

  • BGP具有丰富的路径属性和强大的路由策略工具。

  • BGP能够承载大批量的路由前缀,用于大规模的网络中。

名词

BGP对等体

BGP对等体(peer)也叫BGP邻居,与OSPF、 RIP等协议不同,BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连。BGP存在两种对等体关系类型:EBGP及IBGP。针对这两种对等体类型,BGP处理路由的操作存在较大差异。

EBGP

EBGP(External BGP)是指位于不同自治系统(AS)的BGP路由器之间的BGP邻居关系。两台路由器之间要建立EBGP对等体关系,必须满足两个条件 :一是两个路由器所属AS不同(也即AS号不同);二是在配置BGP时,对等体IP地址要求路由可达,并且TCP连接能够正确建立 。

IBGP

IBGP(Internal BGP)是指位于相同自治系统的BGP路由器之间的BGP邻接关系。两台路由器之间要建立IBGP对等体关系,必须满足两个条件:一是两个路由器所属AS需相同(也即AS号相同);二是在配置BGP时,对等体IP地址要求路由可达,并且TCP连接能够正确建立。

1591864629305

报文

BGP的IP协议号为6。BGP报文由BGP报文头和具体报文内容两部分组成,BGP的运行是通过消息驱动的,共有5种报文类型,这些报文类型有相同的报文头。这些报文类型通过TCP协议进行传播(端口号是179)。消息最长为4096字节,最短为19字节。BGP报文头包括三的部分,总长19字节。

  • **Marker:**占16字节,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。
  • **Length:**占2个字节(无符号位),BGP报文总长度(包括报文头在内),以字节为单位。长度范围是19~4096。
  • **Type:**占1个字节(无符号位),BGP报文类型。Type有5个可选值,表示BGP报文头后面所接的5类报文。
1591863891511

BGP的报文类型包括Open、Update、Notification、Keepalive和Route-refresh五种。

报文名称 作用 发包
Open 协商BGP邻居的各项参数,建 立邻居关系。 BGP对等体之间需先建立TCP连接,如果TCP连接成功, 那么BGP向对等体发送Open报文。
Update 用于发送BGP路由信息。 连接建立后,有路由需要发送或路由变化时,发送 UPDATE通告对端路由信息。
Notification 报告错误,中止对等体关系。 当BGP在运行中发现错误时,要发送NOTIFICATION报文 通告BGP对端。
Keepalive 维持BGP对等体关系。 定时发送Keepalive报文以保持BGP对等体关系的有效性。
Route-refresh 用于在改变路由策略后请求对 等体重新发送路由信息。只有 支持路由刷新能力的BGP设备 会发送和响应此报文。 当路由策略发生变化时,触发请求对等体重新通告路由。

状态机

根据RFC4271协议规定,BGP的最小状态分为Idle、Connect、Active、OpenSent、OpenConfirm和Established(FRR为了流程更加完整,增加了Clearing和Deleted两种状态)。

Peer状态名称 发什么包 在做什么
Idle 尝试建立TCP连接 开始准备TCP的连接并监视远程peer启动TCP连接,启用BGP时,要准备足够的 资源。
Connect 发TCP包 正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连 接建立失败则进入Active状态,反复尝试连接。
Active 发TCP包 TCP连接没建立成功,反复尝试TCP连接。
OpenSent 发Open包 TCP连接建立已经成功,开始发送Open包,Open包携带参数协商对等体的建立。
OpenConfirm 发Keepalive包 参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包。
Established 发Update包 已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update 通告路由信息。

另外,BGP协议还规定了13种events:

  1. BGP Start

  2. BGP Transport connection open

  3. BGP Transport connection closed

  4. BGP Transport connection open failed

  5. Receive OPEN message

  6. Receive OPEN CONFIRM message

  7. Receive KEEPALIVE message

  8. Receive UPDATE messages

  9. Receive NOTIFICATION message

  10. Holdtime timer expired

  11. KeepAlive timer expired

  12. Receive CEASE message

  13. BGP Stop

6个状态加上13种events共同构成了BGP的状态机。
在这里插入图片描述