bgp五种报文类型 bgp的报文类型_可选参数


1. BGP的报文和状态

1.1. BGP报文

1.1.1. BGP报文结构

BGP所有的报文都是单播


bgp五种报文类型 bgp的报文类型_可选参数_02


1.1.2. BGP报文类型


bgp五种报文类型 bgp的报文类型_可选参数_03


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

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

BGP报文报头


bgp五种报文类型 bgp的报文类型_路由表_04


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的报文类型_bgp五种报文类型_05


bgp五种报文类型 bgp的报文类型_bgp通告四原则_06


Open报文

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


bgp五种报文类型 bgp的报文类型_bgp五种报文类型_07


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五种报文类型 bgp的报文类型_可选参数_08


Update报文

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


bgp五种报文类型 bgp的报文类型_bgp通告四原则_09


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

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

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

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


bgp五种报文类型 bgp的报文类型_bgp五种报文类型_10


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

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


bgp五种报文类型 bgp的报文类型_bgp通告四原则_11


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五种报文类型 bgp的报文类型_路由表_12


Notification报文

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


bgp五种报文类型 bgp的报文类型_可选参数_13


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

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

Data:指定错误数据内容


bgp五种报文类型 bgp的报文类型_可选参数_14


Keeplive报文

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

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


bgp五种报文类型 bgp的报文类型_路由表_15


Route-refresh报文

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


bgp五种报文类型 bgp的报文类型_路由表_16


bgp五种报文类型 bgp的报文类型_TCP_17


bgp五种报文类型 bgp的报文类型_路由表_18


1.2. BGP状态

1.2.1. BGP状态类型


bgp五种报文类型 bgp的报文类型_bgp通告四原则_19


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五种报文类型 bgp的报文类型_bgp通告四原则_20


1.2.3. BGP状态机


bgp五种报文类型 bgp的报文类型_可选参数_21


1.2.4. BGP活跃状态验证

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

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

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

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

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

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

4. AS号配置错误

2. BGP路由宣告

2.1. BGP数据库


bgp五种报文类型 bgp的报文类型_可选参数_22


bgp五种报文类型 bgp的报文类型_TCP_23


2.2. BGP路由宣告原则

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

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

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

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

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

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

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

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


bgp五种报文类型 bgp的报文类型_路由表_24


2.3. BGP路由宣告方法

本地宣告(Network)

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


bgp五种报文类型 bgp的报文类型_路由表_25


引入宣告(Import)

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


bgp五种报文类型 bgp的报文类型_bgp五种报文类型_26


bgp五种报文类型 bgp的报文类型_可选参数_27


2.4. BGP下一跳

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

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

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


bgp五种报文类型 bgp的报文类型_可选参数_28


bgp五种报文类型 bgp的报文类型_路由表_29


bgp五种报文类型 bgp的报文类型_bgp通告四原则_30


bgp五种报文类型 bgp的报文类型_bgp五种报文类型_31