一、BGP的五种交互报文
BGP的五种报文,分别是:Open、Keepalive、Update、Notification、 Route-Refresh
BGP包属于应用层,所以BGP的所有报文都是被TCP封装着,依赖TCP通道进行传输。
[下图:可以看到BGP包封装于TCP之内]
1、各报文的作用
如何通过BGP报头判断出所发送的BGP报文类型?【通过BGP头部中的Type字段】
-
TYPE值 报文类型 1 OPEN 2 UPDATE 3 NOTIFICATION 4 KEEPALIVE 5 REFRESH
1-Open:用于协商参数、建立邻居,TCP三次握手正常建立之后,才会发送Open报文。
2-Update:用于更新传递路由信息。
3-Notification:报告错误信息,用于断开邻居关系。
4-Keepalive:定期发送,用于维持BGP邻居关系,Keepalive报文格式中只包含报文头,没有附加其他任何字段。
5-Route-Refresh:路由刷新报文,让对方主动给我发送最新的,我所需要的路由信息。
2、报文内部的重要字段
更多更具体的字段介绍,可自行查看报文格式大全:网络协议报文格式大全 v1.0.chm
Open:
- My AS,本地AS号
- BGP Identifier,BGP标识符(本设备的Router-id)
Update:
-
Withdrawn Routes,撤回的路由。
1、如果该值为0,表示该Update报文用于传递BGP路由。
2、如果该值为4,表示撤消一条BGP路由:
(WRL=4 表示撤销4字节的路由,因为IP地址就是32bit=4字节,故表示撤销了一条路由)
-
Network Layer Reachability Information(NLRI)网络层可达信息,记录BGP路由。
1、在WRL=0的时候,该字段的信息表示增加的路由条目信息。
2、有NLRI就会有路由属性字段,描述该对应路由的路由属性。
-
Path attributes 路径属性
Notification:
- Error Code,错误错误代码,定义错误的类型,非特定的错误类型用零表示。
- Data,详细的错误信息,指定错误细节编号,非特定的错误细节编号用零表示。
Keepalive:
- 只有BGP报头,其Type字段置位4。
Route-Refresh:
- AFI,地址族标识,标识需要传递的路由类型,默认是IPv4,还可以设置IPv6、VPNv4等。
- SAFI,子地址族标识,针对NLRI网络层可达信息就分为 单播 NLRI(SAFI 1)和多播 NLRI(SAFI 2),默认为单播。
二、BGP的六种状态机
BGP的六种状态机分别是:
Idle、Connect、Active、OpenSent、OpenConfirm、Established
1、每个状态机的介绍
Idle:
- 启用BGP后,开始准备建立TCP的连接时的状态。
- 任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。
Connect
-
已发送TCP Syn报文,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
(Connect Retry 重置连接计时器,默认32S)
-
如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
-
如果TCP连接失败,那么BGP转至Active状态。
-
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试进行TCP连接,一直停留在Connect状态。
1、即32S之后还没收到邻居回复TCP报文,将一直重复发送TCN SYN报文,状态也一直处于Connect。
2、除非收到TCP连接失败或其它错误信息,不然一直在此状态停留尝试TCP连接。
3、这种状态下可以判定邻居没有配置BGP或中间设备拦截了BGP报文。
Active
-
从Connect转换到该状态下,BGP继续试图建立TCP连接:
1、如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
2、如果TCP连接失败,那么BGP一直停留在Active状态不断发起TCP连接,直到重传定时器超时之后返回到Connect状态。
要点:重传定时器从Connect状态到Active状态时不会重置会一直倒计时。
OpenSent
-
TCP连接建立成功,开始发送Open包并等待对等体回复Open报文。
1、如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。
2、如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
OpenConfirm
-
此时已经发送了Keepalive报文,正在等待对方回包。
1、如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
Established
-
对等关系建立完毕,双向开始交互Update报文交互各自的路由信息。
-
为了维持Established状态,需要定时发送Keepalive报文保持。
(Keepalive报文默认发送间隔60s、超时时间180s)
-
除了通过Keepalive报文进行保持Established状态,还通过Update等其它报文进行监测:
1、如果收到正确的 Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
2、如果收到错误的 Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。
3、如果收到Notification报文,那么BGP转至Idle状态。
4、如果收到TCP断开通知,那么BGP也会断开连接,转至Idle状态。
2、总结每个状态之间交互的报文
(1)交互 TCP报文
-
Idle
-
Connect
-
Active
(2)交互 Open报文
- OpenSent
(3)交互 Keepalive报文
- OpenConfirm
(4)交互 Update、Keepalive
- Established
3、各状态机之间的关联
(1)由左侧的Idle状态开始,发送TCP SYN请求建立报文后进入Connect状态,如果TCP failed建立失败将进入Active继续进行TCP建立,直到重传定时器超时再回到Connect状态继续重复该过程。
(2)TCP三次握手之后TCP Established建立成功进入Opensent状态并发送Open报文。
(3)当收到正确的Open报文之后进入OpenConfirm状态并发送Keepalive报文。
(4)当收到正常的Keepalive报文之后进入Established状态开始交互Update报文相互学习路由条目
在各个状态机中,如果发生了Error错误,即收到Notification报文将直接回退到Idle状态。
三、BGP对等体关系建立过程
1、对待体建立过程
2、路由交互过程
3、BGP邻居建立过程抓包
该Wireshark抓包中涵盖了BGP建立过程(TCP交互、Open交互、Keepalive交互、Update交互【含Update更新与撤消】)以及路由更新(Route-Refresh)、错误报告(Notification)
Wireshark抓包信息,下载查看更多内容:BGP建立过程抓包(wireshark版本Version 3.6.6)
更多相关笔记,观看CSDN:HCIA~HCIE个人笔记