BGP
BGP简介
-
为方便管理规模不断扩大的网络,网络被分成了不同的AS(Autonomous System,自治系统)。早期,EGP(Exterior Gateway Protocol,外部网关协议)被用于实现在AS之间动态交换路由信息。但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。
-
BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。
-
BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的矢量性协议。早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)。
AS
-
AS指的是在同一个组织管理下,使用统一选路策略的设备集合。
-
不同AS通过AS号区分,AS号存在16bit、32bit两种表示方式。IANA负责AS号的分发。
IANA(Internet Assigned Numbers Authority,因特网地址分配组织):IAB(Internet Architecture Board,因特网体系委员会)的下设组织。IANA授权NIC( Network Information Center,网络信息中心)和其他组织负责IP地址和域名分配,同时,IANA负责维护TCP/IP协议族所采用的协议标识符数据库,包括自治系统号。
在长度为16bit的AS号表示方式中:64512-65534为私有AS号,在长度为32bit的AS号表示方式中:4200000000-4294967294为私有AS号。
-
一般电信、移动、联通这些用的AS都是共有AS,企业内部用AS,用的一般为私有AS
使用BGP传递路由
使用IGP传递路由的问题:
- AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IGP可能存在暴露AS内部的网络信息的风险。
- •整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大。
使用BGP传递路由:
-
BGP基于TCP,TCP端口号为179,只要能够建立TCP连接,即可建立BGP
TCP的优点:即可靠又快
-
只传递路由信息,不会保留AS内的拓扑信息
BGP是距离矢量协议,不怎么占资源,不会传递拓扑信息,
-
触发式更新,而不是进行周期性更新。节约资源
为什么当初设计OSPF的人不用TCP作为网络协议?
- TCP是面向连接的,如果已经有TCP了,就不需要OSPF邻居自动发现
- 能够建立TCP连接,就说明已经知道邻居IP地址了,那么就不需要OSPF自动发现邻居关系
BGP邻居建立
BGP的会话是基于TCP建立的,建立BGP对等体关系的两台路由器并不要求必须直连
对等体:类比与OSPF的邻居
两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表
对等体(邻居)关系类型:
- IBGP:内部BGP邻居,相同AS之间建立
- EBGP:外部BGP邻居,不同AS之间建立
BGP对等体关系建立:
-
BGP对等体都会发起TCP三次握手
-
三次握手建立完成后,会相互发送Open报文,携带参数用于对等体建立、参数协商
-
协商成功后,会相互发送Keepalive报文,收到对端发送的Keepalive报文之后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接
BGP对等体发起TCP三次握手,会建立两个TCP连接,但是实际BGP只会保留其中一个TCP连接,从Open报文中获取对端BGP Identifier之后BGP对等体会比较本端的Router ID和对端的Router ID大小,如果本端Router ID小于对端Router ID,则会关闭本地建立的TCP连接,使用由对端主动发起创建的TCP连接进行后续的BGP报文交互。
-
BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体
BGP报文类型
BGP存在5中类型的报文,不同类型的报文拥有相同的头部
报文类型
| 报文名称 | 作用 | 发送时刻 |
|---|---|---|
| Open | 协商BGP对等体参数,建立对等体关系 | BGP TCP连接建立成功之后 |
| Update | 发送BGP路由更新 | BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文 |
| Notification | 报告错误信息,中止对等体关系 | 当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体 |
| Keepalive | 标志对等体建立,维持BGP对等体关系 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接 |
| Route-refresh | 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由 |
BGP报文头部基本格式

- Marker:占16字节,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。
- Length:占2个字节(无符号位)BGP消息总长度(包括报文头在内)。以字节为单位。长度范围是19~4096
- Type:占一个字节(无符号位),BGP消息的类型。Type有5个可选值,表示BGP报文头后面所接的5类报文。从1到5分别表示Open、Update、Notification、Keepalive、Route-refresh报文
Open报文

- Version:BGP的协议号,对于BGP 4来说,其值为4
- My AS:发送者自己的AS号。通过比较两端AS号可以判断对端是否和本端处于相同AS
- Hold Time:保持时间,单位为秒。用于协商BGP对等体间保持建立连接关系,发送Keepalive或Update等报文的时间间隔。选择较小的时间作为协商结果。Hold Time的值可为零(不发Keepalive报文)或大于等于3,系统默认为180秒
- BGP Identifier:BGP标识符即发送者的route id,以IP地址的形式表示,用来识别BGP路由器
- Opt Parm Len:表示Optional Parameters(可选参数)的长度。如果此值为0,表示没有可选参数
- Optional Parameters:可选参数,主要用于宣告自身对于一些可选功能的支持。比如认证、多协议支持
Update报文

