目录
边界网关协议(Border Gateway Protocol),简称BGP。是一种用来在路由选择域(也可以叫做自治系统 --- AS)之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议。是一种外部网关协议(EGP)。
首先来了解一下自治系统 --- AS
-
一组同一个管理机构进行管理,对外呈现统一选路策略的路由器的集合。
-
AS编号(一段时间内)
-
由两个字节组成,取值范围是0 - 65535,其中0和65535保留。
-
其中1 - 64511属于公有AS编号(由统一机构管理,收费下发),64512 - 65534属于私有AS编号(开放使用)。
-
-
后来出现了新的AS编号,由4个字节组成。
协议特性
-
BGP协议只负责将路由从一个AS传输到另一个AS。而路由在AS内的传输靠IGP协议(内部网关协议)。
-
BGP是路径矢量协议,一跳就是一个自治系统
-
当一条路由传入某个AS,该路由的下一跳会变为上一个AS出接口的地址。而这条路由在AS内传播时,下一跳不变。
-
-
具有防环机制。
-
基于TCP协议传输,端口号是179。
-
只能(必须)手动配置邻居。
-
BGP协议第一次发送完整路由表,后续只会发送增量更新。
-
具有多种属性可以用来控制路由选择。
-
支持CIDP(无类域间路由,即子网汇总)和路由聚合。
-
支持路由过滤和路由策略。
BGP基本术语
BGP Speaker(BGP发言者)

-
运行BGP协议的路由器。
BGP Peer(BGP对等体)
两个相互之间存在TCP连接、相互交换路由信息的BGP Speaker之间互称为BGP Peer。可以是两个路由器直连的情况,也能使非直连的情况。
又分为EBGP对等体和IBGP对等体。
-
EBGP对等体
-
跨AS间的邻居,一般情况下是物理上直连的设备。
-
BGP发言者从EBGP对等体获得的路由信息会向自己的所有BGP对等体通告(包括IBGP和EBGP)。
-
-
IBGP对等体
-
同一个AS内的邻居。
-
BGP的协议报文
BGP报文由BGP报文头和具体报文内容两部分组成。
BGP头部

-
Marker
-
占16字节,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全F)。
-
-
Length
-
两个字节,表示该BGP数据包的总长度,取值范围是19 - 4096个字节(19就是只包含头部的数据包)。
-
-
Type
-
占一个字节,用于标志该BGP数据包的种类。
-
该值为1,表示该数据包为open包。
-
该值为2,表示该数据包为update包。
-
该值为3,表示该数据包为notification包。
-
该值为4,表示该数据包为keepalive包。
-
该值为5,表示该数据包为router-refresh包。
-
-
open报文

用于建立BGP对等体间的连接,正常情况下收发一次。
-
Version
-
一个字节,表示使用的BGP协议的版本号。
-
-
My AS
-
两个字节,表示发送者当前所处的AS区域编号。
-
-
Hold Time
-
两个字节,发送者自己设定的hold time值(单位为秒),用于协商BGP对等体间保持建立连接关系,发送keepalive或update等报文的时间间隔。BGP的状态机必须在收到对等体的open报文后,对发出的open报文和收到的open报文两者的hold time时间作比较,选择较小的时间作为协商结果使用。Hold Time的值可为0,为0时表示不发keepalive报文,可用时间最小为3秒,华为设备默认为180秒。
-
-
BGP Identifier
-
四个字节,代表发送该数据包的路由器的route id。
-
-
Opt Parm Len
-
一个字节,表示Optional Parameters(可选参数)的长度。如果此值为0,表示没有可选参数。
-
-
Optional Parameters
-
BGP可选参数列表。
-
Update报文

携带路由更新信息。
-
Withdrawn Routes Length
-
两个字节,标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由。
-
-
Withdrawn Routes
-
可变长度,包含要撤销的路由列表,列表中的每个单元包含1字节的Length域和可变长度的Prefix域。
-
-
Total Path Attribute Length
-
两个字节,标明Path Attributes部分和Network Layer Reachability Information两部分的长度。其值为零时,表示没有路由及其路由属性要通告。
-
-
Path Attributes
-
可变长度,包含要更新的路由属性列表,按其类型号从小到大的顺序排序,填写更新的路由的所有属性。每一个属性单元包括属性类型,属性长度,属性值三部分。
-
-
Network Layer Reachability Information(NLRI)
-
可变长度,包含要更新的地址前缀列表。
-
notfication报文

