概述
第5章 BGP
边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)。本章只讨论BGP-4。
5.1BGP概述
5.1.1BGP特点
- BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新。
- BGP能够承载大批量的路由信息,能够支撑大规模网络。
- BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。
- BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。
- BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性。
5.1.2BGP术语
- 自治系统(AS):AS是指在一个实体管辖下的拥有相同选路策略的IP网络。BGP网络中的每个AS都被分配一个唯一的AS号,用于区分不同的AS。AS号分为2字节AS号和4字节AS号,其中2字节AS号的范围为1至65535,其中64512-65534为私有AS号。4字节AS号的范围为1至4294967295,其中4200000000-4294967294为私有AS号。
- 对等体(Peer):两个建立BGP会话的路由器的关系
- IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。
- EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。
5.1.3 BGP报文类型
- BGP的包头
BGP存在5种类型的报文,不同类型的报文拥有相同的头部(header),BGP的包头格式如表5-1所示:
表5-1:BGP的包头格式
Marker(16字节) | ||
Length (2字节) | Type(1字节) |
- 标记(Marker):用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。
- 长度(Length):BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096。
- 类型(Type):BGP消息的类型。Type有5个可选值,分别为Open报文、Update报文、Notification报文、Keepalive报文、Route-refresh报文。
- Open报文:用于建立BGP对等体连接。它的报文格式如表5-2所示:
表5-2:Open包文格式
Version(8bit) | ||
My AS(16bit) | ||
Hold time(16bit) | ||
BGP identifier(32bit) | ||
opt parm len(8bit) | ||
Optional parameters(可变长) | ||
- 版本(Version):表示协议的版本号,现在BGP的版本号为4。
- 我的自治系统号(My AS):发送者自己的AS号
- 保持时间(hold time):发送者自己设定的hold time值(单位:秒),用于协商BGP对等体间保持建立连接关系,发送KEEPALIVE或UPDATE等报文的时间间隔。BGP的状态机必须在收到对等体的OPEN报文后,对发出的OPEN报文和收到的OPEN报文两者的hold time时间作比较,选择较小的时间作为协商结果。Hold Time的值可为零(不发KEEPALIVE报文)或大于等于3,我们系统的默认为180。
- BGP标识符(BGP identifier):发送者的router id。
- 可选参数长度(opt parm len):可选参数的长度。如果此值为0,表示没有可选参数。
- 可选参数(Optional parameters):每一个可选参数是一个TLV格式的单元
- Update报文:用于在对等体之间交换路由信息,它的报文格式如表5-3所示:
表5-3:Update报文格式
Unfeasible routes length(2Byte) |
Withdrawn routes(NByte) |
Total path attribute length(2Byte) |
Path attributes(NByte) |
NLRI(NByte) |
- Unfeasible routes length:不可达路由字段的长度,以Byte为单位。如果为0则说明没有Withdrawn Routes 字段。
- Withdrawn routes(NByte):包含不可达路由的列表
- Total path attribute length(2Byte):路径属性字段的长度,以Byte为单位。如果为0则说明没有Path Attributes 字段。
- Path attributes(NByte):
- NLRI(NByte):网络层可达信息,
- Keepalive报文:用于保持BGP连接。
- 只有包头,没有其它内容
- 每隔60S发一次
- Notification报文
当BGP检测到错误状态时,就向对等体发出 Notitication 消息,之后 BGP 连接会立即中断。BGP Notification 消息格式如表 5-4 所示:
表5-4:Notification 消息格式
错误代码 | 错误子码 | |
数据 |
- 错误编码:1字节,错误类型。
- 错误子码:1字节,错误类型更详细的信息。
- 数据:可变长度,用于诊断错误的原因,它的内容依赖于具体的错误编码和错误子码。
- Route-refresh报文
用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。它的报文格式如表5-5所示:
表5-5:Route-refresh报文格式
AFI(16bit) | Res(8bit) | SAFI(8bit) |
- AFI((地址族标识):可以是IPV4或者IPV6等。
- Res(保留):全部为0
- SAFI(子地址族标识):可以是单播或者组播路由等
5.1.4BGP的邻居状态
BGP建立邻居有限状态机
- Idle(空闲)状态
这是初始状态,BGP 进程检查是否有前往指定邻居的路由。如果没有路由,则保持空闲
状态;如果有路由,则进入连接状态。
- Connect (连接)状态
该状态下,BGP 等待完成 TCP 连接,若连接成功,则向对等体发送 Open 消息,然后进入OpenSent状态:如果连接失败,则继续侦听是否有对等体启动连接并进入 Active状态
- Active(激活)状态
该状态下,BGP 试图建立 TCP 连接,如果连接成功,则向对等体发送 Open 消息,并转
至 OpenSent 状态。
- OpenSent (打开发送)状态
该状态下,BGP 等待对等体的 Open 消息。收到 Open 消息后对其进行检查,如果发现错
误,本地发送 Notification 消息给对等体并进入空闲状态;如果消息没有错误,BGP 发送
Keepalive 消息并进入 OpenConfirm 状态。
- OpenConfirm(打开确认)状态
该状态下,BGP 等待 Keepalive 消息或 Notification 消息。如果收到 Keepalive 消息,则
进入 Established 状态;如果收到 Notification 消息,则进入空闲状态。
- Established(己建立)
该状态下,BGP 可以和其他对等体交换 Update、Notification 和 Keepalive 消息,开始路
由选择。如果收到了正确的 Update 和 Keepalive 消息,就认为对端处于正常运行状态,本地重置保持时间计时器;如果收到 Notification 消息,则进入到空闲状态;如果 TCP 连接中断,则关闭 BGP 连接并回到空闲状态。
5.1.5BGP路径属性
1、路径属性分类
- 公认属性:所有BGP路由器都必须能够识别的属性
- 公认必遵(Well-known Mandatory):必须包括在每个Update消息里。
- 公认任意(Well-known Discretionary):可能包括在某些Update消息里。
- 可选属性:不需要都被BGP路由器所识别
- 可选过渡(Optional Transitive):BGP设备不识别此类属性依然会接受该类属性并通告给其他对等体。
- 可选非过渡(Optional Non-transitive):BGP设备不识别此类属性会忽略该属性,且不会通告给其他对等体。
- 常用的BGP属性分类如表5-6所示
表5-6:BGP属性分类
属性分类 | 属性 |
公认必遵 | Origin、As_path、Next_hop |
公认任意 | Local_preference、Atomic_aggregate |
可选过渡 | Aggregator、Community |
可选非过渡 | MED、Cluster-List、Originator-ID |
2、AS_PATH
用于记录路由所经过的路径上沿途经过的AS
3、Origin
BGP将按Origin的如下顺序优选路由:IGP > EGP > Incomplete,Origin属性类型如表5-7所示:
表5-7:Origin属性类型
起源名称 | 标记 | 描述 |
IGP | I | 如果路由是由始发的BGP路由器使用network命令注入到BGP的,那么该BGP路由的Origin属性为IGP |
EGP | E | 如果路由是通过EGP学习到的,那么该BGP路由的Origin属性为EGP |
Incomplete | ? | 如果路由是通过其他方式学习到的,则Origin属性为Incomplete(不完整的)。例如通过import-route命令引入到BGP的路由 |
4、Next_Hop
- BGP路由器在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
- BGP路由器将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
- 路由器在收到EBGP对等体所通告的BGP路由后,在将路由传递给自己的IBGP对等体时,会保持路由的Next_Hop属性值不变。
- 如果路由器收到某条BGP路由,该路由的Next_Hop属性值与EBGP对等体(更新对象)同属一个网段,那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体。
5、Local_Preference
- Local_Preference即本地优先级属性,是公认任意属性,可以用于告诉AS中的路由器,哪条路径是离开本AS的首选路径。
- Local_Preference属性值越大则BGP路由越优。缺省的Local_Preference值为100。
- 该属性只能被传递给IBGP对等体,而不能传递给EBGP对等体。
5、community,公认团体属性如表5-8所示:
表5-8:公认团体属性
团体属性名称 | 团体属性号 | 说明 |
Internet | 0 | 设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由。 |
No_Advertise |
| 设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由。 |
No_Export | 4294967041 | 设备收到具有此属性的路由后,将不向AS外发送该路由。 |
No_Export_Subconfed | 4294967043 | 设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由。 |
6、MED
- MED(Multi-Exit Discriminator,多出口鉴别器)是可选非过渡属性,是一种度量值,用于向外部对等体指出进入本AS的首选路径,即当进入本AS的入口有多个时,AS可以使用MED动态地影响其他AS选择进入的路径。
- MED属性值越小则BGP路由越优。
- MED主要用于在AS之间影响BGP的选路。MED被传递给EBGP对等体后,对等体在其AS内传递路由时,携带该MED值,但将路由再次传递给其EBGP对等体时,缺省不会携带MED属性。
7、Preferred-Value
- Preferred-Value(协议首选值)是华为设备的特有属性,该属性仅在本地有效。当BGP路由表中存在到相同目的地的路由时,将优先选择Preferred-Value值高的路由。
- 取值范围:0~65535;该值越大,则路由越优先。
- Preferred-Value只能在路由器本地配置,而且只影响本设备的路由优选。该属性不会传递给任何BGP对等体。
5.1.6BGP的选路原则
当到达同一个目的网段存在多条路由时,BGP通过如下的次序进行路由优选:
丢弃下一跳不可达的路由。
- 优选Preferred-Value属性值最大的路由。
- 优选Local_Preference属性值最大的路由。
- 本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的。
- 优选AS_Path属性值最短的路由。
- 优选Origin属性最优的路由。Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete。
- 优选MED属性值最小的路由。
- 优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)。
- 优选到Next_Hop的IGP度量值最小的路由。
- 优选Cluster_List最短的路由。
- 优选Router ID(Orginator_ID)最小的设备通告的路由。
- 优选具有最小IP地址的对等体通告的路由。
最后
以上就是激情小懒虫为你收集整理的5.BGP第5章 BGP的全部内容,希望文章能够帮你解决5.BGP第5章 BGP所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复