笔记:
1、BGP基础:
内部网关协议IGP(Interior Gateway Protocol):在一个自治系统内部运行。
RIP、 OSPF、ISIS为 常见的 IGP协议。
外部网关协议EGP(Exterior Gateway Protocol):运行于不同自治系统之间。
BGP 是目前最常用的EGP协 议。
AS—自治系统—由单一机构或者组织管理的一系列IP网络及设备的集合:
1. OSPF、IS-IS等IGP路由协议在组织机构网络内部广泛应用,随着网络规模扩大,网络中路由数量不 断 增长,IGP已无法管理大规模网络,AS的概念由此诞生。
2. AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IGP可能存在暴露AS内部的网 络信息的 风险。 --- 自治管理
3. 整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大。 --- 范围太大,协议跑不过来
为了区分不同的AS,网络世界IANA提出了AS号---0-65535 0和65535
一般做保留AS号1-65534 (真正允许运营商使用1-64511---公有AS号,64512-65534---私有AS号)
拓展AS号:将原本16位AS号拓展到32位
2、BGP的一些特性
高可控性---BGP设计了很多路径属性,可以通过路由策略关联这些属性达到路由控制的效果
高可靠性---使用TCP传输数据
*AS-BY-AS---BGP把一个AS看作一个整体
对等体PEER
EBGP对等体---一般建议采用直连建立对等体
IBGP对等体----一般采用非直连建立对等体
BGP为了实现这两个规则:BGP规定EBGP对等体之间发送的数据包中携带的TTL值为1,而IBGP对等体之间传递的数据包TTL值为255
3、相同点:
都是实现路由信息的交换、学习
都能实现路由的功能
不同点:
BGP一般用于大型网络,可容纳的路由信息更多;而IGP协议,对于路由条目的存储量是有限的,比如OSPF协议,最多也只能容纳1W条路由;
IGP是内部网关协议,在AS内部实现路由信息的交换;BGP是边界网关协议,在AS之间实现路由信息的交换;
BGP的实现,需要IGP作为其底层的通信基础;
BGP是建立的可靠的TCP基础上的,端口号为179;
IGP的设计重点是对路由的学习与交换,发现路由等,而BGP的设计,主要是为了控制路由的传播,即进行路径选择,BGP有丰富的选路策略,与其说BGP是一个路由协议,倒不如说BGP是一个路径选择协议
4、BGP的数据包: BGP存在5种数据包:
Open包
Keeplive包
Update包
notification包
Router-refresh包------其中常用的是前面四种,最后一种用于改变路由策略变更后请求对等体重新发送路由 信息(前提:对等体双方都支持路由刷新的功能)----用来同步策略的。
5、bgp的建邻过程:
首先BGP发现邻居的过程变为由人工指定完成,主要原因在于TCP发送数据包之前需要 建立会话通路,通路建立完成后才会发送数据包,所以不能之间通过某种数据包自动的 发现邻居,因为在邻居建立之前、没有发送数据包的条件,所以需要人工指定。
BGP头部:
OPEN报文:
保活时间:在多长时间内必须收到对方的Keepalive包或者UPdate报文,否则会视为该对等体无效,这个时 间需要双方进行协商,可以不同,但是会按照更小的值执行,系统默认180秒。
路由器标识符:Router-ID区分和标定不同的BGP路由器,由32位二进制构成,规则和OSPF生成规则一致, 按照IP地址格式,可以手工指定,也可以设备自动生成(生成规则:先看换回再看接口,同样选择最大的作 为设备R-ID),这个参数会在Open包中携带,发送给对端后,对端会检测这个R-ID,必须和本地R-ID不同, 否则会建邻失败。-----只需要和自身RID不冲突即可.
可选参数长度:指示了BGP报文中可选参数的长度
可选参数:Open包中包含多个可选参数,主要用于宣告及协商BGP对等体的某些能力特征。
KEEPALIVE报文:
UPDATE报文:
BGP路由器使用Update报文传递路由信息,值得注意的是,BGP在一个Update报文中通告路由时,如果这些BGP路由拥有不同的路径属性,BGP将使用不同的Update包进行通告。路径属性是BGP传递路由的关键选路因素。
网络层可达信息—记录的是通告的网段信息。
notification报文:
当检测到错误信息时使用notification报文通告给对等体,比如说由于某些原因导致BGP建邻失败(如,Open包中参数协商不成功---比如说RID和本地自身RID重复)则对等体会发送一个notification 报文来告知邻居建立失败的原因,方便排错---->同时如果邻居建立完成后,因为一些原因断开,同样会发送 notification报文通告,相当于一种告警机制。
当RID改变,首先TCP连接会断开,发送四次挥手报文。 之后,TCP会重新尝试建立三次握手的连接,连接完成后,发送Open包进行协商,此时,没有keepalive包 (或者UPdate)进行确认,就证明Open协商失败,TCP将断开连接,之后发送RST报文,表明不是正常的断开连接。同时发送notification报文告知失败原因
6、BGP的状态机
Idle状态下,启动BGP协议后必须指定建立对等体的目标之后,进入下一个状态。必须路由可达(依靠IGP协议或者静态,直连)
Connet状态下BGP对等体之间开始建立TCP会话连接。如果TCP会话建立成功则进入OpenSent状态,如果TCP会话建立失败则进入Active状态。
如果TCP会话(三次握手)建立成功,则进入OpenSent状态下,开始发送OPEN报文去建立BGP对等体关系
如果认可对等体发过来的OPEN报文中的参数,首先会回复一个Keepalive报文用来确认open报文的参数我已经认可。并且进入OpenConfirm状态
OpenConfirm状态---如果收到对等体发送的Keepalive报文则进入最终状态Established。
7、BGP的工作过程
根据我们之前对BGP基础的了解,我们下面总结以下BGP的工作过程。
1,基于IGP实现IP可达
2,指定邻居关系,邻居之间单播传输,通过三次握手,建立TCP会话通道。BGP之后所有的通信都将基于 TCP会话通道来传输。包括提供传输的可靠性。
3,使用OPEN报文和Keeplive报文进行邻居关系的建立。OPEN报文用来携带建邻使用的参数,keeplive 报文用于参数的确认。最终完成对等体关系的建立。生成邻居表。
4,使用update报文来共享路由信息。信息中将携带目标网络号,掩码及路径属性;之后,将发送以及收 集到的路由信息记录在一张表中 --- BGP表。
5,之后,将BGP表中最优的路由信息(通过路由属性选择的结果)加载到路由表中。
6,收敛完成后,将使用keeplive报文进行周期保活,默认的保活时间为180S,发送周期为60S。
7,如果出现错误,将使用notification报文进行告警。
8,若出现结构突变,则将使用update报进行触发更新。
8、路由黑洞:
原因:控制层面的可达
数据层面实际不可达
IGP内部存在没有运行BGP的设备,当访问BGP网段的流量来到这些设备之后,由于控制层面可达,数据层面不可达(这些设备没有运行BGP,没有BGP网段的路由信息),那么将丢弃这些流量。
9、环路问题
BGP在解决路由环路问题是采取的方法我们也称为 ---- 水平分割
BGP的水平分割又分为两种,一种是专门针对EBGP对等体的EBGP水平分割,以及一个专门针对IBGP对等体的IBGP水平分割 EBGP水平分割
EBGP的水平分割 --- 针对EBGP对等体之间可能出现的环路问题所提供的解决方案
IBGP水平分割
IBGP的水平分割 --- 针对IBGP对等体之间可能出现的环路问题所提供的解决方案
10、BGP的基本配置:
[R]bgp 100 -----启动BGP协议,并指定自身AS号
[R-bgp]router-id 1.1.1.1---手工配置BGPRID
[R-bgp]peer 12.0.0.2 as-number 200 -----直连建邻,指定建邻的IP地址和对应的as号
[R]display bgp peer --查看BGP邻居关系(BGP的邻居表)
IBGP之间使用环回建邻:
[r2]bgp 200
[r2-bgp]router-id 2.2.2.2
[r2-bgp]peer 3.3.3.3 as-number 200
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 ---注意环回建邻必须改变更新源地址,地址不一致将导致建邻失败
EBGP对等体直接使用环回建邻
[r5]ip route-static 4.4.4.0 24 45.0.0.1-----必须实现路由可达(建议使用静态)
[r5]bgp 300
[r5-bgp]peer 4.4.4.4 as-number 200
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack0---使用环回建邻注意:必须修改更新源
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2----修改EBGP数据包TTL值
[r5-bgp]peer 4.4.4.4 ebgp-max-hop ----默认直接回车将修改TTL值为255
BGP的路由发布
[R1-bgp]network 1.1.1.0 24------宣告含义仅发布路由信息,并且注意:只能发布路由表中存在的路由信息
[R1]display bgp routing-table ----查看BGP表---记录发布的和接收到的所有BGP路由信息
[r2-bgp]peer 3.3.3.3 next-hop-local(这个命令只是把外面传进来的路由的下一跳改成自己)
11、路径属性:
*-- 代表可用。 --- 所有设备收到路由条目后,首先会根据下一跳属性中的参数来查询本地路由表,查看该地址的可达性。如果,本地路由表中可达,则代表该路由信息可用;如果不可达,则该路由信息将不可用。 ---- 如果该路由条目不可用,则将不会参与路由信息的优选。
>--代表优选。 ---- 当收到多条到达相同网段的路由信息时,并且都可用,则将依据属性在其中选择最优的进行 加表及传递。
i-- 状态码为I,代表该路由信息是通过IBGP对等体学到的。
起源码一共存在三种
I --- 代表这条路由信息起源于AS内部使用network通告出来的。
e --- 代表来自于EGP协议。
? --- 除了以上两种方式,其他方式获取的路由信息都是?
12、路由策略、BGP的路由聚合-----自动聚合 手工聚合:
自动聚合 :
自动聚合的缺点: 自动聚合功能只能针对重发布的路由条目生效
自动聚合只能将明细路由直接汇总到主类。 --- 样将会产生巨大的路由黑洞。所以,华为设备默认是关闭自动汇总功能的。
配置命令 [r1-bgp]summary automatic --- 自动聚合的开启命令
Info: Automatic summarization is valid only for the routes imported through the import-route command. --- 命令执行后会出现信息提示,说明只能针对重发布的路由条目生效。
汇总之后,也会在BGP中发布路由信息,下一跳指向本地环回地址,最终也会加表,出接口将递 归到空接口。效果就是将在黑洞路由器上自动生成一条到达汇总的空接口路由用来防环。
手工聚合:
因为自动聚合存在上述的两个缺点,所以,想要对路由信息进行精准的汇总,则需要使用到手工聚合。
手工聚合所使用的命令为 --- aggregate
[R1]bgp 100
[R1-bgp]aggregate 172.16.0.016
这里实际上存在两个问题第—个问题是配置aggregate 172.16.0.0 16命令后,虽然R1的确产生了汇总路由,但是 该汇总路由下的明细路由依然会被通告,也就是说R2将会学172.16.1.0/24、172.16.2.0/24路由以及汇总路由172.16.0.0/16,因此实际上在R1上所做的路由汇总配置意义并不大,R1所通告的路由前缀数量并未减少,R2的路由表规模也并未减小。另一个问题是,R1所产生的这条汇总路由,由于丢失了明细路由的路径信息(尤其是 AS_Path属性),因此它们会被通告给R3并被它接收,而且加载到路由表,这样就产生了路由环路的隐患。
路由策略:
1.创建前缀列表抓取想要发布的路由网段
[R1]ip ip-prefix aaa permit 172.16.0.0 16 greater-equal 24 less-equal 24
2.创建路由策略
[R1]route-policy aaa permit node 10 ----大的方向一定选择运行,否则视为拒绝发布这些匹配到的网段
route-policy aaa permit node 10
if-match ip-prefix aaa-----匹配前缀列表抓取的流量
BGP实验:
1、IP配置:
R1:
R2:
R3:
R4:
R5:
2、配置ospf环境:
R2:
R3:
R4:
3、建立bgp对等关系:(操作过程详解如笔记)
R1:
R2:
R3:
R4:
R5:
4、检测对等体:(display bgp peer)检测R4为例
5、发布路由(peer next-hop-local)
如上图进行相应的操作
6、发布静态及汇总路由(R1)
[r2-bgp]import-route ospf 1
[R1]ip ip-prefix aaa permit 172.16.0.0 16 greater-equal 24 less-equal 24
[R1]route-policy aaa permit node 10
[R1-route-policy]if-match ip-prefix aaa
[R1-bgp]import-route direct route-policy aaa
检测:
R4能与R1进行互通。