BGP协议
1. 协议特性
BGP定义:
BGP(Border Gateway Protocol,边界网关协议)是自治系统间的路由协议,BGP交换的网络可达性信息提供了足够的信息来检测路由回路并根据性能优先和策略约束对路由进行决策。
特征:
- OSI的层次——应用层协议。
- 运行特征——链路状态协议。
- 连接方式——采用TCP连接传输信息,端口号179。
- 管理距离——IBGP(200)、EBGP(20)。
常见术语:
AS(Autonomous Systems):自治系统,运行同一种选路策略,由统一管理者管理的一组网络。
AS号:AS号由internet地址授权委员会(IANA)同一负责分配。AS号取值范围为1-65535。1-64511为公有AS号,64512-65535为私有AS号。
Peer:对等体,相当于neighbor。
EBGP:用于在不同的自治系统间交换路由信息。
IBGP:位于同一AS之内的邻居,无需彼此相连,只需能够彼此完成TCP握手即可。
2.配置方法
- 创建BGP进程,AS号为100,并进入BGP进程进行配置:
R2(config)#router bgp 100
- 关闭路由汇总功能:
R2(config-router)#no auto-summary
- 指定BGP的RID:
R1(config-router)#bgp router-id 1.1.1.1 //指定BGP的RID为1.1.1.1
- 指定BGP邻居:
R1(config-router)#neighbor 12.1.1.2 remote-as 100 //指定12.1.1.2为该路由器的BGP邻居,且12.1.1.2所在的AS号为100
- 通告路由:
R1(config-router)#network 12.1.1.0 mask 255.255.255.0 //通告路由的直连网段12.1.1.0,子网掩码为255.255.255.0
- 查看BGP配置:
R1#show run | se router bgp
- 查看BGP邻居表:
R1#show ip bgp summary //展示的是简要内容
R1#show ip bgp neighbors //展示的是详细内容
- 查看BGP拓扑表:
R1#show ip bgp
- 查看BGP路由:
R1#show ip route bgp
- 软清BGP进程(不会重置邻居关系):
R1#clear ip bgp * soft
- 硬清BGP进程(会重新建立BGP邻居关系):
R1#clear ip bgp *
3. 常见数据包
- Open——包括持续时间、BGP的RID以及AS号。用于建立邻居。
- Keepalive——每隔60s发送一次,持续时间180s。用于维持邻居关系。
- Update——包括路径属性和网络。用于传递路由条目和路径属性。
- Notification——用来对BGP错误进行报错。
BGP用Open报文建立邻居,用Keepalive报文做日常联系。
4. 建立邻居
因为BGP是基于TCP协议的,因此邻居的建立必须用单播指定。并且在BGP中,network
命令仅仅用于路由通告,没有邻居建立的功能。
建立邻居过程:
- idle:空闲,查找是否有去往邻居的路由。
- connect:连接,发送TCP握手包。
- active:活动,TCP三次握手成功,但邻居协商还未成功。
- open sent:发送open报文,互发参数进行协商。
- open confirm:确认open报文,协商取得一致。
- established:建立邻居关系。
建立邻居特殊命令说明:
- update source
因为bgp邻居建立是基于tcp连接的,必须有本端地址和对端地址。指定更新源,实际就是指定发出open包的源地址,也就是tcp连接的本端地址。一般使用命令neighbor 1.1.1.1 update-source loopback 0
指定更新源为回环接口0 - next-hop-self
当配置IBGP对等体关系时,要配置next-hop-self。因为BGP一般不修改条目携带的路径属性,若从本端EBGP对等体先学到路由,然后该路由,由本端传到自己的IBGP对等体,若不使用next-hop-self会使本端的IBGP对等体无法与本端的EBGP对等体通信。 - ebgp-multihop
当配置的是EBGP对等体关系,且你的EBGP邻居和你不是直连时,要配置ebgp-multihop x(x是本地到对端设备的跳数),这个俗称EBGP的多跳。因为默认(至少cisco设备是)EBGP邻居的建立所用报文的TTL值为1,配置EBGP多跳实质上修改的是这个TTL值。(另外,IBGP邻居建立所用的报文默认的TTL值为255,所以它不需要配置多跳) - synchronization
BGP路由器不应该使用或向EBGP邻居通告从IBGP邻居那里学习到的BGP路由信息,除非该路由是本地的或者该路由存在于IGP数据库,即该路由也能从IGP学习到。
同步规则要求BGP库与IGP库同步。这么做是为了使AS内的所有路由器都能达到同步,确保能够转发其它AS因使用该AS通告的路由而发送到该AS的那些数据。BGP同步规则也保证了整个AS中路由信息的一致性,避免了AS内的路由“黑洞”。
同步规则会对路由传递产生影响,所以建议使用命令no synchronization
关闭。
5. 防环机制
IBGP防环机制:
- 水平分割原则——从IBGP邻居学习到的路由不会再传递给IBGP邻居。
EBGP防环机制:
- AS-path——当一台路由器收到一条BGP路由,会查看路由的AS-path属性,如果发现有自己的AS号码,就会丢弃这条路由。
6. 路径属性
介绍:
当一条BGP路由被BGP路由器更新给其对等体时,这条BGP路由会携带多个路径属性值并传递给对等体。这些路径属性将影响BGP的路由优选,它们的存在使得BGP的路由策略能力异常强大。
常见的路径属性有:
- 公认强制属性
- AS路径(AS-path):用来标识路由经过的AS路径。
- 下一跳(next-hop):去往目的路由的下一跳AS的路由器ip地址。
- 起源(origin):说明路由是如何成为BGP路由的。
- 公认自由属性
- 本地优先级(local preferent):它告诉AS中的路由器,哪条路径是离开AS的首选路径。
- 可选传递属性
- 团体属性(community)该属性是一种路由标记,用于简化路由策略的执行。
- 可选非传递属性
- MED:用来影响EBGP邻居,告诉自己的EBGP邻居如何选最优路由。
BGP按照如下顺序选择一条没有环路并且可用的路由:
- 权重:Prefer highest weight (local to router).
- 本地优先级:Prefer highest local preference (global within AS).
- 起源于本地:Prefer route originated by the local router (next hop = 0.0.0.0)
- 最短AS路径:Prefer shortest AS path.
- 最低的起源属性:Prefer lowest origin code (IGP < EGP < incomplete).
- 最低的MED:Prefer lowest MED.
- EBGP优于IBGP:Prefer EBGP path over IBGP path.
- 最近的IGP邻居:Prefer the path through the closest IGP neighbor.
- 生存最长的路由:Prefer oldest route for EBGP paths.
- 最低的router-id:Prefer the path with the lowest neighbor BGP router ID.
- 最低的IP地址:Prefer the path with the lowest neighbor IP address.