BGP报文类型
BGP的5种报文类型
1-Open:用于协商参数、建立邻居,TCP三次握手正常建立之后,才会发送Open报文。
2-Update:用于更新传递路由信息。
3-Notification:报告错误信息,用于断开邻居关系。
4-Keepalive:定期发送,用于维持BGP邻居关系,Keepalive报文格式中只包含报文头,没有附加其他任何字段。
5-Route-Refresh:路由刷新报文,让对方主动给我发送最新的,我所需要的路由信息。
报文名称 | 作用 | 发送时刻 |
Open | 协商BGP对等体参数,建立对等体关系 | BGP TCP连接建立成功之后 |
Update | 发送BGP路由更新 | BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文 |
Notification | 报告错误信息,中止对等体关系 | 当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体 |
Keepalive | 标志对等体建立,维持BGP对等体关系 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接 |
Route-refresh | 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由 |
不同的报文类型拥有相同的头部
BGP的头部报文
BGP这几种报文具有相同的报文头格式。如图1所示。
图1 报文头格式
字段名 | 长度 | 含义 |
Marker | 16字节 | 用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。 |
Length | 2个字节(无符号位) | BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096。 |
Type | 1个字节(无符号位) | BGP消息的类型。Type有如下几个可选值,表示BGP报文头后面所接的几类报文。
|
表1 BGP报文头格式字段解释
BGP基于TCP,在BGP建立邻居关系之前,需要现建立TCP的连接
建立BGP邻居关系的两台设备,都会主动发送TCP的连接,先发起的TCP连接会被中断,后发起的TCP连接有效
BGP报文:
1.BGP header:每一类BGP报文都会携带的头部
2.BGP type:
1.open: 用于建立BGP的邻居关系 (类似于OSPF的hello报文)
需要有哪些参数的协商?
2.keepalive:用于维护BGP的邻居关系
不携带任何信息参数,只用于邻居保活, 周期60s默认发送,180s超时 说人话:只用来确定邻居你还在不在
[AR3-bgp]timer keepalive <0-21845> 改变周期通告的时间
[AR3-bgp]timer keepalive 10 hold <0, 3-65535> 配置保活时间
保活时间(hold)一定要大于改变的周期通告时间(keeoalive)一定是(keeoalive)的时间三倍网上 设置70s的keeoalive就一定要设置210以上的hold
keepalive和holdtime时间两端可以不一致(要满足本端的keepalive时间在对端的holdtime 时间内)
两端最终会协商为小的值
keepalive时间一定是要在你保活时间内的,只要能满足这个条件邻居就能建立,建立如果keepalive,holdtime不一致后两端最终会协商为小的值
3.update:用于BGP路由信息的传递 和 撤销
只有当设备发送路由或撤销路由时,才会发送
收到了对端的route-refresh报文,也会通告updata
4.notification:用于断开BGP连接
例如:管理员手工删除BGP邻居后,会通告notification报文,通知对端断开BGP邻接(TCP连接)
5.route-refresh:用于请求更新BGP路由
<AR3>refresh bgp all import 向对端发送route-refresh报文请求路由信息 我问你要
<AR3>refresh bgp all export 向对端主动发送updata报文 我发给你
发送时可以指定地址族 如:IPV4 IPV6 VPNV4等等
1字节=8bit
BGP的状态机:
1.idle:初始化状态,等待初始事件的发生 peer敲下之后就转换成下一个状态
2.connect:TCP连接状态
1.不存在TCP连接的设备,退回初始状态
2.存在TCP连接,但是TCP连接超时或TCP连接被中断 :说人话:你一直在发TCP的连接但是没有人给你回
1.进入到active状态,继续尝试TCP连接,并启动连接定时器(32-37s)
1.如果连接定时器超时,则退回connect
2.在连接定时器内,TCP正常连接,发送open报文,进入下一个opensent状态
3.存在TCP连接,且连接正常,发送open报文,进入下一个opensent状态
3.opensent:等待对方发送的open报文,进行open报文参数的协商
1.如果没有收到对方的open报文,发送notification报文退回idle状态
2.如果收到了open报文,但报文内的参数协商存在问题,发送notification报文退回idle状态
3.如果收到了open报文,且报文内的参数协商不存在问题,回发送keepalive报文,进入openconfirm状态
4.openconfirm:等待对方发送的keepalive报文
1.如果没有收到keepalive报文,则发送notification报文退回idle状态
2.如果收到了keepalive报文,进入到established状态 BGP邻居关系正常建立
5.established:BGP的邻居的最终状态
如果存在错误,会发送notification报文退回idle状态
可以通过update报文更新路由、撤销路由信息
可以通过route-refresh报文,请求路由信息
***任何状态下,如果收到了notification报文,则退回到idle状态
BGP路由的生成
1.通过network方式通告的
[AR4-bgp]network 100.4.4.4 32
被通告的路由信息,一定是设备已经存在的路由,说人话就是在路由表里面有的
2.通过import方式引入的
[AR4-bgp]import-route static
协议存在的路由,可以被引入的方式执行引入,被引入的路由不需要不一定在路由表中最优先
3.通过BGP邻居学习的
可以接收IBGP、EBGP邻居发布的路由
4.通过聚合的方式产生路由
[AR4-bgp]summary automatic 自动汇总,bgp分为自动和手动两种
[AR4]dis bgp routing-table 查看BGP协议生成的路由表
1.如果路由的下一跳为0.0.0.0 ,则表示该路由是自身设备发布的 就是自己做的自己发布的自己去自己
2.如果路由的下一跳为127.0.0.1,则表示该路由时设备聚合发布的
BGP路由如何传递?
BGP路由如何传递? AR3视角
1.从EBGP邻居接收的路由,可以传递给IBGP邻居
路由的下一跳是不做改变的,会导致BGP路由不可用
路由不存在:* > 可用的路由:* 最优的路由: > i是ibgp邻居接收的
[AR3-bgp]peer 1.1.1.1 next-hop-local
向IBGP邻居传递路由时,将路由的下一跳改变为自身的更新源地址
2.从IBGP邻居接收的路由,不可以传递给IBGP邻居
为了防止AS内BGP路由环路,设计的规则 (水平分割)
3.从EBGP邻居接收的路由,可以传递给EBGP邻居
路由的下一跳改变为邻居的更新源地址 说人话就是你邻居建立使用的地址
4.从IBGP邻居接收的路由,可以传递给EBGP邻居
*BGP设备自身发布的路由,可以传递给IBGP邻居、EBGP邻居
***BGP只传递最优的路由条目*** 你是最优的一定是可用的,你是可用的,不一定是最优的
BGP路由表
在设备上通过display bgp routing-table查看BGP路由表:
Network:路由的目的网络地址以及网络掩码
NextHop:下一跳地址
如果想要查看某条路由更加详细的信息,可以通过display bgp routing-table ipv4-address { mask | mask-length} 查看,该命令会将匹配的BGP路由信息详细展示。
BGP路由表2