BGP:
一、基本概念
1、基于TCP 179,基于TCP的好处:面向链接的,有确认机制可靠的
2、是一种用于AS之间路由传递和控制的协议(AS)
3、BGP报文:
open:协商建立邻居关系(版本,AS号,hold-time,router-id)
keepalive :周期60s发送,用来保活TCP链接
update :用来进行增量的路由更新
notification :差错报文,在任何阶段都有可能发送,一旦收到直接进入IDLE
route-refresh:向对等体发送路由更新请求
4、BGP状态机:idle connect active opensent openconfirm established
5、BGP邻居关系:IBGP,EBGP
二、路由更新规则
1、只将最优路由通告给对等体
2、从EBGP邻居学来的会通告给所有邻居关系
3、从IBGP邻居学来的不会通告给IBGP邻居
4、从IBGP邻居学来的默认会通告给EBGP邻居
从IBGP邻居学到的路由在传给EBGP邻居时要根据IBGP和IGP同步的情况来决定
同步:要向EBGP更新一条来自IBGP邻居的路由,需要在BGP和IGP同时学到这条路由
(华为设备默认关闭同步并且不能开启)
三、BGP的属性——通过更改BGP路由属性控制路由的传递
1、next-hop:公认必遵属性,必须携带在update中,不携带就会出错
当通告给对等体一条BGP路由时,对等体会将此路由下一跳置为对方和我建立邻居关系的地址
从EBGP邻居学来的路由在传给IBGP邻居的时候,不修改下一跳
从EBGP/IGBP学来的路由在传给EBGP邻居时,要修改下一跳为自己和对方建立邻居关系的地址
当要使用一条BGP路由时,下一跳必须可达;使用BGP路由时需要先递归IGP查找BGP路由的下一跳
可以在BGP路由器上使用peer X.X.X.X next-hop-local来强制修改下一跳属性,此命令用于将从EBGP邻居学来的路由传给IBGP邻居的时候使用。
2、origin:起源属性,公认必遵,BGP路由必须携带在update报文,如果不携带就会出错
用来标识此路由最初是以什么方式引入BGP的(network,import,egp)
如果是以network则标识为 i(igp)
如果是以egp则标识为 e(egp)
如果是以import则标识为 ?(incomplete)
I > e > ?
可以在整个BGP域内出入方向做修改
3、AS-path:公认必遵属性,必须携带在update中,不携带就会出错
用来标识路由在AS之间传递的时候经过了哪些AS,将经过的AS编号加入AS-path
(1)选路:优选AS-path短的BGP路由
(2)AS间防环:在从EBGP邻居收到一条路由时会对AS-path做检查,检查AS-path中有没有自身的AS号,如果有,则丢弃此路由,如果没有则继续使用。
可以在AS内,AS间通过修改AS-path的长度来影响选路,只能添加已经经过的AS编号
4、Local-Preference:公认任意属性,每个厂商都支持,但可以不携带在update报文中
默认值为100,值越大越优先,只能在AS内部生效,不能传出AS
用来影响AS内部路由器如何访问其他AS的路由
只能在IBGP邻居的出入方向和EBGP邻居的入方向修改
5、MED(multi-exit-disc):多出口鉴别器,可选非过渡属性,可以选择性携带和识别,如果不识别,将不会传递该属性;用于告知邻居AS一条最好的路径进入本AS;本质是开销值
比较原则:越小越优先,默认为0;
默认只能比较来自一个AS的MED值,可以通过配置命令来比较来自不同AS的MED;
可以影响邻居AS以及他的IBGP邻居,不能影响邻居AS的其他EBGP邻居
6、community:团体属性,可选过渡属性,可以选择性识别和携带,如果不识别,则会将此属性透传给其他设备;默认不传递给邻居,必须通过配置peer X.X.X.X advertise-community来将团体属性通告给邻居。
作用:用来限制路由的传递范围,使用公认团体属性限制
用来标识一类具有相同特征的路由,使用扩展团体属性标记
公认团体属性:internat:路由默认团体属性,具有此团体属性,会将路由传递给邻居
No-advertise:具有此团体属性,不会将路由传递给任何邻居
No-export:具有此团体属性,不会将路由传出AS
No-export-subconfed:在联盟中使用,不会传给其他联盟AS
扩展团体属性:AA:NN标识,AA一般用AS编号表示,NN表示AS内部的团体编号
四、选路原则——13条选路原则
1、比较prefrence-value,越大越优先,华为私有属性,只在本台路由器上生效
2、比较local-preference,越大越优先
3、本地始发:手工聚合>自动聚合>network>import>从邻居学到的
4、比较as-path,越短越优先
5、比较origin,i(network)>e(egp)>?(import)
6、比较MED值,越小越优先
7、EBGP邻居>IBGP邻居
8、优选BGP路由下一跳递归IGP路由开销值小的
9、如果前八条一模一样,则可以实现负载分担
AS-PATH必须严格一致
默认BGP路由负载分担条目为1
10、比较cluster-list,越短越优先
11、比较originator-id,越小越优先
12、比较router-id,越小越优先
13、比较对等体的IP地址,越小越优先
五、防环机制——AS内/AS间/特殊场景
1、AS内防环:从IBGP邻居学来的不会通告给IBGP邻居(IBGP水平分割)
问题:AS内某些路由器学不到BGP路由
解决方法:(1)AS内部IBGP全互连
2、AS间防环:使用AS-PATH防环
3、路由反射器:(Route-Reflector)
(1)角色:反射器,客户机,非客户机(都是在反射器上定义的)
(2)路由传递原则:
路由反射器打破了水平分割,非非不传
只反射最优路由
从客户机学来的路由会反射给客户机和非客户机
从非客户机学来的路由会反射给客户机
(3)如何在RR中规划IBGP:
客户机只需要和反射器建立IBGP邻居
非客户机需要和反射器建立IBGP邻居
非客户机和非客户机之间需要全互连IGBP
(4)防环机制:
簇内防环:使用originator-id防环,此属性是可选非过渡属性
在RR上反射路由时,如果此属性为空,
则会打上本AS始发路由器的router-id
其他路由器收到带有originator-id的路由,
会将此属性和本路由器router-id比较,
如果一样,则不接受,如果不一样,则接受。
簇间防环:使用cluster-list防环,此属性是可选非过渡属性
当RR在反射路由时,会检查此路由有没有cluster-list
如果没有,则创建一个,并将自身的cluster-id写入
(Cluster-id默认是router-id,但可以修改)
其他RR在接收到反射的路由时,会检查此属性cluster-list
若其中包含自身的cluster-id,则忽略该路由
4、BGP联盟
(1)角色:成员AS(小AS),联盟AS(大AS)
(2)路由传递原则:联盟EBGP邻居,联盟IBGP邻居
从EBGP邻居学到的路由会传给联盟EBGP/联盟IBGP
从联盟EBGP邻居学到的路由会传给联盟EBGP/联盟IBGP/EBGP
联盟EBGP邻居之间传递路由时,下一跳不做修改
只传递最优路由
(3)配置原则:需要在BGP进程中指定联盟AS的AS号
需要在BGP进程中指定联盟EBGP邻居的AS号
(4)防环机制:使用联盟内有序AS防环
在路由经过联盟AS时,会创建一个(小括号),
并在小括号里面最前添加成员AS的AS编号
每经过一个成员AS,都会在最前面添加成员AS
在此路由出联盟AS时,会将小括号替换成联盟AS
中间成员AS在收到路由时,会检查AS-path中有没有自身as
如果有,则忽略该路由
六、BGP特性
1、路由聚合:自动聚合,手动聚合
(1)自动聚合
手动聚合
(2)路由聚合需要考虑的问题:
路由属性的继承问题:next-hop,自动/手动聚合相当于新引入一条路由,下一跳为自己
Origin,自动聚合起源属性为?(incomplet)
手动聚合起源属性继承明细路由中起源属性最劣的
As-path,自动聚合相当于新引入一条路由,AS-path没有继承
手动聚合中默认不继承明细的AS-path,
(可以使用as-set参数让聚合路由的AS-path中使用{}携带明细路由的AS-path)
明细路由的通告问题:自动聚合的路由默认不通告明细路由
手动聚合的路由默认通告明细路由,可以使用detail-suppressed抑制所有明细路由,