BGP:边界网关协议
使用范围:BGP范围,在AS(自治系统)之间使用的协议
协议的特点(算法):路径矢量型,没有算法,有规则
(传拓扑信息是链路状态型,不传是距离矢量型)
无类别,协议传递网络掩码,支持VLSM(可变长子网掩码技术,网络掩码划分在主类网内部)和CIDR(无类别域间路由,网络掩码超越主类网边界)
协议消息数据包封装:基于TCP(保证可靠性,确认重传;单播)封装,端口号179
BGP协议的工作环境:也需要非直连建立邻居关系,故单播是最好的选择
非直连单播的前提是IP可达——BGP承载于IGP之上
AS:自治系统
由单一的机构或者组织所管理的一些列IP网络设备的集合
AS的管理
每一个AS区域都有一个编号(ASN)
IANA---互联网数字分配机构
ASN由16位二进制组成,1--65535;公有AS(1-64511)私有AS(64512-65535)
AS通讯
AS内部使用相同路由协议---内部网关协议(IGP——收敛快、选路佳、占用资源少)
AS之间使用专有路由协议---边界网关协议
BGP协议特点
- AS到AS,是一种路径矢量型路由协议
- BGP协议版本,当前版本V4(V4+:理论上所有的路由条目都可以传)
- 更新地址:单播更新;基于TCP 179端口工作
- 更新方式:触发更新(仅触发无周期,当网络稳定时,不发送信息;不稳时发送)、增量更新(只发送改变的信息)
- BGP协议中存在大量的属性(是一种基于规则的路由协议)
- 支持路由认证
- 支持BGP路由聚合(可以分级进行聚合)(汇总)
- 是一种非常消耗资源的路由协议(每个路由器只能启动一个bgp路由协议)
- 默认不用于负载均衡——通过各种选路规则仅仅产生一条最佳路径
- 协议本身无法正常优选路径
- 适合使用BGP的网络环境
- 传输AS
- 多宿主
- 需要对进入和离开的流量进行强大的策略控制时
BGP邻居关系
IBGP:内部BGP邻居;相同AS之间建立的邻居关系,其学习到的路由为IBGP路由
EBGP:外部BGP邻居;不同AS之间建立的邻居关系,其学习到的路由为EBGP路由
IBGP:IBGP的水平分割机制( IBGP的只传一跳,通过一个IBGP邻居学习)
EBGP:AS-Path
BGP邻居状态机制
Idle:初始化 检查对方IP地址有无路由,有路由就三次握手然后经历下面的
224.0.0.x:具有特殊意义,本地链路组播地址,ttl=1
Connect:连接 Active:活动
Opensent:发送open报文 Openconfirm:open报文确认
Keepalive:周期性发送保活报文;收到此报文表示邻居状态建立
Established:邻居状态
BGP消息数据包
BGP 数据包基于TCP的179端口工作;放BGP协议中所有的数据包均需要在 tcp 会话建立后基于TCP 的会话来进行传输及可靠性的保障;
首先通过 TCP的三次握手来寻找到邻居:
Open开启 仅负责邻居关系的建立,正常进收发一次即可;携带 route-id;
Keeplive 保活 周期1min 查询邻居关系是否存在;实际保活TCP会话:hold time 默认3min
Update更新 携带路由条目 目标网络号+各种属性
Notification报错 出现错误数据时收发;
BGP的工作过程
1、IP可达-建立BGP间的两台设备必须能通一可以直连,也可以非直连IGP协议来完成ip地址一静态 rip ospf ISIS
2、BGP协议启动后,单播TCP三次握手建立会话一之后所有的数据均在该会话中传输,来保障传输的可靠性
3、正常仅收发一次open报文,建立邻居关系,生成邻居表;邻居关系建立后,由管理员选择性的宣告路由条目;之后这些条目基于更新包
4、到达邻居处;生成BGP表一本地发出及接收到达所有路由条目;
5、之后本端基于本端BGP表,将表中最优路径加载于路由表中;
6、收敛完成,完成后仅keekplive 1min周期保活即可结构突变一新增断开update无法沟通;3min无keeplive,断开邻居,删除BGP表中该邻居传递过来的路由
BGP路由黑洞
由于BGP协议可以非直连建立邻居关系,故可能出现BGP 协议邻居间跨越了未运行 BGP 协议的路由器,导致 BGP 路由传递后,控制层面显示可达,但数据层面,流经过未运行 BGP 协议的路由器时,无法通过,最终不通--- 控制层面可达、数据层面不可达
路由黑洞解决方案:
1、物理或逻辑链路全连
2、BGP邻居关系全连——所有路由器均运行BGP
3、IGP 重发布到 BGP
4、MPLS多协议标签交换技术(推荐做法)
BGP的防环机制——水平分割
1、EBGP水平分割——防御EBGP环境下的环路
BGP协议将在路由条目中记录所有经过的AS 编号;---as-path 属性——装载所有经过过的AS 编号属性接收到的 BGP条目中,若 as-path 属性存在本地的AS 号将拒绝接收
2、IBGP 水平分割——防御IBGP 环境下的环路
AS-BY-AS 特性——以一个 AS 为一跳;因此在一个AS 内部传递的路由,其属性默认没有任何变化
IBGP 水平分割——从一个IBGP 邻居处学习到的路由,不得传递给本地的其他的IBGP 邻居;为了实现所有BGP 设备学习到所有路由,在BGP 水平分的条件下,两两间均需要建立 IBGP 邻居关系
IBGP 邻居关系的数量成指数上升
后期可以使用联邦或路由反射器来打破
BGP配置
1、在BGP协议中、邻居的建立,与路由条目的宣告是分开进行的:
[1]直连的 EBGP 邻居间建立
[r1bgp1启动时需要定义其所在的 AS号没有多进程的概念
[r1-bgp]router-id 1.1.1.1
[r1-bgp]peer 12.1.1.2 as-number 2 建立邻居关系,定义对端设备的ip 地址,及所在AS 编号
建议配置RID、与OSPF的RID 配规则一致
[2]建立IBGP 邻居关系
由于IBGP 邻居处于同一个AS中,正常一个AS 的内部存在大量的备份路径: 若使用物理接口建立邻居关系,将浪费这些备份或负载均衡路径:故建议使用环回接口来进行IBGP 邻居关系:
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 as-number 2
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
切记:一旦使用环回地址做为建邻地址,同时需要修改源 ip 地址,为本地的环回地址
- EBGP 邻居间,存在多条物理链路的建立方案
建议使用环回来作为源、目标ip 地址;便于用所有物理链路
1、IP 可达问题,一般使用静态路由
2、正常使用环回地址作为源、目来建立邻居关系
[r5]bgp 3
[r5-bgp]peer4.4.4.4 as-number 2
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
3、EBGP 邻居间,默认TTL值为1,BGP为255;因为理论上EBGP 邻居间没有第三台路由器,故TTL值设定为1,将只能和直连的物理接口建立邻居:一旦使用环回,必须修改TTL 值[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2 修改EBGP邻居间的TTL值
两端配置完成后,将基于TCP的三次握手,建立TCP会话
[r1]display tcp status
TCPCB Tid/Soid Local Add;port Foreign Add:port VPNID State
b4d0f018 164/5 12.1.1.1:179 12.1.1.2:49877 0 Established
固定端口的使用者为服务端:
会话建立后,邻居间使用 open 报文,建立BGP的邻居关系;生成邻居表
[r1]display bqp peer
BGP local router ID :1.1.1.1
Local AS number :1