基于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连接能够正确建立。
报文
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类报文。
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:
-
BGP Start
-
BGP Transport connection open
-
BGP Transport connection closed
-
BGP Transport connection open failed
-
Receive OPEN message
-
Receive OPEN CONFIRM message
-
Receive KEEPALIVE message
-
Receive UPDATE messages
-
Receive NOTIFICATION message
-
Holdtime timer expired
-
KeepAlive timer expired
-
Receive CEASE message
-
BGP Stop
6个状态加上13种events共同构成了BGP的状态机。