一、基础知识
1. BGP
边界网关协议
2. 使用范围
AS与AS之间使用的路由协议
3. AS(自治系统)
自治系统范围:0-65535,
公有 AS(1-64511),
私有 AS(64512-65535)
4. 协议特点(算法)
路径矢量型,没有算法
5. 协议是否传递网络掩码
传递网络掩码,支持VLSM CIDR
6. 协议消息数据包封装
基于TCP封装; 端口号:179
二、BGP特点:
1. 无类别路径矢量
距离矢量的升级版—AS–BY–AS
2. 工作方式
使用单播更新来发送所有信息
基于TCP 179端口工作
3. 增量更新
仅触发无周期
4. 具有丰富的属性来取代IGP中度量进行选路
多个参数控制协议
5. 可控性
可以在进项和出项对流量实施强大的策略可控性
6. 默认不被用于负载均衡
通过各种选路规则仅仅产生一条最佳路径
7. BGP支持认证和聚合(汇总)
三、BGP数据包
基于TCP的179端口工作;故BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障;
首先通过TCP的三次握手来寻找到邻居;
Open 仅负责邻居关系的建立,正常进收发一次即可;携带route-id;
Keeplive 保活 周期1min查询邻居关系是否存在;实际保活TCP会话;hold time 默认3min
Update 携带路由条目 目标网络号+各种属性
Notification 出现错误数据时收发;
四、BGP的工作过程
1、IP可达
2、TCP三次握手,建立端到端虚链路,之后所有BGP数据包基于TCP的会话进行通信
3、OPEN报文进行邻居关系的建立,OPEN报文中携带AS号,RID等参数;正常情况open报文收发一次即可;邻居关系建立后生成邻居表;
4、邻居关系建立后,管理员手工选择传递的路由,通过更新包共享到邻居处;生成BGP表(装载本地发出),接收到的所有路由信息;
5、之后BGP协议,将BGP表中最优路由仅选择一条加载于路由表中;
6、收敛完成后正常仅keeplive包周期(1min)保活即可;若有路由变化,使用更新包,触发更新即可;
7、在一些错误的参数出现时,使用Notification 进行报错;比如AS配置错误,IP地址填写错误等;
五、BGP的路由黑洞
1.由于运行BGP协议的设备需要存储大量的路由条目
2.故硬件成本极高;
3.故为控制层面有效管理,一个AS中仅部分设备运行BGP协议,基于TCP会话来跳过未运行BGP协议的设备传递路由;
4.最终导致控制层面正常学习路由,但数据层面流量再经过未运行BGP协议的路由时,无法传递;
5.控制层面显示可达,实际数据层面不可达–路由黑洞
6.解决方案:
1)物理或逻辑全连
2)邻居关系全连
3)BGP路由重发布到IGP协议中
4)MPLS(最佳方案)多协议标签技术
六、BGP的基本配置:
- BGP邻居关系建立,与路由条目宣告是分开的配置的
- 直连的EBGP邻居关系建立
[r1]bgp 1 启动BGP协议,启动时需要键入AS号;没有多进程概念
[r1-bgp]router-id 1.1.1.1 建议配置RID;若不配置将自动生成—规则同OSPF相同
[r1-bgp]peer 12.1.1.2 as-number 2 对端IP地址,及对端所在的AS编号
- IBGP邻居关系建立,在一个AS内部,拓扑正常较为复杂;建议使用环回接口地址作为源、目标ip地址;存在备份链路,同时可以多条物理链路传递;
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 as-number 2
对端环回接口ip地址,及对端所在AS号
切记:一旦使用环回接口建立BGP的邻居关系;必须将源地址也修改为环回接口
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
3)EBGP邻居间存在多条物理链路时,也建议使用环回接口地址来建立
{1}IP可达,建议静态路由
{2}正常环回做为源、目ip地址建立邻居关系
{3}默认IBGP邻居间数据包的TTL值为255,EBGP邻居间TTL为1;故一旦使用环回建立ebgp邻居关系,必须修改TTL值,否则无法建立
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2
当建邻配置完成后,邻居间通过三次握手,建立TCP的会话
[r2]display tcp status
当TCP会话建立后,邻居间BGP协议将正常收发一次open报文,建立BGP邻居关系;生成邻居表:
[r2]display bgp peer
BGP local router ID : 2.2.2.2
Local AS number : 2
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
12.1.1.1 4 1 8 8 0 00:06:36 Established 0
表格最后的数值,标识本地从该邻居处学习到的路由条目的数量;
- BGP的宣告;运行BGP协议的路由器可以宣告本地路由表中通过任何协议获取到的路由条目—静态、IGP、直连; 而本地通过BGP协议学习到的路由,只要在本地依然优秀,将继续将向本地的其他BGP邻居传输;
注意:宣告时,宣告的条目必须同本地路由表中的记录完全一致
[r1-bgp]network 1.1.1.0 24
一旦进行宣告配置,条目将加载于本地的BGP表中;--装载本地发出及接收到的所有路由信息
[r1]display bgp routing-table 查看BGP表
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.0/24 0.0.0.0 0 0 i
状态 目标网络号 属性
状态-- * 可用 > 优秀 *>同时存在—可以加表(路由表) 可以传递(传递给
本地的其他BGP邻居)
状态处若出现i代表该条目是本地通过IBGP邻居学习到的
优秀的条件:1、同步问题(默认不关注) 2、下一跳可达
基于AS-BY-AS规则,条目在一个AS内部传递时将不修改条目属性;导致通过IBGP邻居学习到的BGP路由可能出现下一跳不可达;导致条目不优;
[r2-bgp]peer 3.3.3.3 next-hop-local 将BGP路由传递给本地的邻居3.3.3.3时修改下一跳地址为本地与3.3.3.3建立邻居关系的源ip地址
当路由条目传递给本地的EBGP邻居时,属性将自动发生变化,包括下一跳地址;
备注:在BGP协议中,若通过本地传递过来的路由条目,与本地路由表中已经存在且用于建立BGP邻居关系的路由相同时,该条目将不能优秀;
七、
BGP的路由宣告
一台运行了BGP协议的路由器,可以将本地路由表中无论何种方法获取到的路由条目,任意宣告到BGP协议中;
逐条宣告:宣告本地路由表中的任意路由条目;宣告时网络号必须和路由表中的记录完全一致;
[r1] bgp 1
[r1-bgp]network 1.1.1.0 24
宣告配置完成后,本地生成BGP表,表中记录本地发出以及接收到的所有BGP路由信息;
同时该路由被BGP使用更新包共享给本地的邻居,邻居也将其加载到它的BGP表中;
条目优秀的条件:
1、同步问题 --早期BGP协议为解决路由黑洞问题,要求一台BGP通过BGP协议学习到一条路由时,本地的IGP协议也要同时需要到该条目,才能满足同步需求;但将导致IGP协议负载过大;因此当前各厂家设备中均默认关闭同步规则;
2、下一跳可达问题
基于 AS-BY-AS规则,路由条目在一个AS内部传递时,其属性默认不变化;
可能导致内部BGP设备学习到的路由信息中,下一跳地址不可达
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 next-hop-local 将路由通过BGP协议传递给邻居3.3.3.3时,修改下一跳地址为本地
注IBGP水平分割规则,AS-BY-AS规则均在一个AS内部存在;EBGP邻居间传递路由将没有IBGP水平分割限制,EBGP邻居间传递路由时将自动修改下一跳为本地;
切记:在BGP协议中,BGP邻居传递过来的BGP路由,在本地路由表中已经通过其他协议存在,那么将不在本地加表而是继续传递给本地的其他邻居;
在BGP协议中,BGP邻居传递过来的BGP路由,在本地路由表中已经通过其他协议存在,同时该路由还被用于本地该传递路由的设备,建立邻居时作为底层路由;那么该条目在本地不优,将无法继续传递;
3、有条件的打破IBGP水平分割
a. 因为BGP协议可以非直连建邻,同时一个AS内部正常应该存在复杂的网络环境;完全可以实现BGP邻居关系的大量备份,理论上不需要一台不链接其他AS的BGP设备来备份内部邻居关系;
b. 故正常在一个AS中运行BGP协议的设备一定连接其他AS;由于IBGP水平分割的限制;导致一个AS内所有BGP协议设备间均建立IBGP邻居关系;IBGP邻居关系的数量成指数上升,配置量和管理量异常巨大;
c. 所以需要打破IBGP水平分割规则;
d. 因为IBGP水平分割用于防止IBGP环路,故打破将可能导致环路出现;因此成为有条件的打破IBGP水平分割;所谓有条件是指在确定打破无环的前提下来进行设计;
e.路由反射器
八、BGP的聚合(汇总)
- 不是BGP的标准汇总思路,而是利用了BGP的宣告的特征来简化了汇总配置量;
宣告特征—本地路由表中任何方式产生的路由均可被BGP宣告;
不逐条宣告明细路由,仅在更新源BGP设备上配置一条到达聚合地址的空接口防环路由,然后将其宣告到BGP协议中;
在实际工程中,由于AS之间一定存在大量的EBGP邻居关系;因此仅汇总不一定能做到优选路径,必须在传递聚合条目的同时,再传递部分的明细路由来进行选路控制;
以上的汇总配置完成后,若还需要同时传输部分明细路由,再逐一宣告需要传递的明细路由即可;
- 标准的BGP聚合配置
- 先逐条宣告所有的明细路由
- 再在更新源路由上进行聚合配置,自动产生空接口防环路由
[r5-bgp]aggregate 100.100.0.0 22 此时聚合与所有明细条目均传递
[r5-bgp]aggregate 100.100.0.0 22 detail-suppressed 仅传递聚合条目,所有明细路由被抑制
若需要在传递聚合条目的同时,再传递部分的明细路由;需要进行路径传递干涉策略;
- 路由传递干涉策略
- 抑制列表 – 先让设备将所有路由传递出去,再调用抑制策略
[r5]ip ip-prefix a permit 100.100.1.0 24
[r5]route-policy a permit node 10
[r5-route-policy]if-match ip-prefix a
[r5-route-policy]q
[r5]bgp 3
[r5-bgp]aggregate 100.100.0.0 22 suppress-policy a
被抑制调用时,表中允许的流量最终反而被抑制传输
- Route-map 在BGP中将route-map当分发列表用
[r5]ip ip-prefix b permit 100.100.1.0 24
[r5]route-policy b deny node 10
[r5-route-policy]if-match ip-prefix b
[r5-route-policy]q
[r5]route-policy b permit node 20
[r5-route-policy]q
[r5]bgp 3
[r5-bgp]peer 4.4.4.4 route-policy b ?
export Specify export policy 控制层面的出项
import Specify import policy 控制层面的入向
[r5-bgp]peer 4.4.4.4 route-policy b export
- 分发列表
[r5]ip ip-prefix c deny 100.100.1.0 24
[r5]ip ip-prefix c permit 0.0.0.0 0 le 32
[r5]bgp 3
[r5-bgp]filter-policy ip-prefix c export(控制层面方向)
- 前缀列表 – BGP协议中可以直接将前缀列表作为分发列表调用
[r5]ip ip-prefix d deny 100.100.1.0 24
[r5]ip ip-prefix d permit 0.0.0.0 0 le 32
[r5]bgp 3
[r5-bgp]peer 4.4.4.4 ip-prefix d export
九、反射规则
1.RR从一台EBGP学习到的路由 可以传递给本地的其他客户、非客户、其他EBGP 邻居
2.RR从一台客户端学习到的路由 可以换地给本地的其他的客户端 非客户端 其他EBGP邻居
3.RR从一台非客户端学习到的路由可以传递给本地的其他客户端 EBGP邻居 不能传递给本地其他的非客户端
十、联邦
声明大号为2
此时1 2 才可以正常建立
联邦内不能动属性 可以传递