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方向都是可以修改的
一、BGP的消息类型:1:open(打开消息)
2:keepalive(存活消息)
3:update(更新消息)
4:notification(报错消息)
1.1 open
当BGPspoken peer之间建立了tcp三次握手之后,便开始发送open消息,那么这个open消息用来干嘛,那么先来看看open消息格式,便能理解它的作用
1、Marker、length、type 是bgp报文的固定格式
2、version:表明BGP的版本
3、My AS:表明发送方的AS系统号
4、hold time:表明发送方keepalive报文过期时间
5、BGP identifier: 在一个AS内保证BGP进程不同,类似OSPF的router-id
6、optional parmeters:可选的参数,比如要做认证,则必须要事先协商
总体这个报文应该没有什么问题,学过OSPF的对hello报文作用很清楚吧,这个open跟hello基本差不多,但是hello报文的第二个特性就完全不一样了,hello报文第二个特性是保活,而BGP使用接下来介绍的keepalive报文进行BGP peer之间的保活作用,当然这也突出了BGP的增量更新作用。
2、keepalive报文
这个报文没什么讲的,60s周期发送,上图大家可以看看它的格式,当然你们也可以自己抓包看看。
3、update
当BGP的peer互相发送了open报文,而且协商过了,便建立连接,这个跟IGP的特性很像,那么现在我们想知道,update到底发送什么内容,先看看报文格式吧!
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)