BGP:外部网关路由协议
AS:自治系统
由同一家组织或机构统一管理使用同一选路策略的路由器的一组集合
AS号范围:
1、2字节AS号:0----65535
公有:由IANA组织统一进行分配使用,全网唯一,1--64511
私有:可以在私网当中直接使用,64512--65534
2、4字节AS号:0----4294967294
公有:1---41999999999
私网:4200000000-4294967294
BGP特征:
1、属于应用层路由协议,基于TCP,端口号为179
2、只支持触发更新,不支持周期更新
3、可以用于承载百万级以上的路由条目
4、具有丰富的路径属性,可以灵活控制选路
5、提供路由聚合和路由衰减功能,防止路由震荡
6、BGP支持MPLS VPN的应用
7、建立BGP会话的路由器互相称之为对等体
8、扩展性较好,MPLS VPN TE及SR TE等主流协议等需要BGP的支持
9、支持认证和GTSM功能,保障对等体关系建立的可靠性
BGP对等体邻居关系:
EBGP:建立在不同AS之间的对等体邻居关系
两台路由器处于不同的AS,建立对等体邻居关系时,需要协商AS号,如果两端的AS号一致,则无法建立EBGP邻居关系
IBGP:在一个AS内建立的BGP对等关系
注:
1、如果建立EBGP对等体,推荐使用物理接口作为对等体的更新源地址
EBGP建立TCP连接时,默认IP头部中的TTL值为1,所以需要使用物理接口建立对等体关系,
如果需要使用环回口建立,则需要将TTL值进行修改
修改命令:peer 2.2.2.2 ebgp-max-hop 1--255,默认不跟数值时为255
2、如果建立IBGP对等体,推荐使用环回口作为对等体的更新源地址
可以更好的冗余,只要通过IGP协议计算,对方更新源地址可达,可以存在多个路径
BGP对等建立过程:
R1<----------------------->R2
1、R1与R2之间建立TCP连接,使用三次握手进行建立
2、R1和R2之间互相发送open(打开报文),用于协商建立对等体关系的参数
参数包括自身所在AS的AS号、router-id、hold time(保活时间)默认为3倍的keepalive时间
3、协商完成后,互相发送keepalive报文,标识对等关系建立,后续周期发送keepalive报文
建立TCP连接的更新源地址:
1、默认使用去往目的最近接口的IP地址
2、两端配置对等邻居关系时,需要peer对方的更新源地址
3、可以使用命令修改更新源地址:peer 33.1.1.1 connect-interface LoopBack0//发送建立TCP连接的TCP报文使用loopback0口的IP地址作为源地址使用
BGP报文:
BGP通用头部:所有的BGP报文都需要携带的通用头部
Marker:用于检验BGP报文,默认为全1,也就是全F
length:长度,整个BGP报文的长度,包括通用头部和专属头部
type:用于标识具体的BGP报文
open:打开报文
version:版本,用于携带本地使用的BGP版本,现网默认使用4+
My AS:自身所在的AS号,用于协商AS号配置是否正确
Hold time:保活时间,默认为180S,为三倍的keepalive时间,可以设置为0,当设置为0时,将不在发送 keepalive报文,无法判断对等体的具体状态
BGP identifier:BGP对等体标识,发送者的router-id,如果两个open报文中的identifier字段一致,则协商失败
Optional Parameters length:可选参数长度,如果为0,则标识没有携带任何可选能力
Optional Parameters:可选参数,采用TLV结构进行封装,包括支持地址簇能力的协商
Update:更新报文
Unfeasible routes length:不可达路由长度,用于表示需要撤销的路由长度,当为0时,表示没有需要撤销的路由
Withdrawn Routes:携带需要撤销的路由前缀信息等等,采用可变长进行编排
Total Path Attribute Length:路径属性长度,当值为0时,表示没有通告路由及路由属性
Path Attribute:路径属性,携带的可达路由的路径属性,需要将路由的所有路径属性全部携带
采用TLV结构进行承载
NLRI:网络层路由可达信息,需要传递的的可达路由,一次可以携带多个前缀和掩码信息(多条路由),但是需要这些路由的路径属性一致,否则将使用 不同的update报文进行携带
Notification:差错报文
Error code:错误代码,指出错误的类型
Error subcode:错误子代码,用于指出具体的错误
Data:具体的错误数据
Keepalive:保活报文
只有BGP的通用头部,用于减小报文自身的大小,需要在链路上周期传递,防止由于传递的keepalive报文过大导致链路拥塞
保活报文的作用:用于维护对等体之间的关系,当三个周期没有收到对等发送的keep alive报文后,则认为对等体邻居失效,将邻居关系进行删除
Route refresh:路由刷新报文,用于请求对等刷新对应地址簇的路由信息
AFI:用于表示地址簇信息,为IPv4地址簇或者IPv6地址簇等等
Rse.:保留,全为0,没有任何意义
SAFI:用于标识子地址簇,表示需要刷新的是IPv4单播、组播、IPv6单播、组播等子地址簇
BGP的状态机:
停留在某些状态机下错误的原因:
1、停留在idle状态:
可能原因为:
1、底层TCP路由不可达,导致无法发送TCP的SYN报文
2、本地是否配置了禁用TCP的179端口,导致TCP的SYN报文无法发出
2、停留在connect状态:
可能原因是:能够发出TCP建立连接报文,但是无法到达或者无法收到对端发送的回应
3、停留在active状态:
可能原因是:BGP认证不通过,注:BGP的认证信息携带在TCP的可选项中
建立BGP对等体的流程:
1、配置了BGP的路由会出现idle状态,初始化状态
2、当出现一个start事件后,状态机会向connect状态进行迁移,注start状态可能是管理员手工配置了BGP对等体
等事件
3、connect状态下,发送TCP 的SYN报文,去尝试建立TCP连接关系
1、当TCP连接建立失败后,会进入到active状态,在active状态下,一直尝试建立TCP连接,并且启动计时器,为32S,当32S结束后,TCP连接关系依旧没有建立,则回到connect状态
2、当TCP连接成功,则进入到opensent状态
4、opensent状态下,发送open报文,用于协商建立BGP对等体关系的参数,当参数都协商完成,并且通过时,将进入到openconfirm状态
5、在openconfirm状态下,发送keepalive报文,并且等待对方发送的keepalive报文
6、在openconfirm状态下,收到来自对方发送的keepalive报文后,将进入到established。
注意:在任意状态下,收到了对方发送的notification报文后,将直接进入到idle状态
BGP路由的生成方式:
1、通过network的方式进行宣告进入BGP中,起源属性为IGP,标识符为I
2、通过import-route方式引入到BGP中,起源属性为incomplete,标识符为?
3、通过EGP学习到的路由,起源属性为EGP,标识符为e,现网不存EGP路由,只能通过策略修改得到
路由优先级:i > e > ?
BGP路由通告原则:
1、只将自身最优路由发布给对等体邻居关系
2、从EBGP对等体学习到的路由会发布给所有的对等体邻居
3、从IBGP学习到的路由不会发布给其他的IBGP对等体(IBGP水平分割原则)
4、从IBGP对等体邻居学习到的路由必须也从IGP协议中学习到,否则认为是无效路由,不会再发布给其他的EBGP对等体,华为设备默认关闭,并且用不开启,思科设备可以开启
BGP的路径属性:
1、公认属性:所有支持BGP协议的路由都必须识别该属性
公认必遵:所有路由器必须识别,每个update报文中必须携带
1、as-path:用于记录路由所经过的AS数量
当将路由传递给EBGP对等体时(出本AS),将本AS的AS号加入到as-path的最左侧,
当将路由传递给IBGP对等体时(在AS内流转),不对该属性做任何操作
作用:1、用于路由防环 2、用于选路
1、防环,当接收到的路由的as-path中有自己所在AS的AS号,则不接收该路由信息
2、选路,通过比较AS的长度,判断路由经过的AS数量,以经过AS数量少的为优
优选原则:优选as-path短的路由
as-path类型:
有序:路由经过多少个AS,则as-path就记录了多个AS号
无序:由于在某个AS上的路由器做了路由聚合动作,导致子路由或从路由丢失了as-path属性,使用括号将子路由的as-path包含的as号记录,通过括号外的第一个AS号记录聚合者所在AS位置信息
修改as-path属性:
additive:添加AS号操作
在as-path的最左边进行添加AS号动作,使得控制as-path的长度完成对路由选路的操作
注:添加AS号时,尽量添加自己所在AS,防止由于as-path防环导致其他AS无法接收该路由
配置命令
route-policy as-add permit node 10 //创建路由策略
if-match ip-prefix host //条件匹配
apply as-path 100 100 100 100 100 100 additive //将符合条件的路由as-path做添加操作
peer 10.1.12.2 route-policy as-add export //在将路由传递给对方的出方向做操作
overwrite:替换as-path
将as-path属性全部替换为修改的AS号。
注:替换时,尽量使用自己的AS号进行替换,防止路由传出AS时,出现其他路由器不接收该路由
route-policy as-over permit node 10 //创建路由策略
if-match ip-prefix host //添加匹配
apply as-path 200 overwrite //将符合条件的路由as-path做替换操作
peer 33.1.1.1 route-policy as-add export //在将路由传递给对方的出方向做操作
none:清空as-path
将as-path属性进行清空操作,将所有的AS号进行删除
谨慎操作
2、origin:起源属性
用于标识BGP路由的来源
当通过多种方式学习到同一条路由时,优选原则:i > e > ?
3、next-hop:下一跳属性
用于告知对等体邻居去往目的网段下一跳地址
默认操作:
1、从本地引入的路由传递给BGP对等体邻居时,会将下一跳属性变为与对等体建立邻居关系的地址
2、将BGP路由传递给EBGP邻居时,会将下一跳属性修改为自己与对方建立邻居的更新源地址
3、从EBGP学习到的路由传递给IBGP对等体时,不会改变下一跳属性的地址(将AS看作一台路由器,路由器认为AS外的路由都不安全的路由,所有不会改变下一跳属性)
4、如果路由器将路由传递给EBGP对等体时,下一跳属性中的地址和自己与EBGP建立邻居关系的更新源地址处于同一网段,则不会修改下一跳地址属性,防止次优路径
注:当无法去往下一跳地址时,则认为此路由不可达,为无效路由
当下一跳属于目的网段时,则认为该路由无效
当出现下一跳不可达的情况下,可以通过命令将下一跳属性修改为本地(与对等建立邻居的更新源地址)
配置命令:peer 4.4.4.4 next-hop-local
当出现次优路径,或者多个地址簇情况下,想要将下一跳属性不改变直接传递到对等,可以通过命令,使得下一跳属性不变
配置命令:peer 10.1.12.1 next-hop-invariable
公认任意:所有路由器必须识别,如果有需求则选择携带在update报文中,可以选择不携带
1、local-preference:本地优先级
只能在AS内进行传递,不允许传出AS
将路由传递给IBGP邻居时,可以进行携带,当没有做策略时,该属性会传递到整个AS内
将路由传递给EBGP邻居时,路由器会将该属性进行剥离,如果携带该属性传递给EBGP邻居,则会出现错误信息,可能发送notification报文,回到idle状态
本地优先级默认值为100,可以通过命令进行修改默认值在BGP视图下default local-preference 具体数值
路由优选原则:优选本地优先级值大的路由
修改配置命令:
route-policy local-pre permit node 10 创建节点
if-match ip-prefix local-pre //匹配符合条件的路由
apply local-preference 1000 //执行修改本地优先级操作
2、Atomic_aggregate:路由聚合标识
作用:用于告知其他AS的路由器,此路由为聚合路由,应当防止环路产生
为公认任意属性,当路由携带此属性后,在路径进行传递时,将一直携带此属性标识
2、可选属性:路由可以识别,也可以不识别
可选过渡:路由器如果识别不了该属性,则将路由传递给其他BGP对等体时,将属性直接携带。不改变其值
1、community:团体属性
作用类似于tag值,用于标记一条路由或者具有相同特征的一组路由
方便后对相同路由执行操作时,用于直接匹配
格式采用AA:NN的形式进行配置
AA为产生该路由的AS号或者为该路由打上团体属性的AS号
NN为AS中的路由标记
公认的团体属有:
Internet(四通八达):具有该团体属性的路由,按照通告原则发送给相应的对等体邻居,团体属性为0
no-advertise(不广告):具有该属性的路由不会发布给任何BGP对等体,也就是只有自己存在该路由
no-export(不外出):具有该属性的路由不出传递给任何EBGP对等体,也就是该路由只能在AS内进行传递
no-export-subconfed(不出房间门):具有该属性的路由不会传递给任何EBGP邻居包括子AS的EBGP邻居,也就是该路由只能在子AS内进行传递
自定义团体属性:根据自己的需求对路由进行团体属性标记,后续根据团体属性进行操作
2、aggregator:聚合者标识
用于在路由执行聚合动作以后,标识聚合者所在AS号以及聚合者是哪台设备做的聚合
为可选过渡属性,当路由器识别不了或者能识别的情况下,在将路由传递给其他设备时,都会将该属性不变的情况下传递,用于告知全网设备,聚合者所在及聚合者的身份信息,用路由器的router-id进行标识,并携带聚合者的AS号
可选非过渡:路由器如果不识别该属性,则将路由传递给其他BGP对等体时,将该属性直接删除,再进行传递
1、MED:多出口鉴别器
相当于AS之间的开销或者BGP的开销
默认情况下,在进行路由引入操作时,MED值会继承路由器去往目的网段的IGP开销
MED值不允许跨AS进行传递,当收到从EBGP学习到的路由后,将其再次传递给EBGP邻居时,会将MED值进行剥离,传递个IBGP邻居时,会将MED值保留携带,当AS内去往同一目的网段存在多个出口时,可以通过比较MED值得方式进行,优选原则:优选MED值小的路由
默认情况下,路由只能比较来自相同AS路由的MED值,可以通过命令开销比较来自不同AS路由的MED值能力
命令:compare-different-as-med //开启比较来自不同AS路由的MED能力
华为私有属性:
Preferred-value:权重值
只在本地有效,不会传递给其他任何设备,默认值为0
取值为0--65535,值越大越优先,只能在本地配置,在接收对端发送的路由时,将权重值打上
华为私有属性,但是其他产生都存在自 己的私有属性,类似于权重值的属性
优选原则:优选权重值大的路由
BGP反射器:RR反射器
定义角色:
1、RR反射器
2、客户端
3、非客户端
注:所有的非客户端和客户端都是RR设备的IBGP对等体
反射原则:
1、从非客户端学习到的路由会反射给自己所有的客户端
2、从客户端学习到的路由会反射给自己的所有非客户端和除传递过来的客户端以外的所有客户端
3、从EBGP对等体学习到的路由,会传递给所有的BGP对等体(通告原则)
由于RR打破IBGP水平分割机制,导致IBGP之间的防环机制被打破,需要引入新的机制进行防环
引入属性:
1、Originator_ID:始发者路由器ID
属于可选非过渡属性,只在RR场景下才会产生
当RR从某台设备收到一条路由时,会将设备的router-id记录在路由的originator_id上,用于RR场景下的防环,
防止路由被其他RR设备反射回到原来的设备上,当原来的设备收到一条路由后,查看路由属性中的originator_id,如果是自己的router-id,则认为是环路,并且拒绝接收
2、Cluster_list:集群列表
属于可选非过渡属性
引入集群概念:将RR同自己所有的客户端作为一个集群,使用cluster-id标识集群,默认采用RR设备的router-id进行标识
作用:存在多个RR场景下的防环
RR设备将路由反射出去时,会将自己的cluster-id放入cluster_list中,当收到的路由查看cluster_list时,里面存在自己的cluster-id,则认为路由经过自己进行了传递,出现了环路,将路由拒绝接收
配置命令:
[AR4-bgp]reflector cluster-id 4.4.4.4 //为RR设备配置集群id
[AR4-bgp]peer 2.2.2.2 reflect-client //为RR设备配置客户端设备
注:只允许将IBGP对等体配置为客户端
BGP路由优选:
1、丢失下一跳不可达路由
将下一跳不可达的路由不加入到本地IP路由表中
可以通过命令,使得下一跳属性地址可达
2、优先权重值大的路由
权重值为华为私有属性,优先级最高,并且修改后只会影响本地选路,影响最小
3、优选本地优先级值大的路由
本地优先级在AS内进行传递,不会传出AS,故针对AS内的路由器进行选路时可以进行操作
4、本地始发的路由优于从对等体学习到的路由,本地始发的路由优先级:手工聚合>自动聚合>network>import
手工聚合:
通过aggregate命令进行聚合的路由,可以指定网段和掩码,属于无类路由
通过手工聚合的路由更加精确,通过管理员计算得出网段前缀和掩码长度
配置命令:
[Huawei-bgp]aggregate 10.1.0.0 24 detail-suppressed //将路由聚合为10.1.0.0/24路由
自动聚合:
通过路由器自己计算得出网段前缀和自然掩码,掩码只会为8/16/24三种,
通过自动聚合的路由比较模糊,是根据网段前缀直接计算得出的掩码,掩码偏差较大
配置命令:
[Huawei-bgp]summary automatic //执行自动聚合操作
只有当路由的前缀和掩码都相同时,手工聚合>自动聚合>network>import才能生效,否则认为是不同的路由,执行路由匹配原则:掩码最长匹配原则进行路由匹配
5、优选as-path属性短的路由
as-path记录了路由经过了多少个AS传递到本设备,将AS看作一台路由器,也就是类似于RIP中的开销值
6、优选origin(起源)属性为:IGP > EGP > incomplete
由于IGP的起源方式为network。只有当本地IP路由表中存在此路由才能进network宣告
incomplete起源方式为import-route,引入的一般为协议路由,路由条目一般较大,并且较为模糊
7、优选MED值小的路由
当多条路由同时存在MED值是,认为路由都是从其他AS传递到本AS中的,通过比较MED值可以计算出去往目的网段所在AS的最小开销路径
8、优选从EBGP学习得到的路由,EBGP > IBGP
如果通过从EBGP和IBGP邻居学习到同一条路由时,则认为该路由为AS外的路由,直接通过EBGP学习可以省略AS内部的开销问题
9、优选去往next-hop地址IGP开销最小的路由
当前八条无法比较时,说明去往目的网段的路径熟悉基本一致,AS之间的开销(MED)为一致,此时可以通过比较AS内部的开销进行选路,去往next-hop开销为AS的内部开销,metric
注:当前九条条件都相同时,则可以执行负载分担,但是BGP协议默认不进行负载分担,可以通过命令进行手动开启负载分担
开启命令:[Huawei-bgp]maximum load-balancing 1-8 //开启BGP路由负载分担,最高支持8条路由进行负载
不管是否开启负载分担,BGP一定都会选择出一条最优路由
有RR场景:
10、优选Cluster_list(集群列表)短的路由
Cluster_list记录了路由经过了多少个RR反射器集群,当Cluster_list短时,则经过的RR反射器集群少,认为开销较小
11、优选originator_ID小的路由
当前十条选路原则都无法比较出最优路由时,认为路由的开销等条件都为一致,比较不影响的参数
当RR收到一条路由时,会将发送者的router-id打在路由的originator-id属性上,通过比较originator_ID优选
12、优先对端router-id小的路由
当路由器收到多条路由的情况,比较对等体的router-id,优选对等体id小的路由
13、优选对等更新源IP地址小的路由
两台路由之间建立了多个BGP对等体关系,此时对等体的router-id也一致,通过前12条选路原则无法进行选出最优路由
只能通过比较建立邻居的更新源地址
无RR场景:
12、优先对端router-id小的路由
当路由器收到多条路由的情况,比较对等体的router-id,优选对等体id小的路由
13、优选对等更新源IP地址小的路由
两台路由之间建立了多个BGP对等体关系,此时对等体的router-id也一致,通过前12条选路原则无法进行选出最优路由
只能通过比较建立邻居的更新源地址