【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

1. BGP的报文和状态

1.1. BGP报文

1.1.1. BGP报文结构

BGP所有的报文都是单播

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

1.1.2. BGP报文类型

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

BGP报文由BGP报文头和具体报文内容两部分组成

消息最长为4096字节,最短为19字节(只包含报文头)

BGP报文报头

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

BGP报文头包括三个部分,总长19字节

Marker(16字节):用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。

Length(2个字节):BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096

Type(1个字节):BGP消息的类型。Type有5个可选值,表示BGP报文头后面所接的5类报文(其中,前四种消息是在RFC4271中定义的,而Type5的消息则是在RFC2918中定义的)

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)


【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

Open报文

如果BGP报文头中的TYPE为1,则该报文为OPEN报文,OPEN报文用于建立BGP连接

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

version:表示协议的版本号,现在BGP的版本号为4

My autonomous System:发送者自己的AS域号

Hold Time:用于协商BGP对等体间保持建立连接关系,发送Keeplive或Update等报文的时间间隔。BGP的状态机必须在收到对等体的Open报文后,对发送和接收的Open报文的Hold time时间作比较,选择较小的时间作为协商结果。Hold Time的值可为零(不发送Keeplive报文)或大于等于3,系统默认180

BGP Identifier:发送者的router id

Opt Parm Len:表示Optional Parameters(可选参数)的长度。如果此值为0,表示没有可选参数

Optional Paramters:此值为BGP可选参数列表,每一个可选参数是一个TLV格式的单元(RFC3392)

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

Update报文

如果BGP报文头中的TYPE为2,则该报文为UPDATE报文,UPDATE报文用于通告路由

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

Unfeasible Routes Length:标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由

Withdrawn Routes:包含要撤销的路由列表,列表中的每个单元包含一字节的Length域和Prefix域

Total Path Attribute Length:表明Path Attributes部分的长度。其值为零的时,表示没有路由和路由属性通告

Path Attribute:含要更新的路由属性列表,按其类型号从小到大的顺序排序,填写更新路由的所有属性。每一个属性单元包括属性类型,属性长度,属性值三部分,其编码采用TLV格式

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

1. Attr.TYPE(2个字节):包括1字节的Flags和1字节的Type Code

Attr.Flags(1个字节):表示属性的标记,其每个bit位的意义如下显示

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

1. O: Optional bit, 属性的可选性。决定属性是否为必携带属性。带可选属性(optional)设为1,公认属性(well-known)设为零。

2. T: Transitive bit 属性的可传递性。对于可选属性,是可传递的设为1,非可传递的设为0。对于公认属性必须设为1。

3. P: Partial bit 属性的局部性。对于可传递的可选属性是局部的设为1,是完全的设为零。对于非可传递的的可选属性和公认属性,必须设为零。

4. E: Extended Length bit 决定该属性的长度的字段(即Attr. Length)是否需要扩展。不需要扩展则设为零,Attr. Length占1个字节;需要扩展则设为1,Attr. Length占2个字节。

5. U: Unused bits 低4位没有使用,发送时必须全部设为零,并且在接收时被忽略

Attr.Type Code:(1个字节),表示属性的类型号

2. Attr.Length:长度字节

3. Attr.Value:根据不同的属性类型填写不同的内容

Network Layer Reachability Information(NLRI):含要更新的地址前缀列表,每一个地址前缀单元由一个LV二元组(prefix length, the prefix of the reachable route)组成,其编码填写方法与Withdrawn Routes的填写方法相同

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)



Notification报文

如果BGP报文头中的TYPE为3,则该报文为NOTIFICATION报文,NOTIFICATION报文用于处理BGP进程中的各种错误

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

Error code(1个字节):定义错误的类型,非特定的错误类型用零表示

Error subcode(1个字节):指定错误细节编号,非特定的错误细节编号用零表示

Data:指定错误数据内容

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

Keeplive报文

