一、BGP路径属性可分成4大类:
1、公认必遵 BGP路由器必须识别这类属性,Update报文必须携带这类属性;
如果收到的更新报文中缺少这类属性,BGP邻居关系会被重置;
2、公认任意 BGP路由器必须识别这类属性,Update报文可选携带这类属性;
3、可选过渡 BGP路由器可选识别这类属性,不识别也可以转发这类属性;
4、可选非过渡 BGP路由器可选识别这类属性,不识别不转发这类属性;
二、BGP常用的路径属性有13个
1、origin 公认必遵
用来代表BGP路由的起源,标记一条路由是如何进入BGP,有3种类型:
(1)IGP
IGP学到的路由,通过network方式注入到BGP中的路由或者聚合路由,用i表示;
(2)EGP
EGP学到的路由,EGP协议几乎没有使用,只能手工调整,用e表示;
(3)incomplete
来源未知的路由,通过import方式引入到BGP中的路由或者聚合路由,用?表示;
聚合路由的起源属性依赖于成员路由的起源属性:
(1)成员路由的起源属性都是IGP,聚合路由的起源属性是IGP;
(2)成员路由的起源属性都是incomplete,聚合路由的起源属性是incomplete;
(3)成员路由的起源属性既有IGP,又有incomplete,聚合路由的起源属性是incomplete;
origin属性3种路由比较优先级:
IGP起源的路由优于EGP起源的路由,优于incomplete起源的路由;
2、as_path 公认必遵
用于记录路由沿途所经过的AS,路由在离开AS时,当前的AS号会自动添加到AS_PATH序列的前面(最左面);
路由在AS内传递时,不对路由的AS_PATH属性做任何改动;
BGP的AS_PATH属性内容由segment构成,有4种segment类型:
(1)AS_SET AS号的无序集合
(2)AS_SEQUENCE AS号的有序列表
(3)AS_CONFED_SET 联盟中成员AS号的无序集合
(4)AS_CONFED_SEQUENCE 联盟中成员AS号的有序列表
每种segment类型在AS_PATH属性中仅能出现一次;
AS_PATH中可能仅携带一种segment类型,也可能同时携带多种segment类型;
AS_SET和AS_CONFED_SET一定是聚合路由的才会包含的segment类型;
多种segment类型同时出现在AS_PATH中,则前后顺序一定是AS_CONFED_SEQUENCE、AS_CONFED_SET、AS_SEQUENCE、AS_SET
AS_PATH的长度是由AS_SEQUENCE这种segment的AS号数量来决定的,而AS_CONFED_SEQUENCE、AS_CONFED_SET和AS_SET的长度都不计入AS长度计算;
不论何种类型的segment,若其中携带的AS号等于接收设备所在的AS号,则该路由都将因为环路问题而被丢弃,可通过peer x.x.x.x allow-as-loop使接收设备接收含有自己AS号的路由;
3、next_hop 公认必遵
用来记录BGP路由的下一跳信息,BGP设备会忽略下一跳地址不可达的BGP路由;
BGP下一跳属性遵循如下规则:
(1)BGP设备将本地始发路由发布给所有BGP对等体时,会把路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址;
(2)BGP设备向EBGP对等体发布路由时,会把路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址;
(3)BGP设备在IBGP对等体发布从EBGP学来的路由时,不改变路由信息的下一跳属性;
可以通过如下两条命令修改下一跳属性缺省行为:
peer next-hop-local
peer next-hop-invariable
关于下一跳带来的问题:
区别于IGP中下一跳是直连路由器的IP地址,BGP路由的下一跳往往都是非直连设备的IP地址,所以出现了下一跳地址不可达问题、路由黑洞问题以及负载分担问题;
(1)下一跳地址不可达问题
下一跳是非直连地址,必须保证路由表存在到达下一跳地址所在网络的路由;
(2)路由黑洞问题
从数据平面分析,如果数据流访问目标BGP网络,R5根据下一跳发给R2,但中间IGP路由器R3和R4没有对应的BGP路由,所以会出现路由黑洞;
方法1:
全都运行BGP,运营商网络中使用较多,IBGP全互联、RR、联盟;
方法2:
IGP同步,将BGP路由引入IGP,保证路由全网可达。
此种方法不建议使用,过量的BGP路由会加重IGP路由器的负荷,同时IGP路由也不适合承担过大的AS间数据流量,可以根据需要引入少量路由或对引入的路由做必要的汇总;
方法3:
开启MPLS标签交换,在运行BGP的设备R2和R5之间为下一跳地址所对应的路由创建LSP隧道,所有发往下一跳地址的数据包执行标签转发,中间设备不需要存在相应的BGP路由;
方法4:
把运行BGP的设备直连,这样AS间的数据流量将不需要经过IGP路由器;
(3)负载分担问题
默认情况下,BGP只把最佳路由放进IP路由表,即BGP缺省没有等价路由;
如果下一跳地址路由是负载分担的路径,可以保证R5到R2的数据流量负载分担;
4、local_pref 公认任意
Local_Pref属性用来判断流量离开AS时的最佳路由,仅在IBGP邻居间传递,不通告给其他AS;
当AS内BGP设备通过不同的IBGP对等体得到目的网段相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由;
Local_Pref属性将会在整个AS内传递,在本AS内的所有路由器都将收到该优先级,如果路由没有配置Local_Pref属性,将按缺省值100来处理;
5、med 可选非过渡
MED属性用来判断流量进入AS时的最佳路由,仅在两个相邻的AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三发AS;
MED值越小,路由的优先级越高;
BGP路由器默认只对相同的AS传递过滤的路由进行MED的比较,不会比较不同AS传递的路由,可以使用命令compare-different-as-med来使其比较不同AS传递的路由;
如果路由没有配置MED属性,将按照缺省值0来处理;
6、originator_id 可选非过渡
专为RR开发,用来在AS内防环,由RR添加到路由更新中,并随路由在AS内传递,离开AS时会被剥离;
OriginatorID属性值为AS内第一台通告该路由的BGP设备的RouterID;
如果路由器接收路由时,路由携带的OriginatorID与自身RouterID相同,丢弃该路由,实现集群内防环;
7、cluster_list 可选非过渡
专为RR开发,用来在AS内防环;
Cluster_List是路由经过RR反射时由RR添加的一个集群列表,记录路由经过的Cluster_ID;
如果RR在接收到路由的Cluster_List中存在自身Cluster_ID,丢弃该路由,实现集群间防环;
8、atomic_aggregate 公认任意
用于路由聚合时,告知对等体,原始的明细路由AS_Path出现了丢失,只在抑制明细路由时携带;
如果聚合路由将所有明细路由抑制了,就会为聚合路由生成该属性;
9、aggregator 可选过渡
聚合后的路由一定携带aggregator属性,指明聚合路由设备所在的AS号和RouterID;
10、community 可选过渡
Community团体属性用来标识具有相同特征的BGP路由,提高路由策略使用效率;
可以用十进制和十六进制来表示该属性,范围0x00000000(0)-0x0000FFFF(65535)和0xFFFF0000-0xFFFFFFFF是被保留的,其中定义了4中公认团体属性:
(1)Internet 0x00000000
设备收到具有此属性的路由后,可以向任何BGP对等体发送该路由,路由的缺省属性;
(2)No_Advertise 0xFFFFFF02
设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由;
(3)No_Export 0xFFFFFF01
设备收到具有此属性的路由后,将不向AS外发送该路由;
(4)No_Export_Subconfed 0xFFFFFF03
设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发送该路由;
除了公认团体属性外,如果需要定义私有团体属性控制BGP路由时,可以利用团体属性的前2个字节作为AS号,用后面的2个字节定义与该AS相关的数值;
多条路由可以拥有相同的团体属性,bgp路由器需要对这些路由实施策略时,只需匹配该团体属性;
一条路由也可以拥有多个团体属性,BGP路由器可以根据其中的一部分或全部属性进行匹配;
11、MP_Reachable 可选非过渡
12、MP_Unreachable 可选非过渡
13、扩展团体属性
除了标准团体属性外,扩展团体属性是对BGP团体属性的扩展,长度8字节,主要用于MPLS VPN的Route Target(前面2字节代表类型,后面6字节代表数值);
首先,AS_PATH属性是周知强制属性,只有在始发这条路由的EBGP对等体才会开始添加AS_PATH。从这之后,每经过一个不同的AS,属于该AS的EBGP对等体就会往AS_PATH上添加这个AS号。如果一个EBGP对等体发现EBGP邻居宣告给自己的一条路由,这条路由的AS_PATH属性中包含自身的AS号,也就意味着两种情况:1.这条路由是自身始发的,结果又回到自己AS这了;2.这条路由曾经被宣告过给自己,然后又一次宣告回来了。然而不管是什么情况都是出现了路由环路了。因此这条路由被丢弃忽略。上节我们主要讲解了BGP通告原则与路由处理
IGP协议中,rip是通过跳数,ospf和ISIS是通过开销值,
那在BGP中如何进行选路呢?
如何进行防环是每个协议都要考虑的问题
大致可以分为公认属性和可选属性
1、公认属性:所有运行BGP协议的路由器都能理解的属性
*公认必遵:大家都知道并且必须满足,BGP的Update报文消息中必须包含的属性
Origin(起源属性)
AS Path
Next hop
*公认任意:大家都知道,但是需不需要可以根据需求自由选择,不必存在于Update报文中。
Local Pref
Atomic aggregate
2、可选属性:厂家开发的某些满足特殊需求的属性,但是并不是所有路由器都理解的属性,私有属性。
*可选过渡:BGP虽然不能识别该属性,但是我可以把它接受并传递下去发布给其他的邻居
Aggregator
Community
*可选非过渡:BGP可以忽略包含该属性的消息并且不向它的邻居发布。
MED
默认情况下传给EBGP邻居的BGP路由的下一跳设置为自身向这个EBGP邻居发送BGP报文的源地址。
默认情况下从EBGP邻居得到的BGP路由再传给IBGP邻居时,此BGP路由的下一跳默认不变,可以使用peer next-hop-local修改下一跳。
默认情况下凡是自己产生的BGP路由在传给任何BGP邻居时,总是把此路由的下一跳设置为向BGP邻居发送BGP报文的源地址
练习:以下如果都用环回口建立邻居关系,最后答案是多少?
1.1.1.1
2.2.2.2
3.3.3.3
同AS传递下一跳不变,不同AS之间传递下一跳需要改变。
Origin属性定义路径信息的来源,标记一条路由是怎么成为BGP路由的。
我们可以看到BGP路由表中出现Ogn列,就代表起源属性
BGP路由的起源属性有三种:
1、i:表明BGP路由是由network命令发布的
2、?:imconplete,不完全的,表明BGP路由是由import-route发布的
3、e :表明BGP路由时从EGP协议引入的BGP协议目前已经全面退出网络了,但是我们可以通过路由策略将路由的起源属性进行修改为e,一般起源属性是一种选路属性,可以用于BGP路径的选路,通过修改起源属性可以控制BGP路径 。
三种属性的优先级:i>e>?
我们在R1上引入以下路由,
功能:
1、选路,经过AS数量少的路径最优
2、在AS之间实现BGP路由防环,从EBGP邻居得到路由时,检查该路由的AS_PATH属性,如果AS_PATH属性中携带该路由自身的AS号,则丢弃该路由。
3、当BGP路由传递给EBGP邻居时,会将自己的AS号添加到ASpath的最前边。
当BGP路由传递给IBGP邻居时,不会添加自己的AS号。
4、AS_PATH可以被修改,华为在EBGP和IBGP邻居之间都可以被修改,思科只能在EBGP之间进行修改
ps:AS内部是怎么进行防环的呢?
IBGP的水平分割:通过IBGP获得的最优路由不会发布给其他的IBGP邻居
我们继续在R1上进行如下配置
我们在R1配置了一条234的AS path
现在抓包看一下,
使用命令将BGP路由手动触发更新
发现这条路由里已经添加了234的AS_PATH
此时R2的路由都不接受R1传递的1.1.1.1了
我们开启R2的debug模式
然后在R1上进行BGp刷新
<R1>refresh bgp all export
<R2>
这表示路由器接收到了192.168.1.0路由来自10.1.12.1,它的AS path是 1 234
我们在R2上进行如下命令,表示如果收到10.1.12.1发送来的EBG路由,携带AS号也接收
此时我们在查看BGP路由表
总结:BGP公认必遵的三个属性的必要性,下一跳是一定要存在的,BGP不进行路由计算,只是被动的接受路由指令。起源属性是定义路径信息的来源,标记一条路由是如何成为BGP路由的,AS_PATH是EBGP路由防止环路的关键,也必须存在。
该属性是属于公认任意的,local preference属性仅在IBGP邻居之间有效,不通告给其他AS,它表明路由器的 BGP优先级,用于判断流量离开AS时的最佳路由。默认值是100,越大越优先。
我们把之前对AS_PATH做的策略去掉
此时R1只是引入了一条192.168.1.0的静态路由,并发布BGP路由表中
在R5上,我们也做同样的 *** 作
此时我们来模拟,AS234访问192.168.1.0的路由会有两条路可以走,AS1和AS5
,它 们访问R3的路由优先级都是一样的
但是我们查看R3的路由表,目前R3中192.168.1.0选路是通过R2走的,我们现在想改为通过R5,R4走,
与此同时,R2也会收到R4传递的v路由,它此时会把之前通过R1得到的路由丢弃,但是此时并不会继续向R3进行路由转发,因为是IBGP邻居传递给他的路由,我们知道,通过IBGP邻居得到的路由不会继续转发给其他BGP邻居,进行IBGP之间的防环。
实验:
我们在之前的实验基础上再各自添加一条192.168.2.0 24的路由实现192.168.1.0通过R2访问,192.168.2.0通过R4访问,达到BGP通过公认任意属性选路的效果。
先把R4的路由优先级取消,恢复默认
R2
R4
我们从R3查看
验证通过~!
属于可选属性中的可选非传递属性,也称BGP的开销,越小越优先,属性仅在相邻的两个AS之间传递,收到此属性的AS不会再将其通告给任何其他第三方AS,用于判断流量进入AS时的最佳路由。
华为设备通告MED属性的规则
我们继续在R2上进行实验
查看
(和第一条综合起来,就是MED只会影响始发路由器相关的AS邻居,不会影响第三方。
我们从R1将之前的引入静态路由设置MED‘为888,在R4上依然能够看到。
4、从IBGP邻居得到的路由传递给EBGP邻居不携带MED
5、从联盟EBGP邻居或者联盟内始发的路由的MED值在整个联盟中保持传递
MED值在IBGP或者EBGP包括成员EBGP in和out方向都是可以修改的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)