BGP(Border Gateway Protocol),边界网关协议。
标准:
自治系统中,运行 BGP 协议的路由器称为 BGP 发言人(BGP speaker)。
4
字节的 BGP 标识符(BGP identifier);BGP 发言人通过与其他自治系统的 BGP 发言人交换路径信息来学习路由。
建立连接的两个 BGP 发言人互称为对等发言人(peer)。
179
两个 BGP 发言人建立 TCP 连接后:
使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor)或对等站(peer)
如果一个 AS 与多个 AS 连接,该 AS 往往会有多个 BGP 发言人。
必须确保自治系统内部路由的一致性:需要在所有 BGP 发言人之间建立对等关系。
为防止在 AS 内部出现环路路由,BGP 发言人不会将从 IBGP 学习到的路由再通告给其他 IBGP (称为“水平分割”)。
BGP4 定义了 4 种报文:
类型 | 报文名称 |
---|---|
1 | 打开(OPEN)报文 |
2 | 更新(UPDATE)报文 |
3 | 通知(NOTIFICATION)报文 |
4 | 保活(KEEPALIVE)报文 |
16
字节,必须设置为0
,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1
。
2
字节,指明了报文(包括固定首部)的长度,即报文的结束位置,以字节为单位。1
字节,指明了BGP报文的类型。BGP 发言人与对等 BGP 发言人建立 TCP 连接后,首先向对方发送一个打开报文 ,协商路由信息交换参数。
接收到打开报文后,BGP 发言人用保活报文响应。
1
字节的“版本”字段,指明BGP协议的版本号,对BGP4协议设置为4
。2
字节的“自治系统号”,是发送方所属自治系统的编号。2
字节的“保持时间”,是发送方建议的连接保持时间,以秒为单位。接收方将以自己配置的保持时间和发送方建议的保持时间中的较小者作为实际的连接保持时间。保持时间指明了从对方接收到下一个BGP报文的最长等待时间。若超过保持时间后还没有从对方接收到任何报文,就认为对方不可达,关闭与对方的TCP连接。4
字节的“BGP标识符”,即发送方的BGP标识符。BGP发言人在与所有对等发言人通信时必须使用相同的标识符。1
字节的“选项参数长度”,指明了报文中包含的所有选项参数的总长度,以字节为单位。若为 0,表明报文中没有选项参数。剩余数据则是选项参数。打开报文可包含多个选项参数,每个参数用一个三元组(TLV结构)表示:
1
个字节,指明参数的数据类型,如整型、字符串等。1
个字节,指明“参数值”字段的长度,以字节为单位BGP 发言人通过发送更新报文通知对等发言人路由信息。
BGP4 中路由被定义为:一组目的地址以及到达这些目的地址的一条路径;路径用一系列属性描述。
一个 BGP 更新报文中可以包含一条增加的新路由,以及多条要撤销的失效路由。
撤销路由用“撤销路由长度”和“撤销路由”两个字段指明。
2
字节,指明“撤销路由”字段的长度,以字节为单位。为 0 表示没有要撤销的路由,报文中也不包含撤销路由字段。新增的路由“路径属性总长度”、“路径属性”和“网络层可达性信息”三个字段共同描述。
2
字节,是紧接着的“路径属性”字段的总长度,单位是字节。如果是 0 表示报文中不包含新增路由,也不存在“路径属性”和“网络层可达性信息”字段。2
个字节,第一个字节是“属性类型标志”,第二个字节是“属性类型代码”;“长度”指明了属性值所占的字节数,依赖于属性类型标志中“扩展长度位”是否置位,占1
个字节或2
个字节。一个更新报文中,一种路径属性只能出现一次。BGP 发言人根据接收的更新报文构造自治系统之间的连接关系图,计算出到达目的网络的下一跳地址。
BGP 发言人周期性向对等发言人发送保活报文,以维持与对方的连接。
保活报文发送间隔不能小于 1
秒,通常设置为保持时间的 1/3
。
当协议运行发生错误时,BGP 发言人向对等发言人发送通知报文,并立即关闭相关的 TCP 连接。
1
个字节,指明了具体的错误类型。错误代码 | 含义 |
---|---|
1 | 报文首部错误 |
2 | OPEN 报文错误 |
3 | UPDATE 报文错误 |
4 | 保持时间超时 |
5 | BGP 有限状态机错误 |
6 | 停止 |
BGP结合丰富的路径属性,很好地控制路由信息的传递,实现路由的选择。
BGP路径属性是一组描述BGP前缀特性的参数
BGP路径属性可以被分为四大类:
BGP 必须识别所有公认属性。可选属性不要求所有BGP路由器都必须能识别。
公认属性包括强制和任意两大类:
可选属性包括过渡和非过渡两大类:
常见BGP路由属性:
1、Origin
2、AS_PATH
3、Next hop
4、MED(Multi-Exit-DISC)
5、Local-Preference
6、Atomic-Aggregate
7、Aggregator
8、Community
9、Originator-ID
10、Cluster-List
11、MP_Reach_NLRI
12、MP_Unreach_NLRI
13、Extended_Communities
以下列出几种常用的属性:
属性名 | 公认/可选 | 必遵/任意 | 过渡/非过渡 |
---|---|---|---|
Origin | 公认 | 必遵 | — |
As_PATH | 公认 | 必遵 | — |
Next hop | 公认 | 必遵 | — |
Local-Preference | 公认 | 任意 | — |
MED | 可选 | — | 非过渡 |
Community | 可选 | — | 过渡 |
该属性定义了BGP 路径信息源头,实际上也就是BGP Speaker 产生BGP 路由的方式。
有3 种起源属性值:IGP、EGP和Incomplete(不确定来源)。
某条路由是直接而具体的注入到BGP路由表中的,则origin属性为IGP
Total Number of Routes: 2
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
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 18.0.0.1/32 0.0.0.0 1 0 i
*> 18.0.0.2/32 0.0.0.0 1 0 i
通过EGP学到的路由,则origin属性为EGP
其他情形下,Origin属性都为 Incomplete
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped, x - best external,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? – incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 18.0.0.1/32 0.0.0.0 1 0 ?
*> 18.0.0.2/32 0.0.0.0 1 0 ?
Origin属性值默认情况下不被任何路由器修改
IGP:在BGP 路由表中(用display bgp routing-table 查看)将会看到“i”的标识,通过network 命令宣告的路由,起点属性为IGP,此种方式也称为BGP 信息的半动态注入,network 命令所宣告的网络来自于IGP 协议(包括静态路由),这些路由是有选择性地通过network 命令转换为BGP路由,所以称为“半动态”。
EGP:在BGP 路由表中将会看到“E”的标识,通过将EGP 转化(import)成的BGP 路由将具备此属性,这个属性在现实网络中将很难遇到,因为EGP 基本上已经退出了历史舞台。
Incomplete:在BGP 路由表中将会有一个“?”标识,具备这种属性的路由是通过一些别的方式学到的,属于未知的不明确的状态,一般来说,是通过将IGP 或者静态路由引入(import)以后产生的。因为无条件地把IGP 路由信息引入到BGP 路由表可能会造成副作用,比如不要的或者错误的信息会漏(leak)进BGP 中,比如IGP 路由表中可能会包含很多仅仅用于AS 内部的专用地址或者未经注册的地址。除此以外,这样做还有可能造成BGP 路由表的动荡(因为BGP 的路由依赖于IGP 路由),对此问题BGP 提供了一个解决方案路由衰减(ROUTE DAMPENING),此处将不再讨论。
假设Internet 上有这样两条路由:
1.如果此路由的下一跳不可达,忽略此路由
2.评估Preferred-Value值,数值高的优先 (VRP5增加的新参数,指定对等体的首选值,数值越高越好 )
3.Local-Preference值最高的路由优先
4.聚合路由优先于非聚合路由
5.本地手动聚合路由的优先级高于本地自动聚合的路由
6.本地通过network命令引入的路由的优先级高于本地通过import-route命令引入的路由
7.评估AS路径的长度,最短的路径优先
8.比较Origin属性, IGP优于EGP,EGP优于Incomplete
9.选择MED较小的路由
10. EBGP路由优于IBGP路由
11. EBGP优先选择到BGP下一跳的IGP度量最低的路径
当以上全部相同,则为等价路由,可以负载分担
注:AS_PATH必须完全一致
当负载分担时,以下3条原则无效
13. 比较Cluster-List长度,短者优先
14. 比较Originator_ID(如果没有Originator_ID,则用Router ID比较),选择数值较小的路径
15. 比较对等体的IP地址,选择IP地址数值最小的路径
路由重分布:将一种路由选择协议获悉的路由信息告知另一种路由选择协议
特点:
存在问题:
注意事项:
Router(config-router)#redistribute protocol [process-id] [metric metric-value] [metric-type type-value] [match {internal | external 1 | external 2}] [tag tag-value] [route-map map-tag] [weight weight] [subnet]
将ospf、静态、直连重分配到rip:
R(config)#router rip
R(config-router)#redistribute ospf 1 metric 1
R(config-router)# redistribute static metric 1
R(config-router)# redistribute connected metric 1
注:rip 以跳数作度量,最大为15 跳
将rip 、静态、直连重分配到ospf:
R(config)#router ospf 1
R(config-router)#redistribute rip metric 30 subnets
R(config-router)# redistribute static metric 100 subnets
R(config-router)# redistribute connected metric 100 subnets
注:subnets 参数为重分配子网,不加即只重分配主类地址
路由选择协议 | 管理距离 | 路由选择协议 | 管理距离 |
---|---|---|---|
直连接口 | 0 | OSPF | 110 |
静态接口 | 1 | RIP | 120 |
EIGRP | 90 | BGP | 20 |
可信度:直连路由>静态路由>BGP>EIGRP>OSPF>RIP
Distance命令:
distance weight [address mask [access-list-number | name] ] [ip]
实例:
R(config)# router ospf 1
R(config-router)# network 172.16.0.0
R(config-router)# distance 255
R(config-router)# distance 110 192.168.31.0 0.0.0.255
默认度量值(种子度量值):路由重分布中,从外部重分布进来的路由的初始度量值
路由协议 | 默认种子度量值 |
---|---|
RIP | 16(无穷大) |
EIGRP | 225(无穷大) |
OSPF | BGP为1,其他为20 |
IS-IS | 0 |
BGP | IGP的度量值 |
default-metric 指令实例:
R(config)# router rip
R(config-router)# default-metric 4
R(config-router)# redistribute ospf 100 //当OSPF路由重分布到RIP中,默认度量值为4
R(config)# router ospf 100
R(config-router)# default-metirc 10
R(config-router)# redistribute rip //当RIP路由重分布到OSPF中,默认度量值为10
设备名 | 端口 | ip地址 | 掩码 | AS ID |
---|---|---|---|---|
R1 | f0/1 | 192.168.2.1 | 255.255.255.0 | 65101 |
f0/0 | 192.168.3.1 | 255.255.255.0 | ||
loopback0 | 1.1.1.1 | 255.255.255.0 | ||
R2 | f0/1 | 192.168.3.2 | 255.255.255.0 | 65101 |
f0/0 | 192.168.4.2 | 255.255.255.0 | ||
loopback0 | 2.2.2.2 | 255.255.255.0 | ||
R3 | f0/1 | 192.168.1.3 | 255.255.255.0 | 65100 |
f0/0 | 192.168.2.3 | 255.255.255.0 | ||
R4 | f0/1 | 192.168.1.4 | 255.255.255.0 | 65100 |
R5 | f0/1 | 192.168.4.5 | 255.255.255.0 | 65102 |
注:R1和R2由于其位置的特殊性(既是IBGP对等体,又是EBGP对等体),因此都配置环回口,作为IBGP的对等体ID。
实验步骤:
一、基本配置
(1)配置所有路由器的接口IP
(2)打开接口
二、 配置RIP(以R1为例)
R1(config)#router rip
R1(config-router)#version 2
R1(config-router)#no auto-summary
R1(config-router)#network 192.168.2.0
R1(config-router)#network 192.168.3.0
R1(config-router)#network 1.1.1.0
R1(config-router)#passive-interface f0/1
注:RIP只作用在所在区域内,不得跨区域应用(这是BGP的功能),因此在边界处(如R1的f0/1、R2的f0/0)设置被动端口。
三、在R1和R2之间、R1和R3之间开启抓包
根据拓扑图,我们选出的IBGP有R1、R2、R3、R5,EBGP有R1、R2
四、在R1上配置BGP
# 启用 BGP路由协议
R1(config)#router bgp 65101
# 配置BGP邻居,其中R2为IBGP对等体
R1(config-router)#neighbor 2.2.2.2 remote-as 65101
R1(config-router)#neighbor 2.2.2.2 update-source loopback0
# 配置R3为EBGP对等体
R1(config-router)#neighbor 192.168.2.3 remote-as 65100
# 路由重分布
R1(config-router)#redistribute rip
注:用loopback接口地址作为IBGP邻居标识时,必须指定邻居的更新源接口。
五、在R2上配置BGP
R2(config)#router bgp 65101
R2(config-router)#neighbor 1.1.1.1 remote-as 65101
R2(config-router)#neighbor 1.1.1.1 update-source loopback0
R2(config-router)#neighbor 192.168.4.5 remote-as 65102
R2(config-router)#redistribute rip
六、在R3上配置BGP
R3(config)#router bgp 65100
R3(config-router)#neighbor 192.168.2.1 remote-as 65101
R3(config-router)#redistribute rip
七、在R5上配置BGP
R5(config)#router bgp 65102
R5(config-router)#neighbor 192.168.4.2 remote-as 65101
R5(config-router)#redistribute rip
八、抓包分析
在wireshark的显示过滤器设置过滤条件:bgp,通过观察数据包分析BGP的工作机制
九、查看路由表、BGP路由表、BGP邻居路由器
R1#show ip route
R1#show ip bgp
R1#show ip bgp neighbors
❗ 转载请注明出处
作者:HinsCoder
博客链接: 作者博客主页