BGP以及
在BGP中,重发布和路由策略是经常使用的工具
1.一些概念
BGP — 边界网关协议
IGP — 内部网关协议 — 运行在AS内 — OSPF、RIP、ISIS
EGP — 外部网关协议 — 运行在AS间 — EGP、BGP
AS — 自治系统:由单一的组织或机构独立维护的网络以及网络资源的集合 — 将单个网络范围划小
AS号 --- 区分不同的AS --- 范围为:0-65535(0/65535为保留AS号)
1-64511作为公有AS号允许运营商使用
64512-65534作为私有AS号
IANA组织:维护、分配公网IP和AS号
拓展AS号:将16位AS号拓展至32位AS号
2.BGP的一些特性
IGP看重的特性:选路、收敛、资源占用 — 这些都不是BGP主要看重的
BGP传递的是路由条目信息 — 与RIP类似
BGP中的“邻居”应该称为对等体
EBGP对等体之间一般使用直连建立对等体关系
IBGP对等体之间一般使用非直连建立对等体关系 — 使用环回建邻
BGP为了确立上面两条规则而规定:
1.EBGP对等体之间发送的数据包携带的TTL值为1
2.IBGP对等体之间传递的数据包携带的TTL值为255
对比
RIP — 无类别距离矢量型路由协议
BGP — 无类别路径矢量型协议相同点:
BGP在传递路由条目时携带子网掩码不同点:
BGP在默认情况下不支持负载均衡
BGP会根据传递过来的路由信息中携带的路径属性选择最优路由加表到自身路由表中
BGP把一个AS看做一个整体
IGP实际上是一种算法概念 — 指所有的动态路由协议都需要一种算法帮助其计算路由信息
BGP不需要算法去计算路由,只需要获取IGP计算完成的路由信息并传递至其他AS
2.1高可控性
路径属性 — 通过路由策略关联属性达到路由控制的效果 — 针对路由条目
BGP没有使用周期更新行为传递路由信息
BGP存在触发更新
2.2高可靠性
TCP
BGP在传输层使用TCP进行传输 — 高安全性 — 端口号:179
BGP在传输层使用TCP,TCP用单播传输,意味着BGP建邻必须指定对端
同时,也因为使用TCP,BGP支持非直连建邻 — 只要有路由,TCP就可以建立连接BY
2.3AS - BY - AS
BGP把一个AS看做一个整体 — 意味着在AS内部传递的BGP路由信息的路径属性相同 — 下一跳、AS_Path······
3.BGP的数据包
BGP报文的公共头部
在类型字段中:置1为Open报文;2为Update报文;3为Notification报文;4为Keepalive报文;5为Route-refresh报文
3.1 Route-refresh报文
是一种刷新机制
作用: 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文
发送时刻: 当路由策略发送变化时,触发请求对等体重新通告路由
3.2 Open报文
Open报文头部:
- AS号: 自身的AS号,比对逻辑对等体发过来的OPEN报文中携带的AS号,必须和指定建邻的AS一致,否则会导致建邻失败
- 保活时间:默认180s。和OSPF不同,在BGP中对等体保活时间不同是可以建邻的,AS之间会协商参数,对等体之间会以最小时间去执行
- 路由器标识符: 类似于RID,而且与RID的创建与生成的规则完全相同,如果对等体之间相同会导致建邻失败
- 可选参数:认证、刷新能力等
作用: 协商BGP对等体参数,建立对等体关系
发送时刻: BGP的TCP连接建立完成之后
3.3 Keepalive报文
作用:
- 用于周期保活BGP对等体关系,默认时间是1/3的保活时间 60s
- 用于做OPEN报文的临时确认包 — TCP只是确保数据的可达性,但是某些数据包是有功能的,TCP并不能确认功能是否完成
发送时刻:
3. 收到对端的Open报文,完成认证后发送
4. 周期性发送用于保活
3.4 Update报文
Update报文头部:
网络层可达信息:自身的路由条目信息、掩码等
撤销的路由:消失(发送改变)的路由条目
作用: 传递BGP路由信息的数据包
发送时刻: BGP对等体关系建立之后有路由器需要发送或路由变化时向对端对等体发送Update报文
3.5 Notification报文
Notification:告警报文 — 是一种优化措施,方便排查问题
作用: BGP工作过程出现问题时,返回不能完成某环节的原因
发送时刻: 当BGP运作发送错误时
4.BGP的状态机
BGP将建邻和发布路由的过程分开了,所以状态机讨论的只是建邻过程
第0状态:对等体之间TCP会话建立成功 — BGP在建邻过程中会建邻两次TCP会话,之后会保留RID大的设备发起的TCP会话
4.1 Idle状态
用途: 开始准备TCP的连接并监视远程对等体,启动BGP时,要准备充足资源
IDLE状态下,启动BGP协议后必须指定建立对等体的目标后,才会进入Connect状态
4.2 Connect状态
用途: 正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP会话建立成功则进入OpenSent状态,否则进入Active状态
4.3 Active状态
用途: TCP会话建立失败,反复尝试建立TCP会话
4.4 OpenSent状态
用途: TCP会话建立成功,开始发送OPEN报文携带数据区协商建立对等体关系
4.5 OpenConfirm状态
用途: 如果对端对等体在OpenSent状态发送OPEN报文,本端认证数据成功后就会发送Keepalive报文,并开始等待对端发送的Keepalive报文,这个等待状态就是OpenConfirm状态
4.6 Established状态
用途: 在等待状态收到对端对等体发送的Keepalive报文后,则会进入最终状态Established状态
5. BGP的工作过程
- 基于IGP(直连、静态、动态········)实现路由可达 — BGP需要建立TCP会话(单播)
- 指定对等体关系,对等体直接单播传输,通过三次握手,建立立TCP会话通道。之后所有的BGP通信都将基于TCP会话通道来传输。并且 依靠TCP提供传输的可靠性
- 使用OPEN报文和Keepalive报文文进行邻居关系的建立。OPEN报文用来携带建邻使用的参数,keeplive报文用于OPEN报文参数的 确认。最终完成对等体关系的建立。生成邻居表,存储BGP对等体关系信息。
- 建立邻居关系后,使用update报文来共享路由条目信息。信息中将携带目标网络号,掩码及路径属性;之后,将发送以及收集到 的路由信息记录在一张表中 — BGP表。
- 之后,会将BGP表中最优的路由信息(通过路径属性选择的结果)加载到路由表中。
- 收敛完成后,将使用keeplive报文进行对等体之间周期保活,默认的保活时间为180S(hold time),发送周期为60S。
- 如果这个过程中出现任何问题,都将使用notification报文进行告警。
- 如果出现结构突变(网段消失或者新增网段),则将使用update报文进行触发更新,并通告给其他的对等体。
6. BGP的路由黑洞
路由黑洞的产生:控制层面可达,数据层面不可达
IBGP内部存在没有运行BGP协议的设备,当访问EBGP网段的流量来到这些IGP设备之后,由于路由表中没有BGP网段的路由条目,这些IGP设备会直接将EBGP网络的流量丢弃
方法:
- IGP内所有设备也都运行BGP — 在学MPLS之前,只能这么搞,但是MPLS才是解决BGP路由黑洞的主流方法
- 重发布
- MPLS:多协议标签交换 — 以此引申出了一种MPLS VPN
在解决黑洞问题之间,BGP设置了一个同步机制,这个机制使一台IGP设备学习到一条BGP路由时,如果本地IGP路由表不可达,则将该BGP视作无效 — 这个机制现在在BGP协议下是默认关闭的
7. BGP的防环
利用水平分割机制
7.1 EBGP的水平分割
BGP在EBGP间传递路由信息的时候会携带自身的AS号(AS_Path参数),当EBGP收到带有本身AS号的路由信息,会将其丢弃,不进行学习
AS_Path也是BGP的一种选路属性依据,会记录所以经过的AS区域的AS号(后转发的AS号会放在前面),所以在其他属性相同的情况下,BGP会选择AS_Path属性更短的路径 — 代表此路由经过的AS区域更少
7.2 IBGP的水平分割
一条规则:当运行BGP的设备从IBGP对等体处学习到一条IBGP路由,那么将不再转发给其他IBGP对等体
用这条规则时,IBGP对等体直接要建立两两全连的网络环境,缺点:
- 增加拓扑的复杂性导致网络可拓展性变差
- 增大了资源占用
为了解决这条规则带来的问题,BGP又设置了两个机制去解决:联邦、反射器