目录
目录
一.BGP原理
1.1BGP报文类型
Open报文:协商BGP参数
Updata报文:交换路由信息
Keepalive报文:保持邻居关系
Notification报文:差错通知
Route-Refresh报文:用于在改变路由策略后请求对等体重新发送路由信息
1.2BGP状态机
1.Idle状是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。也不会像邻居发送TCP syn,只有32S之后才会向邻居发送Tcp syn并且将邻居转为conrtect状态。
2.Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
如果TCP连接成功,那么BGP向对等体发送open报文,并转至opensent状态。
如果TCP连接失败,那么BGP转至Active状态。
如果TCP syn没有收到邻居的响应,将会卡在connect状态,总是尝试与BGP邻居建立TCP连接。
常见卡在connect状态的原因:
1、邻居没有启用BGP协议
2、沿途路径存在流量过滤将TCP SYN拒绝了。
3、EBGP邻居建立没有配置多跳。
3.在Active状态下,BGP总是在试图建立TCP连接。
如果TCP连接成功,那么BGP向对等体发送open报文,关闭连接重传定时器,并转至openSent状态。
如果TCP连接失败,那么BGP停留在Active状态。
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态
4.在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
如果收到的Open报文正确,那么BGP发送Keepalive报文,并转OpenConfirm状态。
如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至ldle状态。
5.在OpenConfirm状态下,BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至ldle状态。
6.在Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文.
如果收到正确的Update或Keepallie报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至ldle状态。
Route-refresh报文不会改变BGP状态。
如果收到Notification报文,那么BGP转至ldle状态。
如果收到TCP拆链通知,那么BGP断开连接,转至ldle状态。
1.3路由通告原则
建立IBGP邻居关系建议使用坏回口,目的是更加稳定。
默认建立EBGP邻居关系的时候,发送报文的TTL=1.默认建立IBGP邻居关系的时候,发送报文的TTL=255。
1.3.1BGP路由的产生方式:
1、通过network的方式,将本地路由中的路由发布出去。
2、通过import-route的方式,将其他协议的路由引入到BGP协议中。
3、通过手动聚合的方式,产生一条聚合路由(汇总)
如何得到BGP路由呢?
@IBGP邻居给我传递
@EBGP邻居给我传递
@自身产生BGP路由
1.3.2BGP路由通告原则
BGP只会将有效路由中的最优的BGP路由通告给邻居。
@自身产生的BGP路由通告给所有的BGP邻居。
@从IBGP邻居收到的路由,只会传递给EBGP邻居
@从EBGP邻居收到的路由,会传递给所有邻居
1.3.3BGP的防环原则
AS内的防环使用IEGP水平分割机制(只传一跳),即从IBGP邻居收到的路由不会传递给另一个IBGP邻居。
AS之问的防环原则:利用了BGP的路由属性,即BGP将路由发送给EBGP邻居的时候会将自身的AS号添加到as-path列表中;并且规定,从EBGP邻居收到的路由如果携带自身AS号则不接受该路由。
1.3.4BGP路由黑洞:
BGP同步:用于防止BGP路由黑洞问题。
BGP同步机制:即从IBGP邻居接收的路由,需要在IGP表中存在,才能够参加最优BGP路由的选举,如果IGP表中不存在,则不会发送给EBGP邻居。
为什么不使用BGP同步解决路由黑洞问题呢?
2、出现了更好的解决方案:
@AS内部采用全互联的IBGP邻居架构,让所有路由器都运行BGP协议,从而使每台路由器都能够学到BGP路由,防止黑洞产生。
@在ASBR上将BGP路由引入到IGP协议中。(该方法已被淘汰)
@在ASBR之间建立GRE隧道,解决路由黑洞问题。(节约成本)
@通过LSP隧道解决路由黑洞问题。
二.BGP属性
路径属性分类
Next_hop:
EBGP邻居更新路由时,该属性值是两端建立BGP邻居时所用的地址,用的是本端地址,用于根据此属性来寻找该条路由的目的网段,
从EBGP学到的发给IBGP邻居,下一跳属性不变,但是这样不可达。可以在指定邻居的时候将下一跳属性改为建立邻居时的本端地址(peer x.x.x.x next-hop-local)
特点:
1、自身产生的路由发送给所有BGP邻居的时候,下一跳自动修改。
2、从EBGP邻居接受的路由发送给IBGP邻居的时候,下一跳不会自动修改。
3、从EBGP邻居接受的路由发送给EBGP邻居的时候,下一跳自动修改。
4、从IBGP邻居接受的路由发送给EBGP邻居的时候,下一跳自动修改。
5、从IBGP邻居接受的路由不存在发送给IBGP邻居的情况(防环)
Aggregator:可选过渡属性
默认聚合路由之后,聚合路由会添加一个可选过渡属性:
用于对汇总路由的一种标记,标识路由产生的AS,以及产聚合路由设备的router-id,表明发 生聚合的位置
Aggregator: AS // 聚合路由产生的AS
Aggregator ID: x.x.x.x //产生聚合路由设备的router-id。
Atomic-Aggregate:公认任意属性
如果添加detail-suppressed,将会再次产生一个新的公认任意属性,就是本属性
作用:用于警告聚合路由出现了属性丢失(带了这条属性就表明这条聚合路由抑制了明细路由)
Originator ID:可选非过渡属性
用于集群内的防环
由路由反射器(RR)产生,携带了本地AS内该路由发送者的RouteID
Cluster_List:可选非过渡属性
用于集群间的防环
由每个路由反射器(RR)产生,记录反射路由经过的集群。
三.选路原则
3.1、如果此路由下一跳不可达,忽略此路由
3.2、preferred-value
①华为BGP私有属性。
②只在本地有效,不会传递给任何的BGP邻居
③默认等于0
④BGP的选路属性,越大越优
⑤针对发送给邻居的BGP路由,无法修改协议协议首选值,因为报文中并不携带。
⑥针对接收BGP邻居的路由,才可修改协议首选值。
应用场景:当不想影响其他设备的选路,只针对单台设备的选路进行控制的时候,建议使用协议首选值。
3.3、local-pref
①公认任意属性
②只在一个AS内部传递不会传递给EBGP邻居
③用于BGP路由的路径选择(默认100,越大越优)
④ 应用在AS内,存在多个出口的时候选择一个出口访问外部网络。
EBGP路由不携带本地优先级属性,对于不携带本地优先级属性的BGP路由,设备将会认为这个BGP路由的本地优先级为默认本地优先级(默认的本地优先级为100)
修改方式:
① 针对接收或者发送给BGP邻居的路由进行修改(route-policy)
EBGP邻居之间out方向不可修改
EBGP邻居之间in方向可以修改
IBGP邻居之间可以在in/out方向进行修改。
②修改默认的本地优先级。
[AR2-bgp]default local-preferenceI/修改默认的本地优先级。
关键点:在只会对没有本地优先级属性的路由生效。
哪些BGP路由没有本地优先级呢?
① 自身产生的: network和import-route指令变成的BGP路由没有本地优先级。
②邻居传递的:EBGP邻居传递的路由默认没有本地优先级
3.4、优选本地生成的路由
手动聚合>自动聚合>network>import>从其他对等体学习到的
如何判断路由是否是自己产生的?
① 路由下一跳地址为127.0.0.1即为聚合产生的
②下一跳地址为0.0.0.0即为netwoke和import产生的
3.5、AS路径最短
①公认必遵属性
②用于AS之间的防环属性
③用于BGP路由的路径选择。
AS之间防环:
1、BGP设备将路由发送给EBGP邻居的时候,将会在路由的AS-PATH属性中添加自身的AS号。
2、BGP设备从EBGP邻居接受路由的时候,将会检查路由的AS-PATH属性列表,如果存在自身的AS号,那么将忽略这条BGP路由。
3、IBGP邻居之间不会做AS-PATH的防环检测。
修改方式:AS-PATH在任何BGP邻居之间的in/out方向都可以进行修改。
apply as-path 100 additive //在原有的AS-PATH列表中添加新的AS号。
apply as-path 100 overwrite /使用指定的AS-PATH覆盖原有的AS-PATH
3.6、Origin起源属性
选路规则:I>E>?(network>e>import)
①公认必遵属性
②描述了这条路由怎么成为BGP路由的
③ I表面该路由是netwoke进来的
④ ?表示该路由是import进来的
⑤e表示是从EBGP邻居学来的
3.7、MED
也叫作BGP的COST值,或者说叫做BGP的度量值,主用影响邻居AS的选路。
①可选非过渡属性
②用于BGP路由的路径选择(越小越优)
③如果报文中不携带MED值,默认认为MED为0。
如何产生MED呢:
当一条路由变为BGP路由的时候,这个路由在IP路由表中的Cost为多少,那么变为BGP路由 之后MED为多少。
华为MED通告原则:
1、自身始发的路由,MED会通告为IBGP和EBGP邻居。
2、从IBGP邻居接受的路由,传递给EBGP邻居的时候,不携带MED。
3、从EBGP邻居接受的路由,传递给IBGP邻居的时候,携带MED值。
4、从EBGP邻居接受的路由,传递给EBGP邻居的时候,不携带MED。
MED的修改方式:
在所有BGP邻居之间in/out方向均可修改。(routing-policy)
什么时候才会比较MED值?
①默认情况下,只有当两条BGP路由as-path列表中,最左边的AS号相同的时候,才会进行 MED的比较
②compare-different-as-med //命令用来配置允许比较来自不同自治系统中的邻居的路由的 MED值。
3.8、EBDP学的路由优于IBGP
3.9、优选到BGP下一跳IGP Metric较小的路由
P L L A O M E N(漂亮老男人)
当这些都满足了,就可以做负载了(经过的AS-PATH必须数量顺序完全一致才可以做负载)
BGP负载
maximum load-balancing ?
INTEGER<1-8> //针对IBGP和EBGP路由都开启负载
ebgp //针对EBGP路由开启负载
ibgp //针对IBGP路由开启负载
load-balancing as-path-ignore //配置了这条命令就不会比较AS-PATH属性了,只要上面几条选路 原则都满足了就可以直接负载
负载是在IP路由表中负载,BGP路由表不会负载
无论BGP设备是否开启负载功能,都会选取出一条最优的BGP路由传递给邻居。
3.10、优选Cluster_ List最短的路由
用于路由反射器的防环机制
该属性为可选非过渡
用于集群间的防环
由每个路由反射器(RR)产生,记录反射路由经过的集群。
3.11、优选Rouetr ID最小的路由器发布的路由
.
四.BGP团体属性
作用:
1、用于限制BGP路由的传递范围。
2、类似于IGP协议中的tag值,用于对BGP路由实现标记。
分类:
4.1、公共团体属性
Internet:默认所有路由都有该属性,具有该属性BGP路由发送给所有的BG邻居,
但是依然要满足BGP路由的通告原则。
No_Advertise:收到有这个属性的路由,自身不会发送给任何BGP邻居。
No_Export:收到了有这个属性的路由,会发给IBGP邻居但是不会发送给EBGP邻居。
@团体属性,不会自动传递给BGP邻居,需要在邻居之间配置开启团体属性的传递功能。
peer x.x.x.x advertise-community //开启传递团体属性的功能
必须逐跳开启,比如1传给2,需要在1上开启,2传给3需要在2上开启,否则传递的不会携带团体属性
@团体属性可以携带多个,当存在冲突的时候,传递范围小的生效
4.2、自定义团体属性
一共四个字节,用于对BGP路由实现标记。
aa:nn : aa占用2个字节,nn占用两个字节,取值都是0~65535。一般使用路由器所在的AS 号表示。
团体号:4个字节全部使用十进制数进行表示,其中存在一些私有的范围,具体查看华为说 明。
4.3、团体列表
ip community-fiter本质作用就是为了对BGP路由的团体属性进行匹配。
类型:1、基本:编号范围1-99,直接配置团体属性,匹配BGP路由。
2、高级:编号100-199,通过正则表达式匹配BGP路由。
3、默认拒绝所有。
五.BGP聚合
聚合优势:
1、优化BGP设备的路由表和BGP表。
2、当明细路由出现震荡之后,聚合路由不会产生影响,网络更加稳定。
3、维护较少的BGP路由,节省设备系统资源。
4、当所有明细路由失效时候,聚合路由才会失效。
5.1、自动聚合
IPV4支持
@默认关闭状态。
@自动聚合只能聚合成为有类网络,聚合的精确度非常差。
@只能针对本设备import-route的路由生效,灵活性较差。
@执行自动聚合时,不能添加route-policy,修改路由的部分属性。
[AR1-bgp]summary automatic //开启自动聚合功能。
5.2、手动聚合
IPV4和 IPV6同时支持。
@只要是在本地BGP表中存在的有效路由,就可以执行聚合,灵活度较强。
@聚合路由属于本地始发的路由,会通告给所有的BGP邻居。
@产生聚合路由的时候,本地IP路由表中将会自动产生一条指向Nullo的聚合路由,用于 防止环路产生。
聚合路由属性生成如下:
1、协议首选值:默认为0。
2、本地优先级:默认为空。
3、as-path:默认为空。(聚合路由的as-path不会继承明细路由的as-path,使用AS_SET可以继承明显路由的as-path)
4、orgin属性 ﹔如果明细路由的origin属性相同,则聚合路由取值与明细相同。
如果明细路由的origin属性不同,则聚合路由按照?>e>i进行选择。
5、MED属性:默认为空。
默认聚合之后,聚合路由会添加一个可选过渡属性:Aggregator
用于对汇总路由的一种标记,标识路由产生的AS,以及产聚合路由设备的router-id,方便找 到产生此聚合路由的位置。
Aggregator: AS //聚合路由产生的AS
Aggregator ID: 10.0.12.1 //产生聚合路由设备的router-id。
如添加detail-suppressed,将会再次 产生一个新的公认任意属性
Atomic-aggregate :用于提示管理员,聚合路由出现了路径的丢失|
AS_SET:由一系列AS号无序地组成,包含在UPDATE消息里。
当网络发生聚合时,可通过适当策略使AS_PATH使用类型AS_SET来避免路径信息丢失。
AS_SEQUENCE:由一系列AS号顺序地组成,包含在UPDATE消息里。
一般情况下,AS_PATH类型为AS_SEQUENCE。(用z中括号包含)
aggregate 192.168.0.0 22 detail-suppressed //执行路由聚合的时候抑制明细路由。
aggregate 192.168.8.0 22 as-set //使聚合路由,包含明细路由的as号。