BGP详解.docx
- 文档编号:3796919
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:27
- 大小:271.90KB
BGP详解.docx
《BGP详解.docx》由会员分享,可在线阅读,更多相关《BGP详解.docx(27页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BGP 详解