首页 > 代码库 > BGP协议的学习及一些特性
BGP协议的学习及一些特性
写一点最近开始接触的BGP一点知识(部分截取自网络)
RFC4271 定义一个路由器只属于一个as,as取值范围1-65535 64521-65535是私有as号
BGP协议是提供一种区域间的路由选择协议,自助系统能够无环的交换路由选择信息,BGP路由交换有去往目标网络的路径信息。
BGP在选路的时候考虑的不是速度,而是让AS能够根据多种BGP属性来控制数据流的传输。
1,BGP 靠TCP进行连接,所以要保证三层ip的可达性;端口号TCP179(目标端口)
2,BGP以到单播的形式建邻居,所以通告之后要手工指定邻居;类似于OSPF和Isis路由协议的hello报文,而BGP使用keeplive周期性发送维持
邻接存活信息(60s)来维持邻居关系,BGP0使用的是触发更新机制不需要使用定期更新机制
3,BGP有源检测特性,所以邻居地址要和发送更新地址保持一致,在接受更新分组的时候,TCP使用滑动窗口机制,接受方达到一半的时候进行
确认,不同与OSPF的1-to-1窗口
4,EBGP邻居open包的TTL值为1,如果环回接口建邻居需将它改大;bgp具有丰富的属性值,组建可扩展的巨大的网络
5,BGP 默认是关自动汇总的,因为自将某台路由器通告给自己的邻居对等体时,不像RIP等主类路由那样,边界汇总
6,BGP的同步规则,传输AS不传输路由条目,(从外部AS传过来的条目不在传向其他AS)如果关了此同步会造成路由黑洞
7,BGP有水平分割,在同一AS内路由条目只传一跳,所以如果IBGP全互联的话要做路由反射;
8,BGP 的下一跳是以AS计数的,为了保证数据包能够正确的封装,应该把吓一跳改成物理上的下一跳
BGP的三张表
邻居关系表(所有bgp的邻居)
转发数据库(记录每一个邻居的网络信息,路径去往同一目的通过不同属性的最优路径)
路由表(最佳路径)ebgp路由AD为20 ibgp路由AD为200
查看邻居表 show ip bgp summary
查看转发表 show ip bgp(从邻居获取的路由条目都会加入BGP转发表中
路由表bgp调用选择进程选取前往每个网络的最佳路径加入路由表中 使用 show ip route bgp查看
BGP报文消息类型
open 报文 用来建立最初的BGP连接
keeplive 对等体之间周期性的交换这个消息来保持回话有效(60s)
update 更新报文对等体之间使用这个消息交换网络层可达信息
notification 通告出错信息
建邻居关系的几种状态
idle 不分配网络资源,不允许传入的bgp 连接(此状态会设置连接重置定时器,到期时才会重新启动BGP 初始重试时间60s,而以后每次
重置的时间都是指数上涨,之前时间的两倍
connect 已经建立完成TCP 三次握手BGP BGP 等待TCP连接,如果连接成功,bgp发送open分组给对方以后状态机变为opensent状态,如果失败会
变到active 或者保持connect 或是返回idle状态
active
在这个状态下初始一个TCP连接来建立bgp的邻接关系,如果成功则发送open分组给对方状态变为opensent状态如果失败则仍处于active或idle状态
opensent 等待open的回应回应收到状态变为openconfirm并给对方发送一个keeplive分组没有接收到这个分组则状态变外idle或 active
established 这是bgp对等体之间的交换信息状态包括update分组 keepalive分组和notification分组(connect和active是TCP连接active是发起方
connect是应答方
IBGP 运行在AS内部,不需要直连,有水品分割,建议使用 full mesh,full mesh 不具有扩展性,解决ibgp full mesh问题,使用路由反射器和联邦
来解决,主要解决backbone igp中的路由
neighbor 后指的是地址可达
建立IGP邻居的两种方式
邻居之间的物理接口建立对等关系,是通过他们共享相同的子网建立的
使用换回接口建立对等关系,如果ibgp在物理连接上直连的可能性不大,设置TTL值为255
EBGP 建立邻居
运行在AS 与AS 之间边界路由器上默认使用直连或静态路由,如果不是直连必须指定多跳, neighbor x.x.x.x ebpg-multihop (1-255)
邻居之间可以通过各自的一个物理接口建立对等关系
也可使用通告环回接口建立对等关系
neighboriP-address remote-as number命令 :指定对方属于哪一个AS 所指的neighbor ip address 地址必须在igp中可达
允许更新源地址来访问我的179端口,但没有指明访问本路由器的那个地址,只检测源地址,
本路由器以更新源地址去访问neighbor后面的这个地址179端口,是否可以建立TCP连接,要看对反是否允许我更新源来访问它
例:
neighbor192.168.1.1 remote-as 1 R1
neighbor 10.0.0.1 remote-as 1 R2
双方都没有更新源,neighborx.x.x.x updade-soure lo0 代表本路由器的更新源为l0o口 bgp的包以这个接口地址为源地址发送出去
一边指环回口,一边指直连接口 可以建立邻居,这里两个tcp的session,只有r1去访问R2的环回接口的179 端口的TCP session可以建立
使用show TCP brief 查看
这时在r2上写上更新源命令 neighbor10.0.0.1 update-source lo0 即可建立两个TCPsession 当一条establish之后 另一条会消失,建立
两条是为了冗余
ibgp同步
bgp路由默认不使用ibgp获取的路由或将其通告给外部的邻居,除非路由器是本地的或是igp获悉的
同步开启,意味着从一个ibgp邻居学来的路由,除非从igp中也同样学习到,否者不可能被选为最优
如果igp为OSPF 那么前缀的router-id与bgp的router-id匹配才有可能选为最优
所以关闭同步的条件
将ebgp 的路由重分发进igp
本as不为其他as提供穿越服务(stub as)
穿越路径上所以懂得路由器都运行bgp
BGP 的属性
公认强制的、公认自由决定的、可选传递的、可选非传递的
可选属性不要求所以的bgp都实现支持
对于不支持的可选传递属性,路由器将原封不懂得传递给其他的bgp路由器,这种情况标记为部分的
对于可选非传递属性,路由器将其删除,不将其传递给其他bgp路由
AS路径属性 (as-path)
as_path 是公认必选属性,用as好的顺序来描述AS间的路径或到NLRI所明确的目的地的路由,
当每个运行BGP的路由器发起一跳路由,(当他在自己的AS域内公布一个有关的目的地的NLRI他将自己的AS附加到as-path中)
当后续的运行BGP的路由器向外部的对端公布路由时他将自己的AS 号附加到AS-path中as可以描述所以他经过的自治系统,以最近的
AS开始,以发起者的AS结束,只有将更新消息发送在另一个AS域内的邻居是BGP才将他的as 添加到他的as-path中
可以胫骨哦使用as附加改变其公布的路由的as-path来影响数据流的流向
as-path的另一个属性是避免环路,如果BGP从它的外部邻居收到一条路由,而该路由as-path包含这个bgp路由器自己的as号,于是改
路由器就知道是条环路路由,方法似是将私有AS隐藏 命令 neighbor x.x.x.x remove-private-as 当路由器在发送的更新的时候
剥夺私有as号并且不将它的路由发送给其他路由器
iP as-path access-list 1deny ^100$
ip as-path access-list 1 deny *
neighbor x.x.x.x gilter-list 1 out
增加as-path 的长度 可用route-map 里面的set as-path prepend
bgp bestpath as-path ignore(隐藏命令) 这条命令可以使我们在选路的时候跳过as-path的选路直接往下继续选择最优的路径。
源头属性 (origin)
公认强制属性 (定义路径源头信息)
igp 在起始as的内部,使用bgp 通告network时,通常属于这种情况 在bgp表中 有i表示
egp 路由是通告egp获悉的,在bgp表中用e 表示
不完全 路由的源头未知或其他方法获悉的,在头上显示?
下一跳属性
公认必选属性,描述了到股部路径的下一跳路由器iP地址
使用静态路由和next-hop-self 防止目标不可达或者ibgp邻居处所在的igp宣告、将于EGP直连的网络重分发进igp
建议用环回口建邻居
本地优先级属性
公认自由决定属性,告诉as中的路由器,那条路径离开as的首选路径,本地优先级越高,路径被选择的可能性就越大,注意优先级
属性只能在AS中的路由器之间交换,只适用于内部邻居,用于邻居对等体之间的update消息
本地优先级可以再本AS和大联盟内传递,越大越优先,影响路由器的出站流量 默认情况下 local-preference为100
权重属性
Cisco私有的参数本地有效,缺省条件下本地始发的路径具有相同的weight值,(即32768)所有其他的路径weight值为零,越大越优先
权重只影响当前路由器,指定邻居的权重用 neighbor iP address | peer-group-name wiight weight可以再neighbor的入方向设置范围0-65535
MED属性
被称为度量值,是可选的非传递属性,承载EBGP的update消息中用于向外部邻居指出进入的AS的首选路径 越小越优先
共同体属性
是一组共享某些共同特性的目的地,用于简化路由策略的执行
community 属性石一组4个8位组的数值,前两个8位组表示自治系统,后两个8位组表示出于管理的标示符,格式为NN:AA
团体属性是一个可传递属性 类型代码为8
BGP的路由汇总
2种
summary
静态路由手工汇总指向null 0 在network 引入BGP(缺乏灵活性)
明细路由断了汇总仍然会被引入
aggregate 聚合
聚合路由在本路由器上哪生成一条聚合路由下一跳为0.0.0.0
配置:
aggregate-address 172.16.12.0 255.255.252.0 ?
advertise-map Set condition to advertise attribute
as-set Generate AS set path information
attribute-map Set attributes of aggregate
route-map Set parameters of aggregate
summary-only Filter more specific routes from updates
suppress-map Conditionally filter more specific routes from updates
nlri
Advertise-map
BGP路由决策
bgp的rib包括3部分
adj-RIBs-in 存储从对等体学习到的路由更新中为处理的路由信息, 在adj中被认为是可行路由
LOC-RIB 包含BGP发言者对ADJ-RIBS-IN 中的路由应用本地策略之后选定的路由
adj-RIBs-OUT 包含了BGP 发言者向对等体宣告路由
路由选择3个阶段
一计算每条可行路由的优先级
二从所以可用路由中为特定目的地选出最佳路由,并将其安装到LOC-RIB中
三将相应的路由加入到ADJ-RIBS-OUT 中,以便向对等体进行宣告
选路原则13条
weight (cisco私有)本地有效
local-preference 本地优先级 用于本AS和大联盟内传递默认100
本地起源 路由器本地始发的路径优先,在fib中显示0.0.0.0
as-path 评估as-path的长度,最短的路径优先
起源代码
评估路由的origin code属性越小越优先
MED metric 传递不能传出AS 例外始发路由器尅呀metric可以传给邻居可以是IBGP/EBP但ebgpbu 再传不出去
ebgp优与ibgp
最近的igp邻居 这里指peer的更新源在我的路由器里显示,那个最近那个最优
OSPF是否考虑O,OIA,OE1,OE2只看cost不看O,OI,OE
如果配置了maximum-path(ibgp) 如果存在多条等价的路径会插入多条路径,默认为1
最老的,与本端最早建立邻居关系的【peer 被有优选,因为最稳定
最优的route-id
多跳路径的始发路由器id相同,那么选择cluster-list 长度短的
优选来着最低邻居地址的路径
路由翻动(route flaps) 和路由惩罚 (route dampening)
路由翻转原因很多,如链路不稳定,接口不稳定,接口故障,ISP工程施工,配置错误
解决办法 ebgp建立邻居似乎不要将环回口引入BGP network+backdoor
路由反射器
由于RIP的水平分割问题所以ibgp需要full mesh 由于整个ibgp full mesh的话需要建立的session数为N*(n-1)/2,
不具有扩展性,一种是路由反射器,另一种是联邦(具有ebgp特性)
今后抽出时间写一些更详细的一些知识分享给大家,部分内容来自其他朋友分享的,学习BGP此理解必备并一定要透彻。
本文出自 “技术成就梦想@yuan” 博客,请务必保留此出处http://iyuan.blog.51cto.com/8506693/1552650
BGP协议的学习及一些特性