BGP详解.docx

上传人:b****3 文档编号:3796919 上传时间:2022-11-25 格式:DOCX 页数:27 大小:271.90KB
下载 相关 举报
BGP详解.docx_第1页
第1页 / 共27页
BGP详解.docx_第2页
第2页 / 共27页
BGP详解.docx_第3页
第3页 / 共27页
BGP详解.docx_第4页
第4页 / 共27页
BGP详解.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

BGP详解.docx

《BGP详解.docx》由会员分享,可在线阅读,更多相关《BGP详解.docx(27页珍藏版)》请在冰豆网上搜索。

BGP详解.docx

BGP详解

BGP

为什么使用BGP

BGP是可靠的,基于TCP(PortNumer179)进行建立和维护连接,并且具有并使用TCP的滑动窗口的机制来更新路由表,可以支持一次性的大量路由条目的更新.BGP是增量更新,同时也是触发更新;周期性的发送Keepalive信息来验证TCP连接是否正常,以确保对方的路由器状态是正常的。

PS:

EIGRP(使用IPV4协议号89)和OSPF-V2(使用IPV4协议号88)使用One-One窗口机制,OSPF一次更新100条路由。

BGP的使用原则

1.  多条路径时,BGPSpeaker只选最优的给自己使用

2.  BGPSpeaker只把自己的路由通告给邻居

3.  从EBGP获得的路由会向它所有BGP邻居通告(EBGP/IBGP)

BGPSpeaker从IBGP获得的路由不会通告给它的IBGP邻居(BGP的水平分割)IGP是基于端口的水平分割;而IBGP是基于邻居的水平分割。

水平分割的作用是避免产生路由环路。

4.  BGPSpeaker从IBGP获得的路由是否通告给它的EBGP邻居要服从IGP和BGP是否同步来决定

5.  邻居关系一建立,BGPSpeaker就把自己所有的BGP最优路由通告给新的邻居

BGP邻居协商过程(4种Message)

1.Open(code1):

用于建立连接,包含版本号(如BGP3/BGP4)HoldTime=180s(是一个协商的过程,以较小的HoldTime为准),Router-ID(OSPF和BGP可以手动配置),AS号(范围从1~65535,其中64512~65535的AS编号范围留作私有);

2.KeepAlives(code4):

周期发送用于维护连接检查路径(这个包是不可靠的),T=HoldTime/3,HoldTime=0=>NoKeepAlive.,keepalive是个19字节周期发送的BGP消息头标,没有数据域。

3.Update(code2):

消息包含了三个组件:

网络层可达性消息(NLRI)、路径属性和被撤销的路由。

包括到达目的网络的路径和属性,更新路由信息用,一次更新只有一条路径,但可以有多条网络。

Update可以删除(宣告不可达)和增加(宣告可达)路由.其内容是前缀的长度。

4.Notification(code3):

网络中出现错误(Error),检测到后断开连接并发送通知给对方。

5.Route-Refleshmessage:

一个可选的message(negotiatedduringcapabilityadvertisement)thatissenttorequestdynamicBGProuteupdatesfromtheAdj-RIB-OuttableofaremoteBGPspeaker

 

PS:

BGPtime

在BGP路由配置模式下可以配置全局的BGPtimer:

timersbgp70210

对于特定的neighbor可以使用特定的BGPtimer:

neighbor172.17.1.2timers80240

 

过程:

Idel,connect,opensent,openconfirm,establish。

BGP邻居建立会话的5种状态:

1.       Idle:

查找路由表,该过程BGP对它的资源进行初始化,复位一个连接重试计时器,发起一条TCP连接,并开始倾听远程对等体所发起的连接。

2.  Connect:

找到路由表后进行TCP三次握手,TCP连接成功,则转到OpenSent状态,TCP连接失败,则转到active状态,将尝试再次连接。

3.  OpenSent:

握上手后发送Openmessage消息,等待其对等体发送打开消息,如果出错,则发送一条出错消息并退回空闲状态,如果无错,则开始发送Keepalive并复位keepalive计时器。

4.  OpenConfirm:

收到对方发来的Open消息,如果收到keepalive消息,BGP就进入established状态,邻居关系协商完成;如果系统收到一条更新或keepalive消息,它将重新启动保持计时器;如果收到Notification消息,BGP就退回到空闲状态。

5.  Established:

会话建立,邻居关系协商过程最终状态;这时BGP将开始与它的对等体交换路由更新数据包。

PS:

Active状态:

当路由器发送出OPEN包给邻居等待回应,如果长时间未接收到回应则超时,超时后状态更改为Idle,试图发起TCP连接获得对等体,成功转到OpenSent状态,连接重试计时器超时,退回连接状态。

