进入到BGP的学习,BGP相当有难度。。。
BGP协议(路径矢量协议):
默认优先级255
度量值:属性(总共有11条!)
BGP路由携带多种路径属性
路由器之间的1BGP会话基于TCP连接
TCP 179
触发式更新、路由增量更新
能够承载大批量的路由信息,支撑大规模网络
丰富的路由策略
支持MPLS/VPN
发起方以随机端口号发起,目的端口号就是179
BGP三张表
邻居表
BGP协议表
IP路由表
IPv4用的是BGP4
IPv6是BGP4+
AS(自治系统)
是指用运行相同路由策略和属于同一管理机构的一组网络及其路由器的集合
每个自治系统都有唯一的编号
AS号分为两类:32位的AS号和16位的AS号。在IPv4环境下,使用16位的AS号,范围是1~65535;并且,1~64511是公有的编号,64512~65534是私有的
而在IPv6环境下,使用32位的AS号,范围是1~4294967295。
对等体
运行BGP会话的路由器被称为发言者(BGP Speaker)
两个建立BGP会话的路由器互为对等体(peer)
BGP有两种对等体关系
EBGP:
两个不同AS之间的关系,必须满足以下条件
两个路由器AS不同
配置时,peer所指的对等体ip地址要求路由是可达的,并且TCP可以正常建立连接
IBGP:
相同AS的BGP路由器之间的BGP邻接关系
BGP对等体关系的建立过程
先启动BGP的一端像另一端发起TCP连接,也就是先启动的通过随机端口向另一端的179发起连接。
TCP的三次握手完成后,互发OPEN报文,其中携带的一些参数用于对等体建立,协商正常后互发keepalive报文,收到对端的keepalive后建立成功。以后定期发keepalive保持连接。
杂项。。
做一个简单的拓扑
将R1的建立邻居加一个需要密码认证
而我们的R2先不改,看看这样会怎么样
我们过一段时间后可以看到NOTIFICATION报文,也就是出错了,此时我们看看邻居状态变成了IDLE
而在我们将R2也设置好密码后,状态逐渐正常。
open报文中携带的信息:
My Autonomous System:自己的AS号
Hold time:用于协商后续keepalive的发送时间
比如HT是180,那么发送时间就是180/3=60s
BGP Identifier:自己的route id
注意,BGP很特殊,需要在BGP进程中也配置route id
关系建立好之后,BGP路由器发送BGP Update通告路由到对等体
TCP连接源地址:
缺省时,BGP使用报文出接口作为TCP连接的本地接口
在部署IBGP对等体关系时,可以使用环回地址,因为较为稳定,可以借助AS内的冗余拓扑保证稳定性
在部署EBGP对等体关系时,使用直连接口的ip地址作为源地址,要是用环回地址的话要注意EBGP多跳问题。
BGP五类报文
BGP建立邻居的六种状态
BGP路由注入
不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,通过update报文传给对等体
Network
network 10.1.0.0 24
import-route
BGP路由聚合
aggregate 10.1.0.0 22 detail-supressed
这种聚合是在路由表中生成一个聚合路由,detail-supressed是为了抑制明细,只要那个聚合后的。
summary automatic
自动聚合
BGP通告原则
BGP通告只会发布最优且有效的路由
从EBGP对等体收到的路由,会发布给所有对等体
IBGP水平分割:从IBGP对等体获得的路由,不会发给IBGP对等体(防环?),那么为了保证所有的IBGP路由器都能学到完整的BGP路由,我们需要建立全互联,相当麻烦呢。。。。
BGP同步规则:
当一台路由器从自己的IBGP对等体学习了一条BGP路由(这类被称为IBGP路由)时,他不能把这个路由通告给自己的EBGP对等体,除非他又从IGP协议中学习到了这个路由才行。这个主要是为了避免BGP路由黑洞问题,注意这个方法是避免,不是解决问题。(不过嘛,现在默认关闭了)
BGP防环机制
AS内:
IBGP水平分割
AS间:
As_PATH
AS路径属性。是路由经过的AS的序列,即列出此路由在传递过程中经过了哪些AS。它可以防止路由循环,并用于路由的过滤和选择。
如何防止环路??
AS_PATH属性列表以相反的顺序列出了一条前缀先后经过的AS,每经过的一个AS,该AS号会被放入AS_PATH列表的最前面(开始处)。如果在路由更新消息中发现自己所在的AS号已经被包含在AS_PATH属性中,则表明该路由之前曾经通过该AS或者是源自于该AS,为避免路由环路,将此路由信息丢弃。
但是这样也会出现一个问题,假如有两个AS100区域,他们中间隔了另一个AS,此时由于AS_PATH机制,一边的AS100想给另一端发消息,是不会接收的。
可以通过 allow-as-loop取消EBGP的环路检测。
修改AS_PATH:
apply as-path 300 additive
在原有的AS_PATH上追加AS 300
apply as-path 400 overwrite
将已有的AS_PATH替换成400
apply as-path none overwrite
将已有的AS_PATH清空
AS_Path的类型有常用的AS_SEQENCE(有序),以及AS_SET(无序)。
AS_SEQENCE表示方法:AS_PATH=300 200 100
AS_SET表示方法:AS_PATH=300 {100,200}
路由反射器:
前面提到了IBGP中的水平分割问题,当路由器数量一多起来,全互联之后路由器要维护非常多的TCP、BGP连接,而且可扩展性差,牵一发而动全身。
这个时候,就需要路由反射器了!!!!
引入路由反射器之后存在两种角色:
RR(Route Reflector):路由反射器
Client:RR客户端
路由反射器的作用也很易懂,就是把他学习到的路由反射出去,这样IBGP路由在AS内不需要建立全连接也可以传播了。非常的方便
将一台路由器指定为RR后,还需要指定其Client,Client不需要做任何配置,他并不知道网络中存在RR。
如果RR从自己的非客户端对等体学到了一条IBGP路由,他会把IBGP路由反射给所有客户端
如果是从客户端学习到的呢?则反射给非客户端以及其他的客户端
如果从EBGP对等体学习到了路由,就发给所有客户端、非客户端IBGP对等体
RR防环机制:
Originator ID:RR将一条BGP路由反射出去时,会加上Originator ID,这个值是本地AS中通告该路由的BGP路由器的route id
如果AS内有多个RR,Originator ID由第一个RR创建,并且不会被后续的RR更改
如果BGP路由器学习到了一条携带Originator ID的IBGP路由,而且Originator ID还和自己的route id一样,他就会忽略该条路由的更新
Cluster(路由反射簇):
反射簇包括了RR以及他的Client,一个AS内可以有多个反射簇
每一个簇都有唯一的簇ID,在缺省的时候是RR的BGP route id
一条路由被反射器反射后,该RR的簇ID就会被添加到路由的Cluster_list属性中。
RR收到一条由Cluster_list属性的BGP路由,并且该属性中有该簇的簇ID时,RR认为这条路由存在环路,会忽略掉此路由的更新(很像AS_PATH)
声明为客户端
peer 10.0.2.2 reflect-client
BGP路径属性
1.公认属性
公认属性是所有BGP路由器都必须能识别的属性
1.1公认必遵(Origin,AS_Path,Next_hop)
必须包括在每个Update消息里
Origin:
起源名称 IGP 标记 i 如果路由是由始发的BGP路由器使用network注入到BGP的,那么该BGP路由的属性就是IGP
起源名称 EGP 标记 e 如果路由是通过EGP学到的,那属性就是EGP
起源名称 Incomplete 标记 ? 如果路由是其他方式学到的,比如说路由引入这样子,那就是Incomplete。
BGP按照如下顺序选择优选路由:IGP>EGP>Incomplete
Next_hop:用于指定到达目标网络的下一跳地址
路由器学习到BGP路由时,要对这个属性进行检查,该属性值必须在本地路由上是可达的,不可达的话,这条BGP路由就不可用了
不同场景下,设备对BGP路由的缺省next_hop属性的设置规则如下:
路由器将BGP路由通告给自己的EBGP对等体时,把该路由的next_hop设为自己的更新源IP地址。
路由器在收到EBGP对等体所通告的BGP路由后,在将路由传递给自己的IBGP对等体时,会保持路由的next_hop不变
路由器收到某条BGP路由,该路由的next_hop与EBGP对等体在同一网段,那该条路由的next_hop地址将保持不变并传递给它的BGP对等体
next-hop-local 向IBGP通告路由时,把下一跳改为自己的TCP连接源地址
next-hop-invariable 向EBGP对等体通告路由时,不改变下一跳
1.2公认任意(Local_Preference,)
可能包括在某些Update消息里
Local_Preference(本地优先级属性):
用于告诉AS中的路由器,哪条路径是离开本AS的首选路径。
该属性值越大,BGP路由越优。缺省时的值为100
该属性只能给IBGP对等体。
next-hop-local
Atomic_aggregate:
作用于警告下游该路由为汇总路由,当路由器收到一条BGP路由更新且发现该条路由携带Atomic_Aggregate属性时,它便知道该条路由可能出现了路径属性的丢失,此时该路由器把这条路由再通告给其他对等体时,需保留路由的Atomic_Aggregate属性。
2.可选属性
可选属性不需要都被BGP路由器所识别
2.1可选过渡(Aggregator,Community)
BGP设备不识别此类属性,依然会接受该类属性并通告给其他对等体
Aggregator:
标记路由聚合行为发生在哪个AS及哪台BGP路由器上。
Community:
给某些路由分配一个特定的属性值,之后就可以基于这个属性值而不是网络前缀或掩码信息来匹配路由并执行相应的路由策略了。
AA:NN格式,AA是AS号,NN是自定义的一个编号。
2.2可选非过渡(MED,Cluster-List,Originator-ID)
BGP设备不识别此类属性,会忽略该类属性且不通告给其他对等体
MED(多出口鉴别器):
向外部对等体指出进入本AS的首选路径,就是,如果有多个口可以进本AS,AS可以通过MED动态地影响其他AS选择进入的路径
MED属性值越小,BGP路由越优
主要用于在AS间影响BGP的选路,MED被传递給EBGP对等体后,对等体在其AS内传递路由时,携带这个MED值,但是将路由再次传递给其EBGP对等体时,缺省不会携带MED属性。
注意!!!
缺省情况下,路由器只会去比较同一个相邻AS的BGP路由的MED,如果去往同一地址的BGP路由是来自于不同的相邻AS,他就不会去比较了。。。。
怎么判断一台路由器将路由通告给EBGP对等体时,是否携带MED属性?
如果该BGP路由是本地始发(通过network和import-route引入),则缺省携带MED发送给EBGP对等体。
如果该BGP路由是从BGP对等体学到的,那么该路由传递给EBGP对等体时缺省不会携带MED。
在IBGP对等体之间传递路由时,MED会被保留并传递,除非有部署策略,否则MED在传递时不会被改变也不丢失。
default med修改MED值,但是这个只对本设备上用import-route引入的路由和BGP的聚合路由(aggregate)生效!!!!!
Preferred-Value(协议首选值):
华为设备特有的属性,该属性只在本地有效。当BGP路由表中存在相同目的地的路由时,将优先选择Preferred-Value高的路由
0~65535
只能在路由器本地配置,也只影响本设备的路由优选。不会传递给任何BGP对等体
BGP路由优选规则
当到达同一目的网段有多条可达路由时,路由优选次序如下
1.优选Preferred-Value属性值最大的路由
2.优选Local_Preference属性值最大的路由
3.本地始发的路由优于从其他对等体学习到的路由,本地始发路由的优先级:手动聚合>自动聚合>network>import>从对等体学到的
4.优选AS_Path属性值最短的路由
5.优选Origin属性最优的路由,优先级从高到低:IGP、EGP、incomplete
6.优选MED值最小的路由
7.优选从EBGP对等体学到的路由
8.优选到next_hop的IGP度量值最小的路由
如果前8条属性全部一样,就可以形成负载分担
9.优选Cluster_ID最多的路由
10.优选Orginator_ID(Router_ID)最小的设备通告的路由
11.优选具有最小IP地址的对等体通告的路由
BGP-4扩展
为了支持多种网络层协议,BGP-4要增加两种能力:
关联其他网络层协议下一跳信息的能力
关联其他网络层协议NLRI的能力
统称为地址族
为了实现向后兼容性,协议规定MP-BGP增加两种新属性,MP_REACH_NLRI和MP_UNREACH_NLRI,用于表达可达的目的信息和不可达的。这两种属性都属于可选非过渡
第一个在BGP Update报文中,用来通告可达路由给BGP邻居,也可以通告可达路的路由的下一跳给BGP邻居
第二个也在BGP Update中,用于撤销不可达路由
MPLS(多协议标记交换)
位于TCP/IP协议栈中的2层和3层之间。在两层之间增加了MPLS头部,报文转发直接基于MPLS头部。以标签(MPLS头部)代替了IP转发,实现了基于标签的快速转发。
VPLS (虚拟专用局域网业务)
基于以太网的二层VPN技术,给MPLS提供了类似LAN的业务,允许用户可以从多个地址位置接入网络,相互访问
传统L2VPN例如VPLS,给用户提供了远程站点之间的二层连接服务,组建二层交换网,透传以太报文。传统的L2VPN中对于远端MAC地址的学习依靠ARP广播泛洪,PE设备需要承载广播流量。广播占用较多接口带宽。
EVPN
控制平面采用MP-BGP,数据平面支持MPLS LSPs或者是IP/GRE tunneling
EVPN引入了控制面来学习MAC和IP指导数据转发,实现了转控分离
控制平面:PE之间交互BGP EVPN报文,传递MAC和IP地址
数据平面:由IP隧道和MPLS标签转发路径组成数据转发路径。只负责数据的转发,不需要广播泛洪学习MAC地址