BGP中的 Keepalive time 和 hold time

http://www.jiancenj.com/2209.aspx

在BGP学习中,我们了解到,BGP有个keepalive time,默认是60秒,还有hold time,是keepalive time的3倍关系,也就是180秒。同时我们也了解到,hold time的值是协商值,那这个值是怎么协商的呢?我们来看一下:

图片1.jpg

拓扑如上:两台设备之间建立IBGP连接。

我们可以通过display bgp peeripv4 verbose 命令查看keepalive time和hold time,如下图:

图片2.jpg

我们可以看到,在没有修改的情况下,keepalive和hold时间都是默认值。

在路由器2上的BGP进程中,修改keepalive和hold值。用timer keepalive +时间 hold +时间修改。注意:修改时间值时,holdtime ≥ 3*keepalive time。

首先我们先修改hold time =3*keepalive time:

图片3.jpg

然后去路由器1上查看协商的hold值。注意:查看之前要重新启用bgp进程,使用reset bgp 100 ipv4命令。因为协商参数的传递由open报文负责,而在BGP邻居状态使能的情况下,只有keepalive和update报文交互。reset之后,再去查看。我们可以看到:

图片4.jpg

路由器1上协商的hold time,为60秒,keepalive time为20秒。

接下来我们再路由器2上继续修改,hold time > 3*keepalive time。

图片5.jpg

再次到路由器1上查看:

图片6.jpg

这时候我们发现,协商的hold time为100秒,keepalive time是33秒。这时候的keepalive time并不是我们设置的20秒。这是因为在open报文中只携带hold time值,不携带keepalive值,keepalive是根据与hold 值的三倍关系计算出来的。

那我们继续做一个修改:在路由器1 上设置keepalive time为30秒,hold time为90秒,路由器2上keepalive time 为20秒 hold time 为100秒保持不变。

这时候我们发现:

路由器1上:

图片7.jpg

路由器2上:

图片8.jpg

我们发现,路由器1和路由器2上hold 值是一致的,为90秒。但是keepalive 值,路由器1上是30秒,路由器2上是20秒。这是因为,当路由器接收到对方传来的hold值时,首先与自己的做比较,如果接收到的hold值小,则hold值修改为接收到的值,在比较keepalive值,若自己的keepalive值小于接收到的(hold值/3),则用自己的keepalive值,若自己的keepalive值大于接收到的(hold值/3),则使用接收到的(hold值/3);当路由器接收到的hold值比自己的hold值大时,则不做任何修改。

参考


物理机将CPU频率固定在最高运行频率上 什么叫网元?