,这是由于TCP链路上出现了问题所致。

产生问题的原因主要有:

1.         Neighbor命令后面的ip-address配置有错;

2.         没有打上Neighbor命令(两边都要)

3.         更新源错误,或者更新源不可达。

Debug信息:

Aspen#

18:

24:

33:

BGP:

192.168.1.221wentfromIdletoActive

18:

24:

41:

BGP:

192.168.1.221wentfromActivetoOpenSent

18:

24:

42:

BGP:

192.168.1.221wentfromOpenSenttoOpenConfirm

18:

24:

42:

BGP:

192.168.1.221wentfromOpenConfirmtoEstablished

18:

24:

43:

BGP:

192.168.1.221computingupdates,neighborversion0,tableversion

n1,startingat0.0.0.0

18:

24:

43:

BGP:

192.168.1.221updateruncompleted,ranfor0ms,neighborversion

0,startversion1,throttledto1,checkpointnet0.0.0.0

 

BGPInputEvents

 

 

BGP的3个数据库

邻居表、BGP转发表(也叫转发库)、IP路由表。

 

BGP同步和黑洞问题

BGP路由器不应该将从其内部BGP邻居处学到的目的地网络通告给其外部邻居路由器,除非这些目的地网络是通过IGP可达的。

不同步的时候,路由表里面显示的是非最优(①下一跳是否可达②同步原则是否满足),同步默认是打开的,全互连时(用于IBGP)需要关闭同步,命令是:

Router(config-router)#nosynchronization

 

 

 

BGP路由进程

从对等体处收到的路由->输入策略引擎->路由判定过程(BGP表)->路由器所用的路由(IP路由表)->输出策略引擎->通告给对等体的路由

 

 

 

 

BGP的下一跳跳属性

1.  在多路广播网络中,其下一条属性不变

如图:

B通过EBGP通告网络172.30.0.0给A而不改变其下一跳属性10.10.10.2,这种行为防止了一个不必要的Hop,因为他们都同在一个多路广播网络里面。

如果改变了其下一跳属性为10.10.10.1,当AS65000作为一个TransitAS的时候,AS64520的EBGPRouter就不是以最优的路径通过AS65000。

PS:

BGP是一种AS-by-AS的路由协议,它的下一跳指的是下一个AS.而不是下一个Router

 

1.  从EBGP学习到的路由,其下一跳属性不变,可以手动做next-hop-self

2.  在IBGP关系中,下一跳地址,就是通告该路由的IBGP的更新源。

还是Router-id?

jeans_young:

next_hop的三个规则是这样的:

a.如果是由EBGPpeer通告的BGPupdate报文,那么next_hop就是AS外这个EBGPpeer的IP地址。

(实际上,是与本AS直连的接口IP地址)

b.假如BGPupdate报文是由IBGPpeer通告的,那么next_hop就是这个IBGPpeer发出更新报文的接口IP地址

c.如果update报文最开始是由EBGPpeer通告,但是是从本AS内的边界路由器(也就是IBGPpeer),那么next_hop是EBGPpeer的通告出更新的接口IP地址,而不是本AS的这个IBGPpeer。

ps:

其实,前两条规则,比较容易理解,我们可以这样记忆前两条:

谁通告的,那么下一跳就是它。

主要是第三条有点特殊。

但是只要我们把BGP协议本身的起源想一想就容易理解了。

BGP是对于大型互联网的一个路由协议。

它其实我们应该把它理解成路径向量协议。

也就是说它的视角是AS,而不是单个的router。

BGP是宏观视角,IGP则是微观视角。

所以,像第三种情况,我们要把视角上升到一个更高的高度——从AS来看。

那么就容易理解了。

既然是IBGPpeer转发通告EBGPpeer发来的路由,那么得追根溯源。

最终追到EBGPpeer。

所以它才是真正的下一跳。

这里,我们会发现一个问题,就是假如这个边界路由器没有告诉本AS的其它路由器到这个EBGPpeer怎么走,那么这样路由不可达就会导致数据包被丢弃。

所以引入了next_hop_self机制,配置在边界路由器上,使得IBGPpeer要发路由更新给EBGPpeer的时候,强制从自己这里走,因为对于边界路由器来讲,他是知道怎么到达EBGPpeer的。

这个其实有点类似于代理的概念。

比如proxyARP。

就是把自己的MAC地址通告给ARP请求者,而不是把ARP请求的真正目的MAC回送回去。

目的就是代理。

 

BGP属性

 

①公认属性(MustberecognizedbyallcompliantBGPimplementationsArepropagatedtootherneighbors)

