边界网关协议(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对等体(peer)也叫BGP邻居,与OSPF、 RIP等协议不同,BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连。BGP存在两种对等体关系类型:EBGP及IBGP。针对这两种对等体类型,BGP处理路由的操作存在较大差异。
EBGP(External BGP)是指位于不同自治系统(AS)的BGP路由器之间的BGP邻居关系。两台路由器之间要建立EBGP对等体关系,必须满足两个条件 :一是两个路由器所属AS不同(也即AS号不同);二是在配置BGP时,对等体IP地址要求路由可达,并且TCP连接能够正确建立 。
IBGP(Internal BGP)是指位于相同自治系统的BGP路由器之间的BGP邻接关系。两台路由器之间要建立IBGP对等体关系,必须满足两个条件:一是两个路由器所属AS需相同(也即AS号相同);二是在配置BGP时,对等体IP地址要求路由可达,并且TCP连接能够正确建立。
BGP的IP协议号为6。BGP报文由BGP报文头和具体报文内容两部分组成,BGP的运行是通过消息驱动的,共有5种报文类型,这些报文类型有相同的报文头。这些报文类型通过TCP协议进行传播(端口号是179)。消息最长为4096字节,最短为19字节。BGP报文头包括三的部分,总长19字节。
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的状态机。