BGP协议

Source

 BGP作为一种外部网关动态路由协议,其基于TCP的179号端口,其联系不同自治系统间的通讯

关于BGP的版本,最早只有1,2,3这三个版本,后经过改进有了BGP4,目前普遍使用BGP4+版本,其可兼容IPv6

AS号:1-65535 ,互联网中标识不同自治系统的唯一编号,用于区分不同网络的管理域,其中64512-65535为私有范围,其中0保留,用于某些特殊场景(如某些设备默认配置),65535保留,不可用,AS号也经过扩展,现可拓展至4294967295,其中4200000000-4294967294为私有AS号

计时器

Keepalive

60s,用于维护邻居关系,相当于OSPF中的Hello计时器

Hold Timer

180s,等待邻居Keepalive或Update报文的最长时间,超时则认为邻居断开,如要修改确保时间为三倍的Keepalive,相当于OSPF中的Dead计时器

 ConnectRetry Timer

32s,当TCP连接建立失败时,重新尝试建立TCP连接间的间隔时间

Route-Refresh Interval

30s,用于路由刷新,动态请求邻居发送路由信息

报文

BGP消息报头

Marker:早期可用于认证,一般全为1,现在也全为1,后续版本将认证迁移至TCP连接前或者其他方式进行认证

Type:类型1为open,2为updata,3为notifacation,4为keepalive

Open

包含自己身份信息,当TCP建立成功时发送,协商相关参数

Vresion:8b,版本,一般是4

AS号:16b

Holdtime:16b,相当于deadtime,确认最长时间

BGP Id:32b,相当于RouterID,选举方法相同

可选参数长度

可选参数:采用TLV架构,8b表明type,8b表明length,8b表明value价值,即可实现的能力

Keepalive

用于确认对端参数是否,当对方参数可接收会发送此消息,如果将设备keepalive计时器调为0,设备将不会发送此报文

Updata

用于描述路由信息,撤销路由以及描述路径属性

Notification

警示或报错,通常会终止BGP连接

Router-refresh

路由策略的变化时,用于请求重发路由信息

角色与状态机

角色

Speak:每一个加入BGP协议的设备

Peer:设备间互称,有EBGP邻居和IBGP邻居,AS号相同的则为IBGP邻居,反之为EBGP邻居

EBGP默认TTL为1,IBGP仅要求TCP可达

状态机

Idle:初始状态,开始尝试TCP连接

Connect:进行TCP连接

Active:表明TCP建立成功

Opensent:发送open报文,发送对等体相关信息

Openconfirm:确认对端信息无误进入此状态,发keepalive报文

Established:接收到对方的keepalive时进入,表明邻居搭建成功,后续发送updata报文对路由信息进行更新

邻居搭建

TCP建立

Idle状态尝试TCP连接,转入Connect状态,连接成功进入OpenSent状态,连接失败进入Active状态,该状态下不断进行TCP连接尝试,同时启用ConnectRetryTimeout计时器,等待对端回复,在计时器未超时前得到回复完成TCP建立则进入OpenSent阶段,如果超时未收到对端回复将会回到Connect状态

BGP建立

进入OpenSent状态,开始发送Open报文进行身份验证和核对,如果出错发送Notification报文并回退至Idle状态,如果收到正确的Open报文转入OpenConfirm,此时发送keepalive报文,超时或出错返回Idle状态,如果收到正确keepalive报文则进入Estabileshed状态表明邻居建立完成

邻居排除

如果一直Active和Connect反复横跳,可以考虑是不是TTL的问题或者说内部网络不可达,检测路由策略等安全策略是否阻止相关通讯

如果状态可以到达OpenSent,大概率考虑peer配置和指认问题,如AS号是否正确,IP地址以及ASN号的配置

通告规则

1只传自己的路由

2从E学的会通告到全部

3从I学的不会向ta的I通告(水平分割,避免环路,全互联,RR反射器,联盟)

4根据IGP和BGP同步情况确定是否将从I学到的路由通告给E(避免路由黑洞)