一、BGP 消息数据包
1.open 包
用于标示自己,规定BGP运行的参数:
- BGP version(2,3,4会协商最低的)
- AS number,Hold time (默认180s,不一样时以短的为准)
- BGP router-id (标识BGP路由器的产生,和OSPF一样)
- optional parameters(可选支持,如多协议,认证等)
2.keeplive
用于维护 BGP peer 关系,默认60s,open 包协商成功就会发送 keeplive 包。
3.update
用于更新、通告路由;撤销路由通告,选路属性在 path attributes 属性
4.notification
BGP 出错报文,用于通告 BGP 错误。
二、BGP状态机
1、BGP事件有以下几种:
- BGP开始
- BGP结束
- BGP传输连接打开
- BGP传输连接终止
- BGP传输连接打开失败
- BGP传输致命差错
- 重试连接计 时器超时
- 持续事件终止
- keeplive 计时器终止
- 收到 open 消息
- 收到 keeplive 消息
- 收到 update 消息
- 收到 notification 消息
2、状态机:
(1)Idle state
在此状态下配置 neighbor 或重置邻居,BGP将初始化所有资源并打开 Connect Retry 计时器,初始化邻居的TCP连接,监听来自邻居初始化消息并将它的状态转未Connect状态。
为了防止差错的持续出现造成BGP邻居的摆动,Connect Retry 计时器会呈现级数级的增加第一次60s,下一次的为前一 次的2倍120s,再下次240s。
(2)Connect state
BGP在此状态需等到TCP连接完成以后再决定后续的动作;
- 如果TCP同步成功,BGP将connect Retry计时器清零,完成初始化并发送一个 open消息包给邻居并把自己的状态置为 Open send 状态 。
- 如果失败,BGP会继续监听邻居发出的连接,重置 Connect Retry 计时器并将自己状态转移到 Active 状态。
- 如果 Connect Retry 时间超时,计时器重新开始,再次试图与邻居建立TCP连接,BGP 保持 Connect 状态,出现其他事件转 入 Idle 状态。
(3)Active state
置于Active 状态时 BGP 试图与邻居建立一个 TCP 的连接;
- 如果 TCP 连接成功,BGP 将 Connect Retry 计时器清零,完成初始化,给邻居发送Open 消息并将状态置为 Open,hold 时间置为4mins 。
- 如果在 Active 状态,Connect Retry计时器超时回 Connect 状态并重置 Connect Retry 计时器。
- 如果试图与一个未知 IP 建立 TCP 会话,同时 Connect Retry 计时器重置,拒绝连接并保持 Active 状态。
- 任何一个事件都会导致重回 Idle。
(4)Open send state
在此状态,已经发送了 open 消息,BGP 需要等待邻居发送的 open 消息包;
- 收到open消息,如果发现有差错,将给邻居发送一个 notification 消息并将状态置为 Idle 。
- 如果收到 open 包消息没错,将发送 keeplive 包给邻居,并建立IBGP或者EBGP状态置为 Open confire state 。
- 如果收到TCP断开消息则断开BGP连接重置 Connect Retry 计时器,状态置为 Active 。
(5)Open confire state
在此状态下 BGP 会等待一个 keeplive 消息B包或者 notification 消息包;
- 如果收到一个 keeplive 消息包,会将状态置为 Establish 。
- 如果收到 notification 消息包,会将状态置为 Idle 并断开 TCP 连接。
- 如果 hold 计时器超时,检测到一个差错或者有 stop 事件法师娃,BGP 将给邻居发送一个 notification 并断开连接,之后状态置为 Idle 。
(6)Establish state
此状态下 BGP 对等体间的连接已经完全建立,此时可以交换 update, keeplive 和notification 等消息,若收到 notification,则会将状态置为 Idle 中断连接。
三、BGP建邻流程图
以下是根据 BGP 消息数据包和状态机工作过程绘制的流程图:
初次使用亿图软件建立的 BGP 建邻流程图,如有错误请留言,我进行修改。