BGP BGP的概述BGP协议基于TCP协议,使用端口号179号端口,以此来保证协议的稳定性,路由表更新只发增量的路由更新 用于自制系统AS之间的动态路由协议,用于AS之间选择最佳路由和控制路由的传播 BGP的邻居关系EBGP邻居:运行在不同的AS之间的设备形成的 IBGP邻居:运行在同一AS的设备之间形成 建立EBGP邻居关系默认不能跨跳建立 建立BGP关系可跨跳建立 BGP路由的的传递BGP设备将最优路由加入BGP路由表,形成BGP路由。BGP设备与对等体建立邻居关系后,采取以下交互原则: 从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。 从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体。 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体。 BGP设备只发送更新的BGP路由。 所有对等体发送的路由,BGP设备都会接收。
BGP中报文交互的角色BGP报文交互中分为Speaker和Peer两种角色
Speaker:发送BGP报文的设备称为BGP发言者(Speaker),它接收或产生新的报文信息,并发布(Advertise)给其它BGP Speaker。
Peer:相互交换报文的Speaker之间互称对等体(Peer)。若干相关的对等体可以构成对等体组(Peer Group)。
BGP中报文种类BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送:
Open报文: 用于建立BGP对等体连接。
Update报文: 用于在对等体之间交换路由信息。
Notification报文: 用于中断BGP连接。
Keepalive报文: 用于保持BGP连接。
Route-refresh报文: 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
BGP中的状态机 BGP对等体的交互过程中存在6种状态机:
空闲(Idle)
连接(Connect)
活跃(Active) Open报文已发送(OpenSent)
Open报文已确认(OpenConfirm) 连接已建立(Established)
在BGP对等体建立的过程中,通常可见的3个状态是:Idle、Active和Established。 BGP邻居关系建立流程图 1.Idle状态 是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。 任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。
2. Connect状态 BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态
如果TCP连接失败,那么BGP转至Active状态。
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态
3.Active状态
BGP总是在试图建立TCP连接
如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态
如果TCP连接失败,那么BGP停留在Active状态。
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
4.OpenSent状态
BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态
如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态
5.OpenConfirm状态
BGP等待Keepalive或Notification报文。
如果收到Keepalive报文,则转至Established状态,
如果收到Notification报文,则转至Idle状态
6.Established状态
BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文
如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接
如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态
Route-refresh报文不会改变BGP状态
如果收到Notification报文,那么BGP转至Idle状态
如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态
BGP与IGP交互BGP与IGP在设备中使用不同的路由表,为了实现不同AS间相互通讯,BGP需要与IGP进行交互,即BGP路由表和IGP路由表相互引入 BGP引入IGP路由 BGP协议本身不发现路由,因此需要将其他路由引入到BGP路由表,实现AS间的路由互通。当一个AS需要将路由发布给其他AS时,AS边缘路由器会在BGP路由表中引入IGP的路由。为了更好的规划网络,BGP在引入IGP的路由时,可以使用路由策略进行路由过滤和路由属性设置,也可以设置MED值指导EBGP对等体判断流量进入AS时选路。
BGP引入路由时支持Import和Network两种方式 Import方式 是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。
Network方式 是逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确
IGP引入BGP路由 当一个AS需要引入其他AS的路由时,AS边缘路由器会在IGP路由表中引入BGP的路由。为了避免大量BGP路由对AS内设备造成影响,当IGP引入BGP路由时,可以使用路由策略,进行路由过滤和路由属性设置 BGP的路由优选规则和负载分担在BGP路由表中,到达同一目的地可能存在多条路由。此时BGP会选择其中一条路由作为最佳路由,并只把此路由发送给其对等体。BGP为了选出最佳路由,会根据BGP的路由优选规则依次比较这些路由的BGP属性。 BGP属性 路由属性是对路由的特定描述,所有的BGP路由属性都可以分为以下4类:
公认必须遵循(Well-known mandatory):所有BGP设备都可以识别此类属性,且必须存在于Update报文中。如果缺少这类属性,路由信息就会出错。
公认任意(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中,即就算缺少这类属性,路由信息也不会出错。
可选过渡(Optional transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体。
可选非过渡(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体。
Origin属性 Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:
IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
Incomplete优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。
AS_Path属性 AS_ Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
当BGP Speaker传播自身引入的路由时:
当BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表。
当BGP Speaker将这条路由通告给IBGP对等体时,便会在Update报文中创建一个空的AS_Path列表。 当BGP Speaker传播从其他BGP Speaker的Update报文中学习到的路由时:
当BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加在AS _ Path列表的最前面(最左面)。收到此路由的BGP设备根据AS_ Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
当BGP Speaker将这条路由通告给IBGP对等体时,不会改变这条路由相关的AS_Path属性。
Next_Hop属性 Next_ Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_ Hop属性遵循下面的规则:
BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。
Local_Pref属性
Local_ Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_ Pref属性值较高的路由。Local_ Pref属性仅在IBGP对等体之间有效,不通告给其他AS。Local_ Pref属性可以手动配置,如果路由没有配置Local_ Pref属性,BGP选路时将该路由的Local_Pref值按缺省值100来处理。
MED属性
MED(Multi-Exit Discriminator)属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。
MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。
团体属性
团体属性(Community)用于标识具有相同特征的BGP路由,使路由策略的应用更加灵活,同时降低了维护管理的难度。
Originator_ID属性和Cluster_List属性
Originator_ ID属性和Cluster_ List属性用于解决路由反射器场景中的环路问题
BGP选择路由的策略 当到达同一目的地存在多条路由时,BGP依次对比下列属性来选择路由: 1. 优选协议首选值(PrefVal)最高的路由。 协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效。
2. 优选本地优先级(Local_Pref)最高的路由。 如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。
3. 依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由。
4. 优选AS路径(AS_Path)最短的路由。
5.依次优选Origin类型为IGP、EGP、Incomplete的路由。
6. 对于来自同一AS的路由,优选MED值最低的路由。
7. 依次优选EBGP路由、IBGP路由、LocalCross路由、RemoteCross路由。 PE上某个VPN实例的VPNv4路由的ERT匹配其他VPN实例的IRT后复制到该VPN实例,称为LocalCross;从远端PE学习到的VPNv4路由的ERT匹配某个VPN实例的IRT后复制到该VPN实例,称为RemoteCross。
8. 优选到BGP下一跳IGP度量值(metric)最小的路由。 在IGP中,对到达同一目的地址的不同路由,IGP根据本身的路由算法计算路由的度量值。
9. 优选Cluster_List最短的路由。
10. 优选Router ID最小的设备发布的路由。 如果路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小(不再比较Router ID),并优选Originator_ID最小的路由。
11. 优选从具有最小IP Address的对等体学来的路由。
BGP负载分担 当到达同一目的地址存在多条等价路由时,可以通过BGP等价负载分担实现均衡流量的目的。形成BGP等价负载分担的条件是“BGP选择路由的策略”的1至8条规则中需要比较的属性完全相同。 |