BGP(边界网关协议)
BGP是一种实现自治系统–AS之间的路由可达,并选择最佳路由的距离矢量路由协议。
BGP的自治系统通过AS号区分。
目前BGP有四个版本,v1,v2,v4,v4+(Multicast BGP)
起源
为方便管理大规模网络,网络被分成不同的自治系统。早年,外部网关协议EGP被用于实现AS之间动态交换路由信息,但是EGP只发布网络可达的路由信息,而不会对路由进行任何优选,也没有考虑AS之间避免路由环路等问题,逐渐被BGP取代。
BGP用于在AS之间传递路由信息,同时能够进行路由优选,避免路由环路,更高效率的传递路由和维护大量路由信息。
优点
- 可以容纳大量路由
- 策略能力强,可以很好的实现路由决策与数据控制
- BGP采用认证和GTSM的方式,保证网络的安全性
- BGP提供路由聚合和路由衰减功能防止路由震荡,提高稳定性
- 邻居数目多,路由量大且邻居具有相同路由出口的策略场景下可以使用按组打包技术极大的提高了BGP打包发包性能
特点
- **BGP使用TCP为传输层协议,TCP端口号为179。**先启动BGP的一端先发起TCP连接,使用随机端口向对方的179端口发起TCP连接。
- BGP路由器之间建立TCP连接,这些路由器之间称为BGP对等体,也叫BGP邻居
- 对等体之间交换整个BGP路由表,BGP路由器只发送增量更新。
- BGP采用滑动窗口机制,停止并等待确认前,可以发送65576个字节。
分类
BGP可以分为EBGP和IBGP两种,即外部BGP和内部BGP。
- EBGP:运行在不同的AS之间。EBGP建立邻居的三个条件:
- AS号不同
- EBGP邻居的IP地址可达。EBGP建立邻居关系一般使用物理接口地址。
- 建立TCP会话
- IBGP:运行在同一个AS之间。IBGP建立邻居的条件:
- AS号相同
- 建立TCP会话
- IBGP邻居地址可达。IBGP建立邻居关系一般使用loopback接口地址,因为只要保证路由可达,邻居关系就会一直处于稳定状态。
AS号的分类
- 1-64511 :由IANA机构同一分配。
- 64512-65535:私有AS号。
- 中国电信163AS号:4134
- 中国电信CN2AS号:4809
- 中国联通AS号:9929
BGP对等体交换原则
BGP设备将最优路由加入BGP路由表,形成BGP路由。建立邻居关系后,采取的交互原则如下:
-
从IBGP对等体学习到的路由,只发送给EBGP对等体。
(水平分割:BGP设备不会将从IBGP邻居学到的路由再通告给自己其他的IBGP邻居–IBPG 的防环机制)
由于水平分割原则,BGP要求AS内必须保证IBGP全互联,即两两之间都有邻居关系。
-
从EBGP对等体学到的路由会发送给所有对等体。
-
EBGP防环是通过AS_PATH实现的。EBGP对等体不会接受带有自己AS_PATH的路由。AS_PATH仅在路由离开AS时才会更改,IBGP传递不会携带AS_PATH。
BGP的三张表
BGP邻居表:邻居列表:show ip bgp summary
BGP表:包含了从邻居学习的所有路由,以及到达目的网段的多个路径信息和属性
路由表:到达目的网段的最佳路径
管理距离:EBGP的管理距离值为20,IBGP的为200.
BGP是一个独立的表,路由器将BGP表中的最佳路由提供给路由表。
BGP报文
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ajtzKt4h-1600934311816)(C:\Users\wwxxE\Documents\md\md_ccnp\BGP.assets\image-20200915104544585.png)]
过程
- Idle 状态是BGP的初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求,到收到指令后,BGP才开始和其他BGP对等体进行TCP连接,并转至Connect状态。
- 在Connect状态下,BGP启动连接重传定时器,等待TCP完成连接。
- 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
- 如果TCP连接失败,那么BGP转至Active状态。
- 如果连接重传定时器超时,BGP仍没有收到对等体的响应,那么BGP继续尝试和其他BGP对等体进行TCP连接,停留在Connect状态。
- 在Active状态下,BGP总是在试图建立TCP连接。
- 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
- 如果TCP连接失败,那么BGP停留在Active状态。
- 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
- 在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号,版文号,认证码等进行检查。
- 如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态
- 如果收到的Open报文不正确,那么BGP发送Notification报文给对等体,并转至Idle状态
- 在OpenConfirm状态,BGP等待Keepalive报文或Notification报文,并相应转至Established状态或Idle状态。
- 在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基础配置
指定邻居
指定更新源
用自己的哪个接口跟邻居建立邻居关系.
EBPG多跳
非直连的EBGP需要指定多跳。条件有:路由可达,环回口通,或者静态路由可达。
通告网络
networkk [ip地址] mask [子网掩码]
如果不加mask则通告主类网络
修改next-hop
BGP是AS-by-AS的路由协议,不是router-by-router的路由协议。BGP下一跳并不意味着下一跳路由器,而是到达下一个AS的IP地址。
IBGP中,从EBGP传过来的next-hop属性在IBGP中保持不变的被传递。
同步
思科默认禁用同步。
同步的意思是将BGP路由同步到IGP路由当中。
禁用同步:
no synchronization
对等体组
- 将更新策略相同的邻居划分划分到一个对等体中,以简化配置
- 对等体组成员继承对等体组的所有配置选项
- 更新对于每一个对等体组值生成一次,每个成员复制该更新
neighbor [对等体组名称] peer-group
neighbor [ip地址] peer-group [对等体组名称]
身份验证
BGP支持MD5邻居身份验证。
认证是在TCP建立连接时完成的
启用身份验证后,TCP连接传输的所有数据都进行验证。
neighbor [ip地址/对等体组名] password [密码]
暂时关闭
暂时关闭某个邻居,不删除配置
neighbor [ip/peer-group-name] shutdown
重新启用:
no neighbor [ip/peer-group-name] shutdown
汇总
默认情况下,BGP汇总配置后同时通告汇总路由和明细路由。
加上 summary-only参数可以抑制明细路由。
反射器
为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全互联关系。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和CPU资源消耗巨大。以上问题可以在IBGP中使用路由反射器解决。
角色
- 路由反射器RR–Router Reflector:允许把从IBGP对等体学到的路由反射到其他IBGP对等体设备。
- 客户机–Client:与RR形成反射邻居的IBGP设备。在AS内部只需要与RR直连
- 非客户机–Non-Client:既不是RR也不是client的设备。在AS内部非客户机与RR,以及所有的非客户机之间必须建立全互联邻居关系。
- 集群–Cluster:反射器与其客户机的集合。Cluster_List属性用于防止集群间产生路由环路
- Originator:在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。
反射原理
RR的反射规则如下:
- 从非客户机学到的路由,反射给所有客户机
- 从客户机学到的路由,反射给所有非客户机和客户机(发送此路由的客户机除外)
- 从EBGP对等体学到的路由,反射给所有非客户与客户机
Cluster_list 属性
集群内使用AS内唯一的Cluster ID作为标识。为了防止集群内产生路由环路,RR使用Cluster ID属性,记录路由经过的所有集群的Cluster ID。
- 当一条路由第一次被RR反射时,RR会把本地Cluster ID添加到Cluster_list属性的中。如果没有Cluster_list属性,RR会创建一个。
- 当RR接收到一条路由更新时,RR会检查Cluster_list,如果Cluster list中已经有本地Cluster ID,丢弃该路由,如果没有本地Cluster ID,将其加入Cluster list 然后反射该更新路由。
Originator_ID 属性
是IBGP内部起源路由器的router-ID,在AS内部被用作防环机制,由第一个RR创建,并不被后续的RR更改,并且当IBGP宣告者接收到的更新与自己携带有相同originator-id时,丢弃路由信息
备份路由反射器
这时,该集群中的所有RR必须使用相同的Cluster ID,以避免RR之间的路由环路。
多集群路由反射器
分级路由反射器
同级路由反射器
联盟
重置BGP会话
BGP属性
1. WEIGHT
-
在路由器本地配置,只提供给本地路由策略,不会传播给BGP邻居
-
范围:0-65535,越大越优先
-
路由器本地通告的路径默认权重为32768,从其他BGP邻居学到的为0
2. AS-PATH
当BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表。通告给IBGP对等体时会创建一个空的AS-PATH列表。
- 记录通过了哪些AS的一个列表
- 在EBGP传递时会加上自己的AS号,在IBGP间传递不会更改AS-PATH。
- 路由器不会接受带有自身AS号的路由,用来防环。
3. Origin
Origin属性用来定义路径信息的来源,标记一条路由时怎么成为BGP路由的。
有三种类型:
- IGP:用network通告的,用i表示
- EGP:通过EGP得到的路由信息,用e表示
- Incomplete:通过其他方式学习到的,例如重分布,用?表示
路由优先顺序:i>e>?
4. Next_Hop
指出了前往目的地的下一跳IP地址。BGP中的下一跳为AS。
BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_Hop属性遵循下面的规则:
- BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
- BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
- BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。
本地通告的为全0.
5. LOCAL_PREFERENCE
用于判断流量离开AS时的最佳路径。
当BGP设备 从不同的IBGP对等体 得到目的地址相同,但是下一跳不同的多条路由时,将优先选择LOCAL_PREFERENCE值较高的路径。
LOCAL_PREFERENCE属性仅在IBGP对等体之间有效,不通告给其他AS。
默认值100,越大越优先
6. MED
用于判读流量进入AS时的最佳路径。
当EBGP入口有多个时,自治系统可以使用MED动态影响其他AS如何选择进入路径。
MED值越小越优先,思科默认为0
MED是在AS之间交换,仅在两个AS之间传递,收到此属性的AS一方不会再将其通告给任何第三方AS。
7. COMMUNITY
团体属性。
-
可以用于简化路由策略的执行。
-
可以将某些路由分配一个特定的团体属性,之久就可以基于团体属性值而不是每一个路由进行BGP属性的设置。
团体属性可以分为自定义团体属性与公认团体属性。
BGP选路
默认情况下,BGP选择最短AS-PATH作为最优路径。
配置命令
BGP进程下:更改默认值
bgp default local-preference [value]
default-metric [vaue]