BGP( Border Gateway Protocol,边界网关协议)是一个路径矢量路由协议
,和传统的基于下一跳的IGP协议不同,它是基于AS(自治系统)的协议。BGP属于外部网关路由协议,它解决的是AS之间的选路问题
,如果把一个城市比作一个自治系统,那么像RIP、OSPF等协议就相当于该城市的公交车或地铁,而BGP则是火车,运行在城市之间。
自治系统( Autonomous System,AS )是由同一个技术管理机构管理、使用统一选路策略( 运行同一动态路由协议 )的一组路由器的集合,自治系统的编号取值范国为1~ 65535。其中1~64511是互联网上注册的公有AS号类,类似公有IP地址,是全球唯一的且不可重复使用,64512-65535是私有AS号,类似于私有地址,可以重复使用但是互联网上不可以被使用。
IGP:即自治系统内部的路由协议
,主要包含RIPv1/v2、OSPF、ISIS、EIGRP(思科私有协议),IGP是运行在AS内部的路由协议,它解决AS内部的选路问题,其主要作用是发现、计算路由。
EGP:即自治系统之间的路由协议
,通常指BGP。EGP是运行在AS与AS之间的路由协议,它解决的是AS之间的选路问题,BGP的主要作用是控制路由的传播和选择最优路由。
IBGP和EBGP所定义于BGP(EGP)里的邻居关系
IBGP:同一个AS内部的BGP邻居关系,IBGP邻居通常是指运行BGP协议的对等体两端均在同一个AS域内,属于同一个 BGP AS内部。
EBGP:AS之间的BGP邻居关系,EBGP邻居通常是指运行BGP协议的对等体两端分别在不同的AS内。
如下图所示
按自治系统分类可以分为:
IGP、EGP(BGP)
按协议类型分类可以分为距离矢量路由协议,链路状态路由协议
距离矢量路由协议: RIPv1/v2、BGP(路径矢量协议)、EIGRP(高级的距离矢量协议)
链路状态路由协议: OSPF、ISIS
,上面都了解以后,开始学习BGP
BGP是跨公网,跨自治系统的路由协议,可以在自治系统之间学习路由。BGP的动态学习路由也是基于邻居
,只有邻居关系正常,BGP才可以正常工作。
BGP邻居关系
运行BGP的路由器通常被称为 BGPspeaker(发言者),相互之间传递报文的 Speaker之间互称为对等体
( Peer ),BGP邻居关系的建立、更新和删除是通过对等体之间交互5种报文、6种状态机和5个表等信息来完成的,最终形成BGP邻居
BGP的邻居关系是基于TCP
的,也就是说只要 TCP/IP可达,无论是否直连,BGP对等体彼此之间就可以建立邻居关系
报文 | 作用 |
---|---|
open | 建立BGP对等体之间的连接 |
update | 更新增量路由 |
notification | 检测错误状态,报错 |
route-refresh | 告知对等体本地支持的路由刷新能力 |
keepalive | 周期性的发送,保持有效的连接 |
状态机 | 动作 |
---|---|
idle | 初始状态,拒绝任何连接 |
connect | 连接态,等待tcp连接的建立 |
active | 活跃态,尝试tcp的连接 |
opensent | 检查态,检查收到的open报文,如果报文正确转到下一连接状态openconfirm;如果报文错误,转到idle |
openconfirm | 等待态,等待对等体的keepalive或notification报文,如果是keepalive就进入到established;如果是notification就回到idle |
established | 建立态,对等体之间正常收发信息 |
BGP路由是通过BGP命令通告而成的,而通告BGP路由的方法有两种: Network
和 Import
使用 Network命令可以将当前设备路由表中的路由( 非BGP )
发布到BGP路由表中并通告给邻居。需要特别注意的是, network的对象是路由条目
[r1]bgp 100
[r1-bgp]network 1.1.1.1 32
[r1-bgp]network 192.168.100.0 24
使用Import命令可以将所学习到的路由信息重分发到BGP路由表中,是BGP宣告路由的一种方式,可以引入BGP的路由包括直连路由
、静态路由
及动态路由协议
学习的路由。和 Network方式的区别是,Import的对象是某种动态路由协议
,而不是路由条目
[R2]bgp 100
[R2-bgp]import-route ospf 110
在AS边缘的BGP设备,会接收到它的EBGP对等体邻居传递过来的BGP路由信息,因为EBGP邻居接收到的BGP路由信息中下一跳改变
,而在同一个AS内通过IBGP邻居接收过来的BGP路由信息中的下一跳不会改变
如下图所示:
在不同AS里面,他们呢属于EBGP邻居,R2,R3的下一跳都正常;
在同一AS中,R3,R4是IBGP邻居,下一跳都会指向R2,这样R4就会有问题
解决办法是在R3上宣称下一跳为R3自己,那么R4看到的下一跳就变成34.1.1.3,而34.1.1.3可以通过IGP(ospf)学习到(图中是直连),从而解决了路由无效的问题
[R3]bgp 300
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 23.0.0.2 as-number 200
[R3-bgp]peer 34.1.1.4 as-number 300
[R3-bgp]peer 34.1.1.4 next-hop-local
BGP的常用属性有 Origin、AS-PATH、Next-Hop、Local-Pref和MED等
属性 | 作用 |
---|---|
origin属性 | 用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的 |
AS-PATH(AS路径)属性 | 记录了某条路由从本地到目的地址所要经过的所有AS编号,且离本设备最近的AS号在最前面 |
Next-Hop(下一跳) | IGP中的下一跳描述的是下一个路由器,而BGP中的下一跳描述的是下一个AS |
Local-Pref属性 | 标识BGP路由的优先级,用于判断流量离开AS时的最佳路由 |
med属性 | 判断流量进入邻居AS时的最佳路由,其他条件相同的情况下,将优先选择MED值较小者作为最佳路由 |
下面,再看一个BGP的实验
使PC1可以ping通PC2
然后修改BGP属性来改变路径
r1配置端口并建立对等体
[r1]int g0/0/0
[r1-GigabitEthernet0/0/0]ip add 10.0.12.1 24
[r1-GigabitEthernet0/0/0]
[r1-GigabitEthernet0/0/0]int g0/0/1
[r1-GigabitEthernet0/0/1]ip add 10.0.13.1 24
[r1]int g0/0/2
[r1-GigabitEthernet0/0/2]ip add 192.168.100.254 24
[r1-LoopBack0]ip add 1.1.1.1 32
[r1-LoopBack0]q
## 创建对等体
[r1]bgp 100
[r1-bgp] router-id 1.1.1.1
[r1-bgp] peer 10.0.12.2 as-number 200
[r1-bgp] peer 10.0.13.2 as-number 200
[r1-bgp]network 1.1.1.1 32
[r1-bgp]network 192.168.100.0 24
r2添加端口并创建对等体
[r2]int g0/0/0
[r2-GigabitEthernet0/0/0]ip add 10.0.12.2 24
[r2-GigabitEthernet0/0/0]int g0/0/1
[r2-GigabitEthernet0/0/1]ip add 10.0.24.1 24
[r2]int LoopBack 0
[r2-LoopBack0]ip add 2.2.2.2 32
[r2]ospf 110
[r2-ospf-110]area 0
[r2-ospf-110-area-0.0.0.0]network 10.0.24.0 0.0.0.255
[r2-ospf-110-area-0.0.0.0]network 2.2.2.2 0.0.0.0
## 建立对等体
[r2]bgp 200
[r2-bgp]router-id 2.2.2.2
[r2-bgp]peer 10.0.12.1 as-number 100
[r2-bgp]peer 10.0.24.2 as-number 200
[r2-bgp]peer 10.0.24.2 next-hop-local
[r2-bgp]q
r3添加端口并创建对等体
[r3]int g0/0/0
[r3-GigabitEthernet0/0/0]ip add 10.0.13.2 24
[r3-GigabitEthernet0/0/0]int g0/0/1
[r3-GigabitEthernet0/0/1]ip add 10.0.34.1 24
[r3]int LoopBack 0
[r3-LoopBack0]ip add 3.3.3.3 32
[r3]ospf 110
[r3-ospf-110]area 0
[r3-ospf-110-area-0.0.0.0]network 10.0.34.0 0.0.0.255
[r3-ospf-110-area-0.0.0.0]network 3.3.3.3 0.0.0.0
## 建立对等体
[r3]bgp 200
[r3-bgp]router-id 3.3.3.3
[r3-bgp]peer 10.0.13.1 as-number 100
[r3-bgp]peer 10.0.34.2 as-number 200
[r3-bgp]peer 10.0.34.2 next-hop-local
r4添加端口并创建对等体
[r4]int g0/0/0
[r4-GigabitEthernet0/0/0]ip add 10.0.24.2 24
[r4-GigabitEthernet0/0/0]int g0/0/1
[r4-GigabitEthernet0/0/1]ip add 10.0.34.2 24
[r4]int g0/0/2
[r4-GigabitEthernet0/0/2]ip add 172.16.46.254 24
[r4]int LoopBack 0
[r4-LoopBack0]ip add 4.4.4.4 32
[r4]ospf 110
[r4-ospf-110]area 0
[r4-ospf-110-area-0.0.0.0]network 10.0.24.0 0.0.0.255
[r4-ospf-110-area-0.0.0.0]network 10.0.34.0 0.0.0.255
[r4-ospf-110-area-0.0.0.0]network 172.16.46.0 0.0.255.255
## 建立对等体
[r4]bgp 200
[r4-bgp]router-id 4.4.4.4
[r4-bgp]peer 10.0.24.1 as-number 200
[r4-bgp]peer 10.0.34.1 as-number 200
[r4-bgp]network 4.4.4.4 32
[r4-bgp]network 172.16.46.0 24
配置完成
在r1查看路由如下
*代表有效的路由,>代表最优的路由,只有最优的路由才会最终放入路由表中
ping通测试
修改优先级属性来修改r1到r4的路径
[r3]route-policy lop permit node 10
Info: New Sequence of this List.
[r3-route-policy]apply local-preference 222
[r3-route-policy]q
[r3]bgp 200
[r3-bgp]peer 10.0.34.2 route-policy lop export
[r3]q
<r3>reset bgp all # 刷新bgp路由表
[R2]route-policy as permit node 10
Info: New Sequence of this List.
[R2-route-policy]apply as-path 100 200 300 additive
[R2-route-policy]quit
[R2]bgp 200
[R2-bgp]peer 10.0.24.2 route-policy as export
[R2-bgp]quit
[R2]quit
<R2>reset bgp all
通过MED属性控制选路
[R2]route-policy med permit node 20
Info: New Sequence of this List.
[R2-route-policy]apply cost + 500
[R2-route-policy]quit
[R2]bgp 200
[R2-bgp]peer 10.0.12.1 route-policy med export
[R2-bgp]quit
在r1查看路由表如下
注:这里只是演示怎么修改,上面也能看出,修改完不一定是最优的路径,所以,你在公司里面一定要根据实际情况。