BGP协议
基本概述
BGP是一种用于在不同自治系统(AS)之间交换路由信息和可达性信息的路径矢量路由协议。
BGP特征
1、BGP使用TCP作为其传输层协议(监听端口号为179),提高了协议的可靠性,不需要专门的机制来确保连接的可控性。BGP进行域间的路由选择,对协议的稳定性要求非常高。因此用TCP协议的高可靠性来保证BGP协议的稳定性。BGP的对等体之间必须在逻辑上连通,并进行TCP连接。目的端口号为179,本地端口号任意。
2、路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
3、BGP从设计上避免了环路的发生。
AS之间:BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路。
AS内部:BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路。
4、支持无类别域间路由(CIDR)和VLSM。
5、BGP提供了丰富的路由策略;提供了防止路由振荡的机制;BGP也易于扩展
6、外部网关协议,与OSPF、EIGRP等内部网关协议(IGP) 相对,BGP设计用于在网络之间运行,而非网络内部。
AS区域
AS是指在一个实体管辖下的拥有相同选路策略的IP网络。
AS号(ASN):
范围: 16位(1-65535),现已扩展为32位。
公有ASN: (1-64511) - 用于在互联网上交换路由,需要向地区互联网注册机构(RIR,如APNIC, ARIN)申请。
私有ASN: (64512-65535) - 用于私有网络,例如在MPLS VPN中,不会在公网上传播。
BGP邻居关系
BGP路由器之间必须建立TCP连接才能交换路由信息。建立邻居的过程称为有限状态机(FSM)。
邻居类型

EBGP(外部BGP): 位于不同AS的BGP路由器之间建立的邻居关系。
默认情况下,eBGP邻居的TTL值被设置为1,意味着它们必须直连。可以通过 ebgp-multihop 命令改变此行为。
IBGP(内部BGP): 位于同一AS内的BGP路由器之间建立的邻居关系。
用于在AS内部传播从eBGP学来的路由,保证AS内部所有BGP路由器路由信息的一致性。
iBGP水平分割规则: 从一台iBGP对等体学来的路由,不会传递给其他iBGP对等体。这是为了防止在AS内产生路由环路。
交互角色
Speaker:发送BGP消息的路由器称为BGP发言者,它接收或产生新的路由信息,并发布给其它BGP Speaker。
Peer:相互交换消息的BGP Speaker之间互称对等体(Peer),若干相关的对等体可以构成对等体组(Peer Group)。
消息类型
- Open消息:负责协商邻居参数。是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。
- Update消息:路由的更新(新增或撤销)信息。用于在对等体之间交换路由信息。Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
- Keepalive消息:维持邻居关系。BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性。
- Notification消息:路由的更新(新增或撤销)信息。当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。
- Route-Refresh消息:通过OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。
消息应用
1、通过TCP建立BGP连接时,发送OPEN消息;
2、连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端
稳定后要定时发送KEEPALIVE消息以保持BGP连接的有效性;
3、当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体
ROUTE-REFRESH消息用来通知对等体自己支持路由刷新;
报文格式
BGP通用头部报文

- Marker(标记 - 16 字节)
作用: 用于同步和对报文进行认证。
填充规则:
如果报文是 OPEN 报文,或者未使用认证,则 Marker 字段必须为 全 1(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)。
如果使用了认证机制,则该字段用于认证计算。接收方可以通过验证此字段来确认报文的完整性和真实性。
- Length(长度 - 2 字节)
作用: 指示整个 BGP 报文(包括头部)的总长度,以字节为单位。
范围: 允许的最小值是 19(16+2+1),最大值是 4096。
- Type(类型 - 1 字节)
作用: 标识 BGP 报文的类型。有以下 4 种:
1 - OPEN: 建立 BGP 对等体连接。
2 - UPDATE: 交换路由信息(新增或撤销)。
3 - NOTIFICATION: 报告错误并中断 BGP 连接。
4 - KEEPALIVE: 维持 BGP 连接的有效性。
OPEN报文

- Version(版本 - 1 字节)
BGP 的版本号。当前广泛使用的版本是 4。
- My Autonomous System(我的自治系统 - 2 字节)
发送方的 AS 号。用于对方确认是 eBGP 还是 iBGP 连接。
- Hold Time(保持时间 - 2 字节)
对方必须在此时间内收到 KEEPALIVE 或 UPDATE 报文,否则认为连接已失效。
双方会协商使用较小的那个值作为最终的 Hold Time。如果一方提议为 0,则表示不进行保活。
- BGP Identifier(BGP 标识符 - 4 字节)
发送方的 Router ID,通常是一个 IPv4 地址。在同一个 AS 内必须唯一。
- Opt Parm Len(可选参数长度 - 1 字节)
指示后面“可选参数”字段的总长度。如果为 0,则表示没有可选参数。
- Optional Parameters(可选参数 - 变长)
采用 TLV(类型-长度-值)格式。最重要的可选参数是能力协商,用于通告支持的多协议扩展(如 IPv6、VPNv4)、路由刷新能力等。
邻居状态机

BGP有限状态机共有六种状态,分别是Idle、Connect、Active、OpenSent、OpenConfirm和Established。
Idle状态
在Idle状态(空闲状态)下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。
任何状态中收到Notification报文或TCP拆除链路通知等Error事件后,BGP都会转至Idle状态。
Connect状态
在Connect状态(连接状态)下,BGP启动连接重传定时器(Connect Retry,缺省为32秒),等待TCP完成连接。
如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态;
如果TCP连接失败,那么BGP转至Active状态;
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
如果发生其他事件(由系统或者操作人员启动的),则退回到Idle状态。
Active状态
在Active状态(活跃状态)下,BGP总是在试图建立TCP连接。
如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态;
如果TCP连接失败,那么BGP停留在Active状态;
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
OpenSent状态
在OpenSent状态(打开报文已发送状态)下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态;
如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
OpenConfirm状态
在OpenConfirm状态(打开确认状态)下,双方 OPEN 报文已成功交换,参数已协商一致,BGP等待Keepalive或Notification报文。
如果收到一个 KEEPALIVE 报文,它认为对等体是存活的,并将状态转移到最终的 Established 状态。它也会启动一个 Keepalive 计时器并发送 KEEPALIVE 报文。
如果收到 NOTIFICATION 报文或 Hold Timer 超时,状态将转回 Idle。
Established状态
在Established状态(已建立状态)下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。
如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。
Route-refresh报文不会改变BGP状态。 如果收到Notification报文,那么BGP转至Idle状态。
如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态。
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号