bgp概述
作用:as间路由控制和优选
什么是bgp:
bgp是应用层协议,报文格式:ip+tcp(179)+bgp,跨路由器建立邻居,因为报文是单播,一个路由器只能有一个bgp进程,bgp邻居关系有两种:ebgp,ibgp
为什么要ibgp?
ospf等协议不能携带bgp的属性,ibgp能
bgp的五种报文
open:用来建立邻居,tcp连接好后只发一次
keepalive:维持邻居,60s一次,180s结束邻居
update:路由更新,增量
Route-Refresh:BGP的入口策略路由发生变化,本地的BGP路由会向对等体发送Route-Refresh报文,收到信息后,对等体将其路由信息重新发送给本地BGP路由器
notification:错误报告,之后BGP就会中断,只要收到Notification报文就会返回idle状态
配置
只有ebgp之间用环回口建立邻居时,才需要修改TTL
refresh bgp all export 刷新邻居,重新发送update报文
状态机制:参考大佬
connect状态和active状态不是都会发tcp连接请求吗,如果都会发,那么为什么要设置俩状态?
尽管Connect状态和Active状态都涉及到TCP连接的建立,但是它们之间的区别在于重试机制和网络同步问题的处理:
-
初始连接尝试:Connect状态用于初始的TCP连接尝试。如果第一次尝试失败,BGP路由器会进入Active状态。
-
重试机制:Active状态提供了一个重试机制,使得BGP路由器可以在一段时间后再次尝试建立TCP连接。这种机制有助于在网络问题暂时解决后恢复连接。
-
避免同步:在Active状态下,BGP路由器在尝试重新建立连接之前会等待一个随机时间,这有助于避免在网络问题恢复时多个BGP路由器同时尝试建立连接,从而减少网络拥塞和同步问题。
注意:
当对方不配置bgp 200时,tcp 179端口监听不打开,此时状态是connect
当对方配置了bgp 200,却没有指定邻居,或者错误,此时状态是active
用ibgp的原因
bgp路由的生成方式
有3种:network,import,路由汇总
network
注意:
当10.1.23.0这条路由的next-hop不可达时(在bgp表里存在,但是在ip路由表中没有),意味着路由器不知道这个路由怎么去,因此这条路由是无效的。因为ebgp将路由传递给ibgp邻居时,不会修改下一条,因此我们要宣告边界网段
* 有效,代表这个路由参与ip路由表里的竞选,不一定选用来自bgp的这个条目
> 最优的, 代表可能会发给其他邻居,有>也不一定发,还要满足其他的发布规则
两个都有不代表ip路由表里一定使用
import
[]bgp 200
import-route ospf 1
发路由
bgp路由信息在update里
为了避免环路,发布信息需要满足一些规则,这些条件都必须满足,才有可能会发给邻居
1.只将最优的路由发给邻居,就是带>的
怎么判断是不是最优呢?(看收且处理路由)
- 路由器发现这个路由的下一条不可达,那他就不是最优的
- 然后还要看各种属性,比较出一个最优的
2.ebgp邻居发来的路由会发给自己的所有邻居
3.ibgp邻居发来的路由不会再发给自己的ibgp邻居,可以发给ebgp邻居
防止as内部环路
4.bgp和igp同步:这条路由必须在bgp表和igp表中都存在,才能发出去
默认不开启,华为不能开启,如果开启会导致路由的传递不了,不开会出现路由黑洞
常见问题
对于igp和bgp路由不同步导致的路由黑洞,解决方法:
- as内部全互联,保证所有参与运输报文的由路由器学到bgp里所有路由
- 将bgp引入igp路由表
解决 ibgp水平分割导致有的路由器学不到路由
- as内部所有ibgp全互联,所有运行bgp的路由器全互联
- 联盟
- 设置RR路由反射
peer 10.1.1.1 reflect-client 在rr上将邻居1.1设置为自己的客户端
解决运行ebgp的路由器向他的ibgp邻居发送update报文时,next-hop不可达
- 将ebgp间直连网段放入igp里,并将出接口设置为静默接口
- 在ebgp上:peer 1.1.1.1 next-hop-local 发出update报文时修改next-hop值为这个路由器建立邻居的地址
这样就没有下一条导致的路由黑洞了
还有个下一条不可达导致的路由黑洞
- 将bgp引入igp路由表
- mpls
开启多路径传输(负载分担):
开启后选最优路由就不看router-id,接口地址大小了,只要前面的9个属性一样都是最优的。会将这些最优的给ip表
bgp 200
maximum load-balancing 4
在ip路由表里才能看到效果
9个比较属性
- 原始的下一条不相同(去往同一个地方,下一条不一样)
- prefvalue一样
- local_pref一样
- 都是聚合,或者都是非聚合
- origin一样
- med一样
- 都是ebgp,或者都是ibgp
- as内部的cost一样
- as_path一样
路由反射
peer 10.1.1.1 reflect-client 将邻居1.1设置为自己的客户端
常用属性
13种
公认必遵:
所有路由器都认识这些属性,update报文里必须有
origin:
- i(通过network将igp的路由引入bgp路由表里)
- e(路由从EGP协议学来,不常见,可以用路由策略修改)
- ?(通过其他方式学的路由,使用import引入)
as_path:
- as_sequence
- as_set
- as_confed_sequence 用于联盟
- as_confed_set
一开始as内部传递bgp路由的update报文里不带as-path,当出去的时候才加上
next_hop:
as内传递bgp路由的时候不修改下一条,能避免环路
公认任意:
路由器都认识,报文里可以没有
local_pref:用于as内部,判断流量离开as时的最佳路,大的优先,默认100
atomic_aggregate:原子聚合,当聚合命令(携带detail-suppress,且不带suppress-policy),聚合后的路由会出现这个属性,警告他人出现信息丢失,防环
可选过渡:
如果路由器不认识,可以发给其他人
aggregator:防环,包含发起聚合设备的as号和router-id
community
可选非过渡:
如果不认识,发出去就去掉这个属性
med:as间,发给一个as后,这个as不会再发出去,告诉对方如何进入as,默认是0,小的优先
preference_value:本地配置有效
收且处理路由
如果都是bgp路由,优先级都一样,看下面
下一条不可达,不优
- pref_val值最大(首选值weight,华为私有的属性,本地有效,不会发给其他人)
- local_pref最大的
- 手动聚合>自动聚合>network>import>从邻居学到的
- as_path最短的
- origin:I>E>?
- 对于来自同一as的路由,优先med小的
- 从EBGP学来的(EBGP>IBGP)
- as内部IGP的cost值小的(到下一条的cost)
- 以上都一样,可以开启负载分担,默认不开启
- cluster_list (rr的router id)最短,经过的rr最少的,防止集群间环路
- orginator(产生这个路由的rr的router id)最小,防止集群内环路
- router id最小的路由器的发布的路由
- 邻居地址较小
改属性(用acl匹配)
用ip-prefix
dis route-policy
路由聚合
手动聚合:
bgp 200
aggregate 10.2.0.0 16 detail-suppressed 加上就不发明细,抑制明细
发一部分明细:为了部署路由策略
aggregate 10.2.0.0 16 detail-suppressed suppress-policy name1 抑制一部分明细
或者不写detail-suppressed ,效果一样
被前缀列表匹配的抑制
自动聚合:
只对import的路由聚合,聚合后的路由是主类路由,比如:A类10.0.0.0
bgp 200
summary automatic 默认不发聚合前的明细路由
静态聚合:
写个静态,只是为了使聚合后的路由再路由表里有
ip route-static 10.1.0.0 16 null 0 null是垃圾接口
然后宣告聚合后的
bgp 200
net 10.1.0.0 16
聚合后出现环路
as-path有序
用as-set,没有顺序,携带聚合之前的as号,聚合后as号不会消失
如果携带as-set,路由会携带所有as信息,当明细路由震荡,会导致聚合路由频繁刷新
不带as-set,可能出环路
automic-aggregate属性:原子聚合,当聚合命令(携带detail-suppress,且不带suppress-policy),聚合后的路由会出现这个属性,警告他人出现信息丢失,防环
aggregator属性:防环,包含发起聚合设备的as号和router-id
community
共有属性:
internet:默认,给任何人
NO_advertise:不给任何人
NO_export:不给ebgp邻居,不发出as
NO_Export_subconfed
私有:都可以用共有属性
带冒号的100:1 或者 数字8520
在发送报文时,默认community不带
dis bgp ro community 查看带commuty属性的路由
用community-filter筛选报文
因为聚合时,团体属性会丢失,在聚合时给聚合路由加community属性
向邻居发布缺省
ebgp环回口建立邻居
改ttl