BGP邻居状态机
可以利用邻居状态机描述BGP连接的建立和维护,它将有以下的6中状态:
1、ldle (空闲)状态
BGP总以ldle状态为起点,该状态拒绝所有入站的连接。只有在BGP起动之后,BGP进程将初始化所有BGP资源,初始化去往邻居的TCP连接,监听来自邻居的TCP初始化消息,并更改为连接状态。启动事件一般是配置BGP进程。
2、Connect(连接)状态
进入Connect状态后,BGP进程将一直等待TCP连接的完成(三次握手),当TCP连接建立成功,BGP将会向邻居发送Open消息,并进入OpenSent(打开发送)状态。如果TCP会话没有建立,BGP将继续监听邻居初始化的连接,开启连接重试定时器,迁移到Active(激活)状态。Connect→→OpenSent(TCP连接建立);Connect→→Active(TCP连接暂未建立)。
3.Active(激活)状态
该状态下,BGP进程继续尝试和邻居建立TCP连接,如果TCP连接建立成功,BGP进程清除连接重试定时器,完成初始化过程,并向邻居发送Open报文,迁移到OpenSent(打开发送)状态。
如果连接重试定时器到期BGP进程依然处在激活状态,进程将返回连接状态,监听邻居发起的TCP会话,这个过程将反复循环,直到监听到由邻居发起的TCP会话。
4.OpenSent(打开发送)状态
进入了该状态,已经发送了Open消息,BGP将一直等待来自邻居的Open消息。一旦接收到Open消息后,将检查该消息的每一个字段,如果有差错,将会发送Notification消息迁入Idle状态。
如果接收到的Open消息没错,就会发送Keepalive消息并商讨Keepalive定时器和Keepalive发送的时间。 并迁移到OpenConfirm(打开确认)状态。
5.OpenConfirm(打开确认)状态
进入了这个状态下,BGP进程将等待邻居确认的Keepalive或Notification消息。如果接收到的是Keepalive消息则迁移到Established(建立)状态,如果是Notification消息那么就将迁移到Idle状态。
6.Established(建立)状态
进入了这个状态就说明了BGP的对等连接正式建立了,对等体之间交互Update,Keepalive和Notification消息,如果接受到的是Update或Keepalive消息,则重启保持定时器,如果接受到一个Notification消息,则会迁移到Idle状态。
注:
①Q:长时间停留在Active或ldle状态,可能的原因是什么?
A:a)本路由器没有到达BGP Open报文中源IP地址的路由(debug ip bgp输出:no route)
b)neighbor命令中配置了错误的IP地址(debug ip bgp输出:no route)
c)neighbor命令中没有配置更新源地址(debug ip bgp输出:Connection refused by remote host)
d)在建立eBGP邻居是的neighbor命令中没有考虑到TTL值问题
e)没有配置neighbor命令
f)AS号配置错误(debug ip bgp输出:Connection refused by remote host)
②我们在实际网络中操作BGP时,为了避免路由动荡,可以使用命令router(config-router)# neighbor A.B.C.D shutdown来暂时的关闭BGP邻居,此时邻居配置未删除但是路由丢失。
③查看命令show ip bgp summary #观察最后1列显示为空白或数字,表示该邻居正常建立。
查看命令show ip bgp neighbors #观察BGP State显示为Established表示邻居正常建立。