-
withdrawn Routes Length:标明Withdram Routes部分的长度。其值为零时,表示没有撤销的路由
-
Withdrawn Routes:包含要撤销的路由列表,列表中每个单元包含1字节的Length域和可变长度的Prefix域
- Length:待撤销路由的掩码。其值为零时,表示匹配所有的路由
- Prefix:传送的IP地址前缀必须用整字节表示。
-
Total Path Attribute Length:标明Path Attributes部分和Network Layer Reachability Information两部分的长度。其值为零时,表示没有路由及其路由属性要通告
-
Path Attributes:包含要更新的路由属性列表。每个路径属性包括属性类型、属性长度、属性值三部分,其编码由一个TLV(Type-Length-Value)三元组构成


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

- Error Code:占1个字节(无符号位),定义错误的类型,非特定的错误类型用零表示
- Error Subcode:占1个字节(无符号位),指定错误细节编号,非特定的错误细节编号用零表示
- Data:指定错误数据内容
Keepalive报文
Keepalive报文用于保持BGP连接,Keepalive报文只有BGP报文头,没有具体内容,故其报文长度应固定为19个字节
Refresh报文

- AFI:Address Family Identifier,地址族标识,如IPv4
- Res:保留,8个bit必须置0
- SAFI:Subsequent Address Family Identifier,子地址族标识
BGP状态机
Idle状态:
- 开始准备TCP的连接,指定完邻居之后,会等待32s,进入下一个阶段
Connect状态:
- 主动发起TCP连接的过程,认证都是在TCP建立期间完成的。
- TCP建立成功则进入Opensent状态
- TCP建立失败则TCP又主动变为被动模式(active状态),由对方发起TCP连接
- TCP建立成功则进入Opensent状态
- TCP建立不成功则等待一会,再重新主动发起TCP连接
Active状态:
- TCP连接没建立成功,反复尝试TCP连接
Opensent状态:
- TCP连接已经建立成功,开始发送Open包,Open包携带参数协商对等体的建立
OpenConfirm状态:
- 代表Open包协商成功。当收到邻居的Keepalive报文,进入最终状态Established状态
Established状态:
- 已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息
注意:任何一个状态发生错误(收到Notification报文),都会使状态回到Idle。32s后重新进行建立

BGP路由传递
BGP路由的生成
-
不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体
-
BGP注入路由的方式:
- Network
- Import-route
-
BGP支持根据已有的路由条目进行聚合,生成聚合路由
bgp 100 aggregate 10.1.0.0 22 detail-suppressed- 执行聚合后,本地BGP路由表会多出一条聚合的路由条目
- 指定聚合时,指定detail-suppressed参数,则通告路由时,不通告聚合前的明细路由
通告原则
BGP通告遵循以下原则:
-
只发布最优且有效路由
-
从EBGP对等体获取的路由,会发布给所有对等体
-
IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体
-
BGP同步规则:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题。
BGP同步功能已经淘汰了,华为设备都是关闭BGP同步的,不支持开启BGP的同步!Cisco设备默认关闭BGP同步。
undo synchronization:关闭BGP与IGP的同步功能
路由传递问题:只有在路由传递给EBGP邻居时,下一跳会改变。但路由传递给IBGP时,下一跳不变
解决方法: 在BGP配置添加如下配置
bgp 100
peer 10.1.0.1 next-hop-local # 10.1.0.1为 IBGP邻居
BGP基本配置
bgp 100
router-id 1.1.1.1
peer 2.2.2.2 as-number 100
peer 2.2.2.2 connect-interface loopback 0 # 建立对等体使用的源地址
peer 2.2.2.2 ebgp-max-hop 2 # EBGP对等体最大跳数,缺省情况下,EBGP连接允许的最大跳数为1,即只能在物理直连链路上建立EBGP连接
本文来自博客园,作者:未来的你!,转载请注明原文链接:https://www.cnblogs.com/frost-descent/articles/16808226.html

浙公网安备 33010602011771号