美文网首页
【HCIP】3BGP协议-2.2BGP邻居关系的建立

【HCIP】3BGP协议-2.2BGP邻居关系的建立

作者: 周山 | 来源:发表于2021-07-26 19:36 被阅读0次

    前期回顾

    open报文携带信息

    1、自身AS号
    2、bgp route id
    3、BGP 版本号
    4、hold time
    能力协商
    1、地址簇协商:ipv4单播地址簇
    2、路由刷新功能
    3、4字节AS号的支持


    下来我们做一个简单的实验:直连路由器建立邻居,然后通过抓包分析BGP的报文协议

    图片.png

    我们看到TCP三次握手之后,互相发open 报文,然后继续keepalive 报文,然后邻居关系就正常建立起来了。

    keepalive报文

    默认每隔60s周期性发送,如果180s没有收到keepalive报文,则认为BGP邻居失效,断开TCP连接。

    其他报文

    除此之外,BGP还有其他三种报文类型,一共五种,
    分别是
    update报文:BGP路由传递以及撤销
    Route-refresh报文:
    用于手动进行BGP路由的触发更新,或者用于ORF功能。
    Notification报文:
    通知报文,用于报错,收到该报文会断开TCP连接。

    总结:

    open报文:
    邻居建立和能力参数协商,(至少有一个地址簇能力要一致)
    keepalive报文:
    默认每隔60s周期性发送,如果180s没有收到keepalive报文,则认为BGP邻居失效
    断开TCP连接。
    updata报文:
    BGP路由传递以及撤销
    Route-refresh报文:
    用于手动进行BGP路由的触发更新,或者用于ORF功能。
    Notificationn报文:
    通知报文,用于报错,收到该报文会断开TCP连接。


    图片.png

    BGP状态机

    Idle(空闲):idle是bgp连接的第一个状态,在空闲状态,bgp在等待一个启动事件,启动事件出现以后,bgp初始化资源,复位连接重试计时器(Connect-Retry),发起一条TCP连接,同时转入connect(连接)状态。路由器再从路由表中搜索去往neighbor指定的ip地址的路由,看是否有前往该地址的路由,如果没有明细路由的话,就会卡在这个状态,即使存在默认路由也是不可以的,因此此时不会主动发起TCP连接,如果出现这样的情况,可以去查看show ip route,然后通过配置“静态路由”或者“通过IGP来通告”neighbor地址的ip来解决这个问题。
    1、没有去往邻居地址的路由,无法发起TCP三次握手,也无法完成TCP的三次握手。
    2、邻居发起的TCP握手,被本端拒绝,拒绝的原因是邻居发起TCP报文的源地址,不是本端指定的邻居地址。
    Connect(连接):在Connect状态,BGP发起一个TCP连接,如果连接重传计时器(Connect-Retry)超时,就重新发起TCP连接,并继续保持在Connect状态,如果TCP连接成功,就会转入OpenSent状态,如果TCP连接失败,就转入Active状态。
    如果搜索到了,则开始建立TCP连接,如果成功的话,邻居状态进入“connect”状态。要分清楚是建立TCP连接的源地址和目标地址是什么,是双方的neighbor如果双方指定的IP地址不相同,那肯定就得不到“期望”的TCP连接。
    当发起TCP连接路由器,无法收到邻居的TCP回应报文时,就会卡在connect状态,并且5s后重传一次TCP连接请求,再等待32s左右,重新发起TCP连接请求,通常是由于发起端存在邻居地址的路由,并能主动发送TCP3次握手,但无法从邻居接收第二次握手的报文,通常是由于邻居缺乏到对端的路由,或者是应答报文中途被丢弃
    发起tcp连接的路由器,在5s内,如果没有得到邻居的任何回应报文,重传tcp报文,在建立不起来重连

    Active状态:在Acitve状态,BGP总在试图建立TCP连接,如果连接重传计时器(Connect-Retry)超时,就退回到Connect章台,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就继续保持在Acitve状态,并且继续发起TCP连接,没有收到 对OpenSent报文的确认 报文。
    当发送TCP连接路由器,能收到相应的邻居应答报文,代表两台路由器能正常交互报文,但是依然无法建立起三次握手,将会进入Active状态
    邻居之间地址可达,但是建立BGP邻居的源地址目的地址不匹配,导致本段主动发起TCP连接的源地址和对端指定的邻居地址不匹配,导致本段处于active,对端处于idle状态
    OpenSent (打开消息已发送:代表已经发送open报文,并等待接收邻居的open报文):在OpenSent状态,TCP连接已建立,BGP也已经发送了第一个Open报文,剩下的工作,BGP就在等待其对等体发送Open报文,并对收到的Open报文进行正确性检查,如果有错误,BGP就开始发送Keepalive报文,并复位Keepalive计时器,开始计时。同时转入OpenConfirm状态。
    TCP连接建立之后,开始发送open报文,包括很多参数,以让对方去根据这个“open”来协商参数。
    只要TCP建立成功,一定就可以发送出open报文,除非在接口做策略控制。
    OpenConfirm(打开消息确认:代表收到邻居的open报文,并发送keepalive报文,等待接收邻居的keepalive报文)状态:在OpenConfirm状态,BGP发送一个Keepalive报文,同时复位保持计时器,如果收到了一个Keepalive报文,就转入Established的阶段,BGP邻居关系就建立起来了,如果TCP连接中断,就退回到Idle状态。
    如果参数协商成功,就会发送Keepalive报文,进行隐式确认,收到该报文之后,就进入open-confirm状态。
    如果在5s之内依然是没有收到Keepalive报文的话,就进入Active状态。
    @不同意openSend报文中的内容,即参数协商不成功,就不会发送open-confirm回去。一般就是AS号不同,此时邻居表中看到的状态是:不停的idle和active状态之间的切换。
    Established:邻居关系建立。
    Established(连接已建立):在Established状态,BGP邻居关系已经建立,这时,BGP将和它的邻居们交换Update报文,同时复位保持计时器。

    相关文章

      网友评论

          本文标题:【HCIP】3BGP协议-2.2BGP邻居关系的建立

          本文链接:https://www.haomeiwen.com/subject/asfimltx.html