BGP 同步
IBGP:邻居的AS号和自身的AS号相同,建立的BGP邻居叫做IBGP邻居。
EBGP:邻居的AS号和自身的AS号不同,建立的BGP邻居叫做EBGP邻居。
Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。也不会向邻居发送TCP syn,只有32s之后才会向邻居发送TCP syn 并且将邻居转为connect状态.
卡在idle状态的原因:本地没有去往邻居的路由。
在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
如果TCP连接成功,那么BGP向对等体发送Open报文,并转至opensent状态。
如果TCP连接失败,那么BGP转至Active状态。
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其他BGP对等体进行TCP连接,停留在Connect状态。
如果TCP syn没有收到邻居的响应,将会卡在connect状态,总是尝试与BGP邻居建立TCP连接。
常见卡在connect状态的原因:1、邻居没有启用BGP协议;
2、沿途路径存在流量过滤将TCP SYN拒绝了。
3、EBGP邻居建立没有配置多跳。
在Active状态下,BGP总是在识图建立TCP连接。
如果TCP连接成功,那么BGP向对等体发送open报文,关闭连接重传定时器,并转至openSent状态。
如果TCP连接失败,那么BGP停留在Active状态。
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
在OpenSent状态下,BGP等待对等体的open报文,并对收到的open报文中的AS号、版本号、认证码等进行检查。
如果收到的open报文正确,那么BGP发送Keepalive报文,并转至openconfirm状态;
如果发现收到的open报文有错,那么BGP发送Notification报文给对等体,并转至Idle状态;
Open关键报文内容: Version :用于标识当前的BGP版本,向下兼容。 My AS :用于标识自身所处的AS,邻居的open报文中My as 要和本地配置的一致; HoldTime :默认为180s,即Keepalive时间的3倍,双方不一致将会协商使用一个小的; Router ID:用于标识自身的BGP Router ID ,不能和邻居冲突。 地址簇必须要有一种协商成功。 默认情况下在华为设备携带了3个可协商能力:1、IPV4单播路由功能; 2、路由刷新能力; 3、4字节AS号支持能力
<AR2>refresh bgp all import //要求所有BGP邻居重新给自身发送BGP路由
在Openconfirm状态下,BGP等待Keepalive或Notification报文。
如果收到Keepalive报文,则转至Established状态;
如果收到Notification报文,则转至Idle状态。
在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状态。
建立IBGP邻居关系建议使用环回口,目的是更加稳定。
默认建立EBGP邻居关系的时候,发送报文的TTL=1
默认建立IBGP邻居关系的时候。发送报文的TTL=255
BGP路由的产生方式:
1、通过network的方式,将本地路由中的路由发布出去;
2、通过import-route的方式,将其他协议的路由引入到BGP协议中;
3、通过手动聚合的方式,产生一条聚合路由(汇总);
4、通过自动聚合的方式,产生一条聚合路由。
如何得到BGP路由呢?
IBGP邻居给我传递;
EBGP邻居给我传递;
自身产生BGP路由.
BGP路由通告原则:BGP只会将有效路由中的最优的BGP路由通告给邻居。
自身产生的BGP路由通告给所有的BGP邻居;
从IBGP邻居收到的路由,不会传递给IBGP邻居;(防环)
从IBGP邻居收到的路由,会传递给EBGP邻居;
从EBGP邻居收到的路由,会传递给IBGP邻居;
从EBGP邻居收到的路由,会传递给EBGP邻居。
BGP的防环原则:
AS内的防环使用IBGP水平分割机制(只传一跳),即从IBGP邻居收到的路由不会传递给另一个IBGP邻居。
AS之间的防环原则:利用了BGP的路由属性,即BGP将路由发送给EBGP邻居的时候会将自身的AS号添加到as-path列表中;并且规定
从EBGP邻居收到的路由如果携带AS号,则不接受该路由。
BGP下一跳属性的特点:
1、自身产生的路由发送给所有BGP邻居的时候,下一跳自动修改;
2、从EBGP邻居接受的路由发送给IBGP邻居的时候,下一跳不会自动修改;
3、从EBGP邻居接受的路由发送给EBGP邻居的时候,下一跳自动修改;
4、从IBGP邻居接受的路由发送给EBGP邻居的时候,下一跳自动修改;
5、从IBGP邻居接受的路由不存在发送给IBGP邻居的情况(防环)。
[AR2-bgp]peer 4.4.4.4 next-hop-local //针对邻居配置下一跳自身。 //只需要在AS的边界设备上,针对本AS内的IBGP邻居配置; //自动修改,指的是记将路由传递给该邻居的时候,下一跳修改为自身与该建立邻居的接口IP。
路由黑洞:
BGP同步:用于防止BGP路由黑洞问题;
BGP同步机制:即,从IBGP邻居接收的路由,需要在IGP表中存在,才会发送给EBGP邻居,
如果IGP表中不存在,则不会发送给EBGP邻居。
undo synchronization 关闭BGP与IGP的同步功能。默认关闭,且不可更改。
为什么不使用BGP同步解决路由黑洞问题呢?
1、BGP同步并不能完全解决路由黑洞问题。
2、出现了更好的解决方案:
AS内部采用全互联的IBGP邻居架构,让所有路由器都运行BGP协议,每台路由器都能学到BGP路由,防止黑洞产生;
在ASBR上将BGP路由引入到IGP协议中(该方法已被淘汰);
在ASBR之间建立GRE隧道,解决路由黑洞问题;(节约成本)
通过LSP隧道解决路由黑洞问题。