当BGP检测到错误,将会发送这个消息,之后会断开连接。
-
Error code
-
一个字节,定义错误的类型,非特定的错误类型用零表示。
-
-
Error subcode
-
一个字节,指定错误细节编号,非特定的错误细节编号用零表示。
-
-
Data
-
指定错误数据内容。
-
Keepalive报文
keepalive报文用于保持BGP连接。该报文只有BGP报文头,没有具体内容,故其报文长度应固定为19个字节。
-
周期发送保活报文的时间是Hold Time的三分之一。在华为中为60秒。
-
若连续发送三个保活报文而没有得到回复,则认为对方宕机。断开邻居关系。
router-refresh报文
![]()
在改变路由策略后,要求对等体重新发送指定地址族的完整路由表信息。但是只有支持路由刷新功能的路由器才会发出和响应这个报文。
因为,在BGP协议中,一个路由器配置了路由策略,它会将这个路由策略告诉给自己的邻居,此时邻居就可以根据策略发送路由。但取消策略时,将不告知取消的消息,此时邻居还是依据已有策略发送路由,导致路由器学习不全。所以需要在取消策略时使用这个报文获取完整路由。
-
AFI
-
两个字节,表示地址族id。
-
-
Res.
-
一个字节,所有为应全为零,在接收报文时,此位被忽略。
-
-
SAFI
-
一个字节,与UPDATE报文中的定义相同。
-
补充
-
地址族(BGP版本不同,使用的地址族也就不同)
-
在BGP中,使用IPv4。
-
在BGP4+中,使用IPv6。
-
BGP状态机

Idle
-
空闲状态,此状态将会停留30秒。
-
初始化开始准备TCP连接并监视远程对等体,准备同时建立邻居关系。
connect
-
TCP建立连接中的状态,此状态表示在建立TCP连接时,本端为被动方。
-
等待对方的连接建立请求,但若收不到连接建立请求,本端将进入Active状态,尝试主动建立连接。
Active
-
TCP建立连接中的状态,此状态表示在建立TCP连接时,本端为主动方。
-
将会向对方发起TCP连接请求,既使连接建立失败,也将反复进行连接尝试。
open-sent
-
开始发送状态,进入此状态表示已经完成了TCP的三次握手。
-
发出open报文,协商相应参数建立对等体关系。收到对方open报文后进入open-confirm状态。
open-confirm
-
开始确认状态。
-
发出Keepalive报文,等待对方的Keepalive报文。
established
-
已连接状态。
-
收到对方的Keepalive报文,邻居建立完成。此状态后进行周期保活。
BGP邻居建立条件
IBGP邻居建立条件
-
双方接口up,TCP可达。建议使用环回口建立邻居关系,更加稳定。
-
使用环回口建立邻居关系时,需要修改更新源为环回。因为在BGP中,指定哪个接口建立邻居,对方就只会识别指定接口IP地址的BGP报文。而在实际发送数据时,使用的默认都是物理口,所以地址也是物理接口的IP地址,导致建立不了邻居关系。
-
使用环回口建立邻居关系时,因为没有动态路由协议和静态路由的情况下,双方都没有对方环回口的路由,导致网络不可达。所以需要配置路由(静态、动态都行)。
-
IBGP邻居可以不用直连。
EBGP邻居建立条件
特殊的是,EBGP建立连接时,其发送的数据包TTL值默认为1。而IBGP则是255。
-
双方接口up,TCP可达。建议使用物理口建立邻居关系,因为该情况下双方直连,故TTL为1造成不了影响。这种方式简单快捷。
-
当然,也可以使用环回口建邻。过程比较麻烦,不建议。环回口建邻有以下条件:
-
因为TTL默认为1,所以使用环回口建邻路由不可达。此时需要修改TTL值,使得路由可达。否则无法完成TCP三次握手以及后续操作。
-
路由可达,还包括双方有到达对方环回的路由。
-
与IBGP建立邻居关系相同,也需要修改更新源。
-
BGP邻居表


2569

被折叠的 条评论
为什么被折叠?