如果BGP报文头中的TYPE为4,则该报文为KEEPALIVE报文。KEEPALIVE报文用于保持BGP连接。

KEEPALIVE报文只有BGP报文头,没有具体内容,故其报文长度应固定为19个字节

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

Route-refresh报文

如果BGP报文头中的TYPE为5,则该报文为REFRESH报文,REFRESH报文用于动态的请求BGP路由发布者重新发布UPDATE报文,进行路由更新

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)【网工收藏必备】全网最全超详细BGP协议文档讲解(中)【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

1.2. BGP状态

1.2.1. BGP状态类型

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)


Idle状态:即空闲状态,不接受任何BGP连接,等待Start事件的产生。如果有Start事件的产生,系统开启ConnectRetry定时器,向BGP邻居发起TCP连接,并将状态变为Connect

Connect状态:即连接状态,系统会等待TCP连接建立完成。

若TCP建立完成,则拆除ConnectRetry定时器,并发送Open消息,将状态置为Open-Sent状态;

若TCP建立失败,则会重置ConnectRetry定时器(定时器的时间会依次翻倍)并转为Active状态

Active状态:即活跃状态,表示TCP建立失败,会重新建立连接,建立成功后变为Open-sent

Open-Sent:即发送状态,该状态中系统和已经向邻居发送了Open报文,等待邻居的Open消息。如果没有错误发送,收到邻居的Open消息后,进入Open-confirm状态

Open-confirm:即确认状态,该状态表明系统已经发送了Keeplive报文,等待对方的keeplive。

Open-confirm:即确认状态,该状态表明系统已经发送了Keeplive报文,等待对方的keeplive。

如果keeplive定时器超时,则重置Holdtime定时器

如果收到notification报文,则断开连接

Established状态:即连接建立状态,说明BGP连接建立可以完成了,可以发送Update消息交换路由信息。

1.2.2. BGP邻居关系建立

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

1.2.3. BGP状态机

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)


1.2.4. BGP活跃状态验证

活跃(Active):路由器进行TCP连接,等待响应

状态可能在活跃和连接之间不断循环

由于以下原因,邻居可能不知道如何返回到该路由器

1. 指定邻居的地址和源地址不一样

2. 邻居与错误的地址建立对等体关系

3. 不存在该路由器的邻居声明

4. AS号配置错误

2. BGP路由宣告

2.1. BGP数据库

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)


【网工收藏必备】全网最全超详细BGP协议文档讲解(中)


2.2. BGP路由宣告原则

缺省条件下,BGP不发布任何本地路由

只有明确宣告的网络才会发送给邻居

宣告的网络必须能精确地在路由表中找到

收到多条路由时,只选最优的给自己使用

只把自己使用的最优路由宣告给邻居

从EBGP学习到的路由会宣告给所有邻居

从IBGP学习到的路由不会宣告给IBGP

从IBGP学习到的路由会宣告给EBGP

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)

2.3. BGP路由宣告方法

本地宣告(Network)

Network命令是逐条将IP路由表中已存在的路由引入到BGP路由表中

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)


引入宣告(Import)

Import命令是根据运行的路由协议(RIP,OSPF,ISIS等)将路由引入到BGP路由表中,同时import命令开可以

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)【网工收藏必备】全网最全超详细BGP协议文档讲解(中)


2.4. BGP下一跳

BGP在给邻居传递路由时的下一跳=等于更新源

在EBGP间传递时会修改下一跳为自己的更新源

在IBGP间传递时不会修改下一跳为自己的更新源

【网工收藏必备】全网最全超详细BGP协议文档讲解(中)


【网工收藏必备】全网最全超详细BGP协议文档讲解(中)【网工收藏必备】全网最全超详细BGP协议文档讲解(中)


【网工收藏必备】全网最全超详细BGP协议文档讲解(中)




上一篇:HCIE成长之路——BGP学习


下一篇:BGP实验