②Well-knownmandatoryattributes(Mustbepresentinallupdatemessages)

③Well-knowndiscretionaryattributes(Maybepresentinupdatemessages)

④可选(Recognizedbysomeimplementations(couldbeprivate),expectednottoberecognizedbyeveryone,Recognizedoptionalattributesarepropagatedtootherneighborsbasedontheirmeaning)

⑤可选传递属性(Ifnotrecognized,aremarkedaspartialand

propagatedtootherneighbors)

⑥可选不可传递属性(Discardedifnotrecognized)

 

公认必选:

ORIGIN/AS_PATH/NEXT_HOP

公认自选:

LOCAL_PREF/ATOMIC_AFFREGATE

任选可透明传递:

AGGREGATOR/COMMUNITY

任选非可透明传递:

MED/ORIGINATOR_ID/CLUSTER_LIST

 

AS-path(prepending):

BGP中用于检测环路,当一个AS-PATH中有两个相同的AS号说明有环路产生,如果自己的AS出现在某接收到的路由AS-PATH中,?

接收吗?

是一个有序列表。

 

Next-hop:

详见上方。

MED:

又叫BGP的metrics值(没有MED的路由->MED=0;缺少MED的路由,将成为最先优选的路由),作用是影响邻居AS的路由选择。

在有多出口的本AS中,决定邻居AS更优先从哪个出口进入本AS,默认值是0,值越小优先级越高。

MED仅向EBGP邻居发送。

它是可选的、非传递属性。

bgpbestpathmissing-as-worst命令修改ciscoios对med的行为,使得和最新的ietf标准(丢失MED->将MED设置成无穷大;缺少MED的路由,将成为最后优选的路由)一致

如果没有启用bgpdeterministic-med,接收到的路由的顺序可能影响基于med的最有路径选择,当从多个as收到同一条路由,而且具有完全一样的路径长度和不同的med,就会发生下面的情况:

A)ASPATH1,MED100,internal,igpmetrictoNEXT_HOP10

B)ASPATH2,MED150,internal,igpmetrictoNEXT_HOP5

C)ASPATH1,MED200,external

在没有配置bgpdeterministic-med的路由会优选B(较低的IGPmetric),接着是C(EBGP>IBGP),而C的MED值高于A

 

在启用bgpdeterministic-med的Router,将清除对基于MED最优路径选择的临时依赖,它可以确保满足MED的原始要求,来控制进入本AS的流量的选择,会对进入被AS的所有路由进行med比较,最后选择有最小med值的A是最优路径,但是如果Router配置了bgpalways-compare-med,将总是采用BGPMED判断。

 

Weight(CiscoOnly):

权重,(范围0到65,535)weight是CISCO私有的参数,路由器配置了权重后在本地有效,缺省情况下,从对等学习到的所有路由的Weight都是0,由本Router产生的路由的Weight都是32768。

作用是影响路由选择,值越大优先级越高。

不向BGP邻居发送,仅限本地路由器,

neighbor{ip-address|peer-group-name}weightdefault-weight,将邻居发送来的路由的weight值改变

 

Local-preference:

Local-preference是在一个多出口的as中控制流量更优先的从哪个出口出去,Local-preference的默认值是100,更改值的命令是:

Router(config-router)#bgpdefaultlocal-preferencevalue他的值越高,其优先级越大.本地优先值仅在AS内部中有效.(学习的路由影响出去的流量,公告出去的路由影响进来的流量.)

Origin:

起源(也叫起点)属性。

注入BGP路由表有三种方式(来源/起源):

一种是用Network命令进行,在BGP路由表显示为i(源属性:

0),另一种是再发布EGP获得的,在路由表中显示为E(源属性:

1),最后一种是从IGP或静态路由再发布过来的,显示为?

(源属性:

2)。

Communities(团体):

扩展communities属性(AS号:

AS自己定义的号码)

将他们化成10进制就是CISCO路由器对标准communities属性的表示方法。

(1).INTERNET:

INTERNET团体没有一个确定的值,所有属于这个团体的路由豆芽一个缺省值,可以自由的公布属于这个团体的路由(Advertisetoanypeer)

(2)NO_EXPORT(4294967041或者0Xffffff01):

接收到的携带该值的路由不能公布给EBGP对等体,或者如果配置了一个联盟,该路由不能在联盟范围以外公布――邻居

(3)NO_ADVERTISE(4294967042或者0Xffffff02):

接收到的携带该值的路由不能公布给EBGP或者IBGP的对等体。

