BGP报文——邻居状态机

一、实验

1、拓扑图

2、基础配置


AR1

<Huawei>sys

[Huawei]un in e

[Huawei]sysname AR1

[AR1]int g0/0/0 

[AR1-GigabitEthernet0/0/0]ip address 12.1.1.1 24


AR2

<Huawei>sys

[Huawei]un in e

[Huawei]sysname AR2

[AR2]int g0/0/0 

[AR2-GigabitEthernet0/0/0]ip address 12.1.1.2 24


3、我们在AR1 g0/0/0抓包

4、配置BGP


AR1

[AR1]bgp 1

[AR1-bgp]peer 12.1.1.2 as-number 2


AR2

[AR2]bgp 2

[AR2-bgp]peer 12.1.1.1 as-number 1


查看一下,要多等一会

一般来说,邻居指向完成之后([AR1-bgp]peer 12.1.1.2 as-number 2),路由器就要去指定的路由器接口发送三次握手请求,三次握手成功之后,就进入Established状态

它等待建立的时间有一个名词:Start事件

因为在华为里,它认为BGP是一个很复杂的协议,华为在设计的时候,它就给操作者一个预留的时间,这个时间就是start事件,32秒

所以在华为里,建立三次握手之间呢,需要一个start事件,在32秒内,BGP是不会做任何事情,等待32过去以后,它才会主动发起三次握手,或接受别人的三次握手

二、BGP邻居状态机

1、idle

        触发条件:

BGP初始状态,一旦配置了BGP的peer以后,或者重置了已存在的peer之后,就会进入这个状态,在这个状态下BGP不会向这个peer发送TCP三次握手,同时也会拒绝这个peer发来的TCP3次握手。

        关键机制:

        在 进 入 这 个 状 态 时 有 一 个 start 事 件 , 这 个 事 件 会 维 持 32 秒 。 在 这 个 之 后 开 始 建 立 该 peer 的 TCP3 次 握 手 , 开 始 建 立 TCP 连 接 , 发送 SYN 以 后 , 进 入 到 connect 状 态 。

常见的几种idle状态原因:

1、如果没有去往peer的路由,那么就无法SYN,此时该peer会一直卡在idle

2、收到了错误信息,回退到了idle

3、 手动挂起邻居[AR1-bgp]peer 12.1.1.2 ignore (一般来说两端都要配置)

2、connect(连接状态)

关键动作:

        在这个状态下,BGP会启动连接重传定时器(connect retry 默认32秒),等待TCP3此握手完成

状态转换:

        a、向邻居发起SYN以后就会进入这个状态,在这个状态要完成TCP3次握手

        b、如果TCP3此握手完成,则向邻居发送open报文,然后转换到opensent状态

        c、 如果TCP3此握手失败,则将会把这个peer状态改为active

        d、 如果重传计时器超时,BGP没有收到邻居的响应,那么会卡在connect状态

常见的几种connect状态原因:

        1、邻居没有给我响应

        2、我的SYN在沿途中可能遇到了阻碍,没有到达对方(也可能是在沿途中没有到达的路由所致)

        3、 EBGP邻居没有配置TTL多跳

        总结一句话,就是SYN没有被邻居响应

3、Active(活跃的)

触发条件:

        当TCP三次握手失败,才会进入这个状态

关键机制:

        在这个状态下,BGP总是试图去建立TCP3次握手

        1、如果在多次尝试下,TCP3次握手成功了,那么BGP会向该peer发送open报文,关闭重传定时器,转至opensent状态

        2、如果在多次尝试下,TCP3次握手仍然失败,那么BGP会将该peer停留在Active状态

        3、如果重传定时器超时(32s),且没有得到该peer的响应,那么会转至connect状态

4、opensent(open报文已发送)

核心逻辑:

        在这个状态下,BGP已经向该peer发送了OPEN报文,在等待对方给我发送OPEN报文

        1、如果收到了对方发送的OPEN报文,参数协商成功,则会向该peer发送keeplive报文,然后转到openconfirm状态

        2、如果收到了对方发送的OPEN报文,参数协商失败,则会发送notification报文,然后转到idle状态

