1. BGP的报文和状态

1.1. BGP报文

1.1.1. BGP报文结构

BGP所有的报文都是单播

1.1.2. BGP报文类型

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

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

BGP报文报头

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

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

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

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


Open报文

如果BGP报文头中的TYPE为1,则该报文为OPEN报文,OPEN报文用于建立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)

Update报文

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

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

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

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

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

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

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

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的填写方法相同



Notification报文

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

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

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

Data:指定错误数据内容

Keeplive报文

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

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

Route-refresh报文

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

1.2. BGP状态

1.2.1. 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邻居关系建立

1.2.3. BGP状态机


1.2.4. BGP活跃状态验证

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

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

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

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

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

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

4. AS号配置错误

2. BGP路由宣告

2.1. BGP数据库



2.2. BGP路由宣告原则

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

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

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

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

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

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

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

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

2.3. BGP路由宣告方法

本地宣告(Network)

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


引入宣告(Import)

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


2.4. BGP下一跳

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

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

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






©著作权归作者所有:来自51CTO博客作者mb5fcf3d80e40fa的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 【网工收藏必备】从原理到配置,路由重发你都知道吗?
  2. 【华为认证HCIA】小白入门必看的VRRP协议
  3. 华为认证HCIA】适合网工小白看懂的超详细DHCP原理
  4. 第26章 0120-vue路由原理与实现,学习心得,笔记(Vue路由)
  5. 在 Vue.js 中使用嵌套路由
  6. 记一次kubernetes coredns起不来排错
  7. android DHCP流程
  8. 一次完整的HTTP请求与响应涉及了哪些知识?
  9. Android抓包分析-fiddler版

随机推荐

  1. 秒懂Android注解处理器(Android(安卓)Anno
  2. Android TextUtils类介绍
  3. 如何改变Android Progressbar默认颜色
  4. android收集应用崩溃信息
  5. AES加解密算法在Android中的应用及Androi
  6. Android图片的固定大小显示
  7. [置顶] 在Android(安卓)2.3状态栏中增加m
  8. Android(安卓)用 ListView 实现倒计时列
  9. android 一些总结 1.2-1.10
  10. Android(安卓)性能优化(二)Handler运行机制