BGP协议-1
BGP概述
路由协议通常分成内部网关协议IGP和外部网关协议EGP。
IGP重点:发现和计算路由。
EGP重点:控制路由的传播和选择最佳路由。
BGP特征
-
TCP(端口179),通过Keepalive报文检验TCP连接。
-
拥有自己的BGP邻居表,BGP表,路由表 。
路由表: 去往目的地最近的路径。通过metrics比较,从BGP表中选择的最优路由。
BGP表: BGP转发数据库,包含路由器从每一个邻居学到的所有路由。 -
采用触发更新和增量更新,只发送更新的路由。
-
为了保证BGP免受攻击,支持MD5和Keychain验证BGP邻居。
MD5: 为TCP连接设置验证密码。
Keychain: 为TCP连接设置验证密码,对BGP报文进行验证。 -
BGP采用路由聚合和路由衰减防止路由震荡,提高网络稳定性。
路由聚合: 将多条路由合并,只向对等体发送合并后路由。
路由衰减: 使用惩罚值来衡量稳定性。
路由震荡: 路由表中的某条路由反复消失和出现。 -
BGP易扩展,能够适应网络新技术的发展。
-
携带AS路径信息防止路由环路,使用属性Attribute描述路径。
BGP术语
-
对等体Peer: 两台路由器之间建立了TCP连接,并相互交换报文时,称它们为对等体或邻居。
对等体组: 若干采用相同更新策略的BGP对等体构成。 -
自治系统AS: 拥有同一路由策略,在同一技术管理部门下运行的一组路由器或主机。BGP网络中每个AS都被分配了一个唯一的AS号。
AS号由互联网数字分配机构IANA分配,分为2字节AS号和4字节AS号。
2字节AS号:1 ~ 65535(64512 ~ 65536私有使用)
4字节AS号:1 ~ 424967295
支持4字节AS号的设备与支持2字节的AS号的设备兼容。 -
内外部BGP: BGP在一个AS内运行称为内部BGP(IBGP);BGP在AS之间运行称为外部BGP(EBGP)。如图1所示,R1与R4之间运行EBGP,R2和R3之间运行IBGP。
-
网络层可达性信息NLRI: 包含在BGP更新报文中,用于发布可达路由和下一跳信息。由一个或多个前缀长度和前缀长度二元组构成。
网络前缀: 与地址网络部分相对应的IP地址部分,如A类地址前缀8位,B类地址前缀是16位。
网络前缀长度: 子网掩码,如网络前缀长度24,对应子网掩码255.255.255.0。 -
IBGP水平分割: 通过IBGP学习到的路由不能通告给其他IBGP邻居,防止AS内产生环路。为此,AS内所有IBGP对等体需建立全连接。但IBGP对等体建立全连接后,路由器需维护大量TCP和BGP连接,因此设计了路由反射器和BGP联盟。
全连接: AS内每两个IBGP邻居之间就要建立邻居关系。
路由反射器: 一个AS内,一台路由器作为RR反射器,其他路由器作为客户机与RR建立IBGP连接,客户机只需与RR交换路由信息。
BGP联盟: 一个AS划分为多个子AS,每个子AS内部建立IBGP全连接,子AS之间建立联盟EBGP连接关系。
1.BGP报文类型
BGP报文类型主要包括打开Open、存活Keepalive、更新Update、路由刷新Route-refresh、通知Notification。其中,Keepalive为周期性发送,其他报文为触发性发送。这些报文具有相同报文头部,长度为19字节。
- 标记Marker:16字节。标记BGP报文边界,用来检查BGP对等体同步信息是否完整,支持验证功能来验证报文。不使用验证时,所有比特为1。
- 长度Length:2字节。BGP报文总长度(包括包头在内),值为19 ~ 4096。
- 类型Type:1字节。BGP报文类型。数值1 ~ 5分别表示Open、Update、Notification、Keepalive、Route-refresh。前四种在RFC1771中定义,type=5的消息在RFC2918中定义。
1.1 Open报文
TCP连接建立后发送的第一个报文,用于建立对等体之间的连接关系。
- 版本 Version:1字节,BGP版本号,如BGP-4版本号为4。
- 我的自治系统 My AS:2字节,BGP邻居建立时发起者的AS号。通过比较两端AS号,可以确定是EBGP还是IBGP。
- 保持时间 Hold Time:2字节,默认时间为180s,在保存时间内,如果没有收到对方的Keepalive包或者Upadte包,则将断开BGP邻居关系。建立对等体时协商,选择Open报文中时间较小的一方。
- BGP标识符 BGP Identifier:4字节,发送者的BGP路由ID(在BGP网络中唯一)。
- 可选参数长度 Opt Parm Len:1字节。如果为0标识没有可选参数。
- 可选参数 Optional Parameters:可变长度,用于BGP验证或多协议扩展等功能。每个参数由1字节类型字段、1字节长度字段和一个包含参数值的可变长字段确定,及TLV(Type-Length-Value)。
1.2 Update报文
对等体之间交换路由信息,既可以发布可达路由信息又可以撤销不可达路由信息。
- 不可用路由长度 Unfeasible Routes Length:2字节,表明撤销路由长度。
- 撤销路由 Withdrawn Routes Length:可变长度,包含不可达路由的列表。
- 全部路径属性长度 Total Path Attribute Length:2字节,路径属性字段的长度。如果为0说明说明没有可达路由。
- 路径属性 Path Attributes:可变长度,网络层可达信息NLRI相关的属性列表,包括AS_PATH、本地优先级和起源。是BGP用于进行路由控制和决策的重要信息。
- 网络层可达信息 Network Layer Reachability Information:可变长度,是可达路由的前缀和前缀长度的二元组。
1.3 Notification报文
BGP检测到错误状态时发送,中断BGP连接。
- 错误编码Error Code:1字节,错误类型。
- 错误字码Error Subcode:1字节,错误类型更详细的信息。
- 数据Data:可变长度,用于诊断错误的原因。
1.4 Keepalive报文:
周期性向对等体发送(默认周期60s),用于保持连接的有效性。报文格式只包含BGP包头,保持时间默认180s。
1.5 Route-refresh报文
用于动态请求路由的发布者重新发布Upadte报文,进行路由更新。
2.BGP邻居状态机
BGP对等体的交互过程中存在6种状态机:空闲Idle、连接Connect、活跃Active、Open报文发送OpenSent、Open报文确认OpenConfirm、连接已建立Established。
任何状态下,收到Notification报文或者TCP拆链通知等Error事件后,都会转成Idle状态。
2.1. Idle
BGP初始状态,在该状态下,BGP拒绝邻居发送的连接请求。只有收到本设备的Start请求后,才尝试和其他对等体进行TCP连接,并转至Connect状态。
2.2 Connect
BGP启动重传定时器Connect Retry,等待TCP完成连接。
TCP连接失败:BGP向对等体发送Open报文,转OpenSent状态。
TCP连接成功:BGP转至Active状态。
重传定时器连接超时:继续尝试和对等体建立连接,停留在Connect状态。
2.3 Active
BGP试图建立TCP连接。
TCP连接成功:向对等体发送Open报文,关闭重传定时器,转至OpenSent状态。
TCP连接失败:停留在Active状态。
重传定时器超时:转至Connect状态。
2.4 OpenSent
收到Open报文并检查AS号和版本号等信息。
信息正确:BGP向对等体发送Keepalive报文,转至OpenConfirm状态。
信息错误:BGP向对等体发送Notification报文,转至Idle状态。
2.5 OpenConfirm
BGP等待Keepalive或Notification报文。
收到Keepalive报文进入Established状态。
收到Notification报文进入Idle状态。
2.6 Established
BGP可以和对等体交换Update、Notification、Keepalive报文,并可以开始路由选择。
收到Notification报文进入Idle状态。
收到TCP拆链通知,BGP断开连接进入Idle状态。
收到Route-Refresh报文不改变BGP状态。
收到正确Keepalive或Update报文,保持BGP连接,重置时间计时器。
收到错误Keepalive或Upadte报文,向对端发送Notification,进入Idle状态。
3.BGP路径属性
3.1 公认必遵 Well-Known Mandatory
所有BGP设备都可以识别此类属性,且必须存在Upadte报文中,缺少此类属性,路由信息就会出错。
- Origin: 属性类型代码=1,说明了路由来源。
优先级:Incomplete < EGP < IGP - AS_Path: 属性类型代码=2,记录了BGP路由从本地到目的地址经过的所有AS号。
可以有效避免路由环路,BGP会优选路径较短的路由。 - Next_Hop: 属性类型代码=3,BGP路由的下一跳。
EBGP会话中下一跳就是通告该路由的邻居路由器的源地址。
IBGP会话中起源于AS内部的路由器的下一跳就是通告该路由器的邻居路由器的源地址。
IBGP会话中通告EBGP学到的路由传递给本AS的IBGP邻居时,下一跳保持不变。
3.2 公认任意 Well-Known Discretionary
所有BGP设备都可以识别此类属性,但是不要求必须存在Update报文中,缺少此类属性,路由信息不会出错。
- 本地优先级Local_Pref: 属性代码=5,仅在IBGP对等体之间交换,不通告给其他AS,表明BGP设备优先级。当BGP路由器通过不同IBGP对等体学习到目的地相同但路径不同的多条路由时,优先选择Local_Pref高的路由。
3.3 可选过渡 Optional Transitive
BGP设备可以不识别此类属性,但是会接收并通告给其他对等体。团体属性,分为标准团体属性和扩展团体属性。
- 标准团体属性: 属性代码=8,标识具有相同特征的BGP路由。
- 扩展团体属性: 属性代码=16,
3.4 可选非过渡 Optional Nontransitive
BGP设备可以不识别此类属性,会自动忽略该属性不通告给其他对等体。
- MED: 属性代码=4,判断流量进入AS时的最佳路由。
运行BGP的设备通过不同EBGP学习到目的地址相同但下一跳不同的路由时,优先选择MED小的。 - Originator_ID: 属性代码=9,防止引入路由反射器之后出现的环路,当反射器收到路由信息中的Originator_ID就是自己的路由ID时,发现环路丢弃路由。
注意:BGP防环措施有两个,EBGP通过AS_Path;IBGP水平分割即Originator_ID。 - Cluster_List: 属性代码=10,路由反射器及客户机组成的一个集群(Cluster)。防止集群间产生路由环路,路由反射器使用Cluster_List属性记录路由经过的所有集群的Cluster ID。
4.BGP路由引入和发布策略
BGP本身不发现路由,为实现AS间互通则将其他路由引入BGP路由表中。
- BGP协议路由引入方式
- Import: 按协议类型引入OSPF、IS-IS、RIP、直连路由和静态路由到BGP路由表。
- Network: 将指定前缀和掩码的一条路由引入BGP路由表,该方式比前者引入更精准。
当一个AS需要引入其他AS路由时,AS边缘路由器会在IGP路由表中引入BGP路由,使用路由策略,进行路由过滤和路由属性设置。
- BGP路由发布策略:
- 从IBGP对等体学习到的BGP路由只发布给EBGP对等体,即水平分割。
- 从EBGP对等体学习到的BGP路由发布给所有EBGP和IBGP对等体。
- 当存在多条到达相同目的地的有效路由时,只发布最优路由给对等体。
- 路由更新时只发送更新的BGP路由。
- BGP路由器会接收所有对等体发送的路由。
5.BGP路由选择
在BGP路由表中,可能包含多条通往相同目的地的有效信息,BGP会选择其中一条路由作为最优路由,并将路由发布给其对等体。以下按优先顺序给出了路由器在BGP路由选择中的判定过程。
- 优选协议首选值PrefVal最高的路由。
- 优选本地优先级Local_Pref最高的路由。
- 依次优选手动聚合路由>自动聚合路由>Network引入路由>import-route引入路由>对等体学习路由。
- 优选AS路径最短的路由。
- 优选Origin类型IGP>EGP>Incomplete。
- 对于来自同一AS路由,优选MED最低路由。
- 依次选从EBGP和IBGP学习来的路由。
- 优选到BGP下一跳IGP度量值最小的路由。
- 优选Cluster_List最短的路由。
- 优选Router_ID最小的路由。若携带Originator_ID则优选Originator_ID最小的。
- 优选从最小IP Address的对等体学习到的路由。
6.BGP路由衰减
路由衰减用来解决路由不稳定问题。路由不稳定主要表现为路由震荡,及路由表中某条路由反复出现和形式。路由衰减只适用于EBGP路由。
术语:
- 惩罚值 Penalty Value:衡量路由稳定性,越高越不稳定。
- 半衰期 Half-life:每过一个半衰期,抑制值减半,默认15min。
- 再使用阈值 Reuse Value:当一条被抑制的路由惩罚值低于该值,路由恢复使用,默认750.
- 抑制阈值 Suppress Value:超过该值,路由被抑制不加入路由表,不向对等体发布更新报文,默认2000。惩罚值达到惩罚值上线后不会增加,在VRP系统中默认16000。
- 抑制时间 Suppress Time:从路由被抑制到路由恢复可用的时间。被抑制路由超过最大抑制时间后,不管惩罚值为多少都会恢复使用。
BGP路由衰减特点:
- 路由发生震荡(路由器收到该路由的撤销报文或更新报文),惩罚值+1000。
- 惩罚值超过抑制阈值,此路由被抑制,不发布更新报文也不加入IP路由表。
- 路由若被打上d标签,说明路由最后收到的Upadte报文;h标签说明路由最后收到撤销报文。
- 被抑制路由每过一段时间惩罚值减一半。
- d标签路由:惩罚值<再使用阈值,去掉标签,恢复可用优选后加入IP路由表,向BGP对等体发布。
- h标签路由:惩罚值=0,路由从BGP路由表删除。
7.BGP路由聚合
路由聚合是将多条路由合并的机制,只向对等体发送聚合后的路由,减小了路由表规模;同时聚合后的路由如果发生了路由震荡,也不会对网络产生影响。
BGP在IPv网络中支持自动聚合和手动聚合两种方式。
- 自动聚合: BGP按照自然网段聚合路由,并且只向对等体发送聚合后的路由。
- 手动聚合: 对BGP本地路由表中存在的路由进行聚合。手动聚合可以控制聚合路由的属性,以及决定是否发布具体路由。
自动聚合路由优先级<手动聚合路由优先级
8.BGP路由反射器
- 路由反射器产生背景:
为保证IGBP对等体的连通性,需要在对等体之间建立全连接,但当设备数目很多时,全连接会造成网络资源和CPU资源消耗巨大,因此引入路由反射器RR概念。 - 相关术语:
- 路由反射器RR: 在客户机之间传递信息的路由器。
- 客户机Client: 与路由反射器形成反射邻居关系的IBGP设备。
- 非客户机Non-Client: AS内既不是路由反射器又不是客户机的路由器。
非客户机与路由反射器之间,以及所有的非客户机之间建立全连接。 - 集群Cluster: 路由反射器和其客户机组成。
- RR路由发布规则:
- 从非客户机学习到的路由发布给所有客户机。
- 从客户机学习到的路由发布给所有非客户机和客户机(除本机)。
- 从EBGP对等体学习到的路由发布给所有客户机和非客户机。
- BGP路由反射器的出现从本质上打破了BGP水平分割原则(从IBGP对等体学习到的路由不发布它的给IBGP对等体),采用独有的Cluster_List属性和Originator_ID属性防止环路。
为了增强网络可靠性和防止单点故障,可以在一个集群内配置多个路由反射器。
路由反射器工作原理:客户机1收到从EBGP对等体发来的一条更新路由后,通过IBGP通告给给RR1和RR2。RR1和RR2接收到路由后,将Cluster_ID加入到Cluster_List前面,并向客户机2和3反射,同时相互反射。RR1和RR2接收路由后检查集群列表发现自己的Cluster_ID于是丢弃该路由,避免环路。
9.BGP联盟
- BGP联盟产生背景:
解决AS内部IBGP网络连接激增问题。 - 联盟原理:
将一个AS划分为多个子AS。每个子AS内部建立IBGP全连接,子AS之间建立EBGP连接关系。联盟外部AS依旧认为联盟是一个AS。每个路由器的联盟ID是其原AS号。 - 建立联盟好处:
- 保留原有IBGP属性。
- 联盟相关属性在传出联盟时会自动删除,管理员无需在出口处配置过滤子AS号等信息的操作。
AS200使用联盟后背划分成3个子AS——AS65001、AS65002、AS65003,使用AS200作为联盟ID。IBGP连接数量从10条减少到4条。
路由反射器与联盟的区别:
影响方面 | 路由反射器 | 联盟 |
---|---|---|
网络拓扑设计 | 不需要改变现有网络拓扑,兼容性好 | 需要改变现有网络拓扑 |
网络设备配置 | 只需对反射器设备进行配置,方便 | 对所有设备进行配置 |
AS内部全连接 | 路由反射器集群与集群之间全连接 | 子AS之间是EBGP,不需要全连接 |
技术适用网络规模 | 中大型网络规模 | 大型网络规模 |