5、openconfirm(open报文已确认)

状态验证:

        1、在这个状态下 BGP等待对方的keepalive报文,如果收到了对方的keepalive报文则转换为established状态

        2、在这个状态下 BGP如果收到了notification报文,则转换为idle状态

6、established(连接已建立)

正常运行状态

        在这个状态下说明邻居建立完毕。在这个状态下可以交互的报文有:update,notification,keepalive,router-refresh

        1、如果在这个状态下,收到正确的update或keepalive报文,那么BGP会认为邻居处于正常运行状态,继续保持

        2、如果在这个状态下,收到错误的update或keepalive报文,那么BGP会认为邻居处于异常运行状态,会发送notification报文,并转到idle状态

        router-refresh报文的发送是不会影响邻居关系

三、BGP报文:

BGP报文默认是由两部分组成,分别是BGP报文头,和具体报文内存

1、BGP报文头

Marker:占用16字节,默认全F,用于检查BGP邻居头部的消息是否完整

Length:占用2字节,用于描述BGP报文的总长度,包括了头部和具体部分

Type   :类型,用于描述当前BGP报文类型,分为1 2 3 4 5 ,如下

        1、open报文

                用于建立BGP邻居的连接,协商BGP参数的报文

        2、update报文

                用于BGP邻居之间交互路由信息的报文

        3、notification报文

                差错报文,用于报错,且中断邻居关系的报文

        4、keepalive报文

                用于保持邻居连接的报文,用于保活

        5、router-refresh报文

                用于在策略改变之后,请求邻居重新发送路由信息,并且只有支持路由刷新能力的设备才会响应这个报文

2、open报文

version   :BGP版本,默认都是版本4

my as     :描述发送此报文的路由器所处的AS号,如果对端的AS号和本地配置不一致,则协商失败,发送notification报文

hold time:描述路由器邻居失效时间,默认情况是keepalive的3倍,当两端hold  time不一致时,需要协商为数值低的使用

bgp id    :用来描述该发出该报文的路由器BGP router-id

optional parameters length:BGP协商参数字段长度

optional parameters:BGP协商参数

3、update报文

withdrawn routes length:用来描述失效的路由长度

total path attribute length:用来描述携带的属性长度

path attributes:携带的属性信息

NLRI:网络层可达信息,用来描述所携带的路由的网络号和掩码长度

针对属性不同的路由条目,需要分开update报文发送

具有相同属性的路由条目,可以在一条update报文发送

withdrawn routes length:如果这个参数不为空,那么下面就会显示携带的需要删除的路由信息

如图

 4、注:

报文这个东西,最主要的就是看open报文和update报文,像keepalive这种没什么看头,它就是一个keepalive信息,我截几张图,给大家看一下

keepalive

notification

这种信息只用看它的BGP报文头Type,知道它是那类就行

四、抓包与故障排查要点

报文交互流程

先等待32s 的start事件(这期间是不会发送tcp报文的)

1、三次握手建立(发送tcp报文)

2、发送open报文(协商 AS 号、Hold Time、BGP ID 等参数)

3、这是什么呢?拆链报文,因为BGP的TCP握手是双向的,最后建立的TCP连接呢,是俩组(4个),当它每次建立三次握手之后,它要将其中一个拆掉。我们看图,建立TCP是12.1.1.1向12.1.1.2发起的,拆链是12.1.1.2向12.1.1.1发起的,保留的是12.1.1.1建立的TCP握手

邻居地址详细信息

这里有个命令可以修改keepalive时间和hold time时间[Huawei-bgp]timer keepalive 50 hold 150,但是这样会影响邻居,导致重新建立。

协商规则

hold time:

默认情况下hold time是keepalive的3倍关系,keepalive默认60s

如果从邻居接受到达hold time和自己的hold time相同,则不做改变

如果从邻居接受到达hold time和自己的hold time不同,则协商结果是使用数值小的hold time执行

        如果协商后的hold time/3,和自己的keepalive值不同,选用数值小的执行,如下图

至此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值