――不广播,只留给自己,自私(Donotadvertisetoanypeer/willgotonext-hoponly

(5).LOCAL_AS(4294967043或者0Xffffff03):

RFC1997称这个属性为NO_EXPORT_SUBCONFED.不能将接收到的携带该值的路由公布给EBGP对等体,以及在联盟内的其他AS的对等。

――本AS内

(6).None(Removesthecommunitywith:

setcommunitynone)

 

TransitAS

StubAS经过这个AS才能到达其它的AS。

BGP汇总(RouteAggregation)

1.  BGP默认是自动汇总(主类网络)的,可以用noauto-summary来关闭

可以用network*.*.*.*mask*.*.*.*来手动汇总(只有在路由表里面有这些条目的时候,才可以用这条命令来实现手动汇总,而且只能用这条命令公布200条前缀)Network命令不仅宣告汇总路由,并且也将具体路由宣告出去。

如果不想将具体路由宣告出去,需进行过滤(前面提到的Outbound策略)。

Network命令本身不能做汇总,需要IProute命令配合。

这种汇总比较麻烦,我们并不推荐。

只当需要将已由IGP汇总(OSPF、EIGRP等)后的路由原封不动地发布到BGP里的情况下才使用。

(自动汇总只能汇总到主类网络)

 

PS:

Network命令是将已存在(和已由IGP汇总)的路由表宣告到BGP中。

无Mask的宣告将是有类网络(A、B、C),有Mask的则是无类网络。

2.  Router(config)#iprouteprefixmasknull0Null0是空端口,不是一个物理的端口,目的是告诉其它路由从我这个路由走,但具体怎么走,不是指定一个物理的端口。

只是在路由表里面形成类似于已经汇总的路由,有点路由欺骗的味道,当到达本Router的数据包目的地可达的时候(有相关的路由),不会出现问题,但是,当路由不可到达的时候,所有的包将发送给NULL0口,这样可以防止DDOS攻击。

iproute192.168.192.0255.255.248.0null0(在IGP表里面有的条目)

routerbgp100

network192.168.192.0mask255.255.248.0(向所有建立的邻居都发送聚合路由)

 

3.   

Router(config-router)#aggregate-addressip-addressmask[summary-only][as-set]

对BGP表中的路由器条目进行汇总,在BGP路由进程配置模式下Aggregate-address汇总命令它是创建一个汇总的路由并进行宣告。

Summary-only参数是只宣告汇总路由,抑制具体路由(不发布具体路由)。

AS-Set参数:

不同路由经过的AS可能不一样,这条命令的作用在于汇总路由知道具体路由所经过的AS的集合,不是有序的AS-PATH),以避免产生环路。

这样汇总不须人工指定空端口,系统会自动产生。

Sun#showipbgp192.168.192.0255.255.248.0

BGProutingtableentryfor192.168.192.0/21,version23

Paths:

(1available,best#1)

Advertisedtononpeer-grouppeers:

192.168.1.229

300,(aggregatedby300192.168.1.250)

192.168.1.233from192.168.1.233(192.168.1.250)

OriginIGP,localpref100,valid,external,atomic-aggregate,best,ref2

②用aggregate-address和suppress-map过滤/抑制路由

routerbgp100

nosy

neighbor192.168.1.253remote-as200

neighbor192.168.1.246remote-as200

aggregate-address192.168.192.0255.255.248.0suppress-mapVERMONT

aggregate-address192.168.192.0255.255.248.0suppress-mapCALIFORNIA

aggregate-address192.168.192.0255.255.248.0attribute-mapORIGINsuppress-map

VERMONT

aggregate-address192.168.192.0255.255.248.0as-setsummary-onlyadvertise-map

ALLOW_ROUTE

!

ipprefix-listSUPPRESSEDROUTESseq5permit192.168.192.0/22le24

ipprefix-listSUPPRESSEDROUTESseq10permit192.168.199.0/24

access-list1permit192.168.195.00.0.0.255(隐式拒绝all,表示对其他所有路由都不抑制)

access-list2deny192.168.197.0

access-list2permitany

!

route-mapVERMONTpermit10

matchipaddress1

!

route-mapCALIFORNIApermit10

matchipaddressprefix-listSUPPRESSEDROUTES

route-mapORIGINpermit10

setoriginincomplete

!

route-mapALLOW_ROUTEpermit10

matchipaddress2

 

在access-list中的permit表示运行被抑制的,而deny是不运行被抑制。

③用aggregate-address和attribute-map改变聚合路由的属性

例子在上方,聚合路由有一个IGP的ORIGUN属性。

 

④neighbor*.*.*.*distribute-list命令过滤路由

neighbor192.168.1.249distribute-list1out(阻止出站路由)(in-阻止入站路由)!

access-list1deny192.168.192.0(拒绝)

acces

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1