BGP路由協議詳解(完整篇)

原文鏈接:http://xuanbo.blog.51cto.com/499334/465596/

2010-12-27 12:02:45

?

上個月我寫一篇關于BGP協議的博文,曾許諾過要完善這個文檔,但因最近的工作和授課很忙,所以沒有時間進行完善。為了實現這個承諾,我在去外地出差期間對BGP協議詳解博文進行一些修改,其中內容包括了一些實驗,以及一些內容的補充和深入闡述,更宜于網友們學習BGP路由協議。因為這個文檔出來的很晚,也希望網友們見諒!?

?????此BGP協議的內容也不算太難,一些關于BGP的高級應用,會在以后MPLS?協議和MPLS流量工程中的內容中會更深入的講解!???
????希望通過本文檔能幫助那些愛好網絡知識和那些參加CCIE考試的網友們提供一些幫助。?

??一、BGP的概況??

BGP最新的版本是BGP第4版本(BGP4),它是在RFC4271中定義的;一個路由器只能屬于一個AS。AS的范圍從1-65535(64512-65535是私有AS號),RFC1930提供了AS號使用指南。

BGP的主旨是提供一種域間路由選擇系統,確保自主系統只能夠無環地交換路由選擇信息,BGP路由器交換有關前往目標網絡的路徑信息。

BGP是一種基于策略的路由選擇協議,BGP在確定最佳路徑時考慮的不是速度,而是讓AS能夠根據多種BGP屬性來控制數據流的傳輸。

1、BGP的特性??

??BGP將傳輸控制協議(TCP)用作其傳輸協議。是可靠傳輸,運行在TCP的179端口上(目的端口)

??由于傳輸是可靠的,所以BGP0使用增量更新,在可靠的鏈路上不需要使用定期更新,所以BGP使用觸發更新。

??類似于OSPF和ISIS路由協議的Hello報文,BGP使用keepalive周期性地發送存活消息(60s)(維持鄰居關系)。

??BGP在接收更新分組的時候,TCP使用滑動窗口,接收方在發送方窗口達到一半的時候進行確定,不同于OSPF等路由協議使用1-to-1窗口。

??豐富的屬性值

??可以組建可擴展的巨大的網絡

2、BGP的三張表??

??鄰居關系表

n?所有BGP鄰居

??轉發數據庫

n?記錄每個鄰居的網絡

n?包含多條路徑去往同一目的地,通過不同屬性判斷最好路徑

n?數據庫包括BGP屬性

??路由表

n?最佳路徑放入路由表中

n?EBGP路由(從外部AS獲悉的BGP路由)的管理距離為20

n?IBGP路由(從AS系統獲悉的路由)管理距離為200

如下圖所示。

clip_image002

??鄰居表,包含與之建立BGP連接的鄰居

n?使用命令show?ip?bgp?summary可以查看到???

Router#sh?ip?bgp?summary?

BGP?router?identifier?11.1.1.1,?local?AS?number?100

BGP?table?version?is?8,?main?routing?table?version?8

5?network?entries?using?585?bytes?of?memory

6?path?entries?using?312?bytes?of?memory

4/3?BGP?path/bestpath?attribute?entries?using?496?bytes?of?memory

1?BGP?AS-PATH?entries?using?24?bytes?of?memory

0?BGP?route-map?cache?entries?using?0?bytes?of?memory

0?BGP?filter-list?cache?entries?using?0?bytes?of?memory

BGP?using?1417?total?bytes?of?memory

BGP?activity?5/0?prefixes,?6/0?paths,?scan?interval?60?secs

Neighbor?V?AS?MsgRcvd?MsgSent?TblVer?InQ?OutQ?Up/Down?State/PfxRcd

10.1.1.1?4?100?14?18?8?0?0?00:09:32?2

11.1.1.2?4?200?12?16?8?0?0?00:07:03?1

?

??轉發表,從鄰居那里獲悉的的所有路由都被加入到BGP轉發表中。

n?使用命令show?ip?bgp可以查看???

Router#sh?ip?bgp?

BGP?table?version?is?8,?local?router?ID?is?11.1.1.1

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?>?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

Network?Next?Hop?Metric?LocPrf?Weight?Path

*>?10.1.1.0/24?0.0.0.0?0?32768?i

*?i?10.1.1.1?0?100?0?i

*>?11.1.1.0/24?0.0.0.0?0?32768?i

*>i192.168.1.0?10.1.1.1?0?100?0?i

*>?192.168.2.0?0.0.0.0?0?32768?i

*>?192.168.3.0?11.1.1.2?0?0?200?i

?

??路由表,BGP路由選擇進程從BGP轉發表中選出前往每個網絡的最佳路由,并加入到路由表中。

n?使用命令show?ip?route?bgp可以查看???

Router#sh?ip?route?bgp?

B?192.168.1.0/24?[200/0]?via?10.1.1.1,?00:13:11

B?192.168.3.0/24?[20/0]?via?11.1.1.2,?00:11:19

?

3、BGP消息類型??

??open:用來建立最初的BGP連接。(包含hold-time,router-id)

??Keepalive:對等體之間周期性的交換這些消息以保持會話有效。(默認60秒)

??Update:對等體之間使用這些消息來交換網絡層可達性信息。

??Notification:這些消息用來通知出錯信息。

所有的BGP分組共享同樣的公有首部,在學習不同類型的分組之前,先討論公共首部,如下圖所示,這個首部的字段如下。

??標記:這個16字節標記字段保留給鑒別用

??長度:這個2字節字段定義包括首部在內的報文總長度

??類型:這個1字節段定義分組的類型,用數值1至4定義BGP消息類型

clip_image004

打開消息:主要是利用此報文建立鄰居,運行BGP的路由器打開與鄰居的TCP連接,并發送打開報文,如果鄰居接受這種鄰居關系,由響應保活報文。打開報文格式如下所示。

clip_image006

??版本:這個1字節字段定義BGP的版本,當前的版本是4

??自治系統:這個2字節字段定義自治系統號。

??保持時間:這個2字節字段定義一方從另一方收到保活報文或更新報文之前所經過的最大秒數,若路由器在保持時間的期間內沒有收到這些報文中的一個,就認為對方是不工作的。

??BGP協議標識:這是2字節字段,這定義發送打開報文的路由器,為此,這個路由器通常使用它的IP地址中的一個作為BGP標識符。

??選項長度:打開報文還可以包含某些選項參數,若包含,則這個1字節字段定義選項參數總長度,若沒有選項參數,則這個字段的值為0

??選項參數:若選項參數長度的值不是0,則表示有某些選項參數,每一個選項參數本身又有兩個字段,參數長度和參數值,到現在已定義的唯一的選項參數是鑒別。

如下圖是采用ethereal采集到的BGP的打開消息報文。

clip_image008

更新報文:更新報文是BGP協議的核心,路由器使用它來撤銷以前已通知的終點和宣布到一個新終點的路由,或兩者都有,應該注意:BGP可以撤銷好幾個在以前曾通知過的終點,但在單個更新報文中則只能通知一個新終點,如下所示。

clip_image010

??不可行路由長度:這個2字節字段定義下一字段的長度。

??撤銷路由:這個字段列出必須從以前通知的清單中刪除的所有路由

??路徑屬性長度:這個2字節字段定義下一個字段的長度

??路徑屬性:這個字段定義到這個報文宣布可達性的網絡路徑屬性

??網絡層可達性信息:這個字段定義這個報文真正通知的網絡。它有一個長度字段和一個IP地址前綴,長度定義前綴中的位數。前綴定義這個網絡地址的共同部分。例如,若這個網絡是123.1.10.0/24,則網絡前綴是24而前綴是123.1.10。

下圖為,是采用ethereal采集到的BGP的更新消息報文。

clip_image012

clip_image014

保活報文:是用來告訴對方自己是工作的,保活報文只包括公共首部,如下圖所示。

clip_image016

下圖為,是采用ethereal采集到的BGP的保活報文。

clip_image018

通知報文:當檢測出差錯狀態或路由器打算關閉連接時,路由器就發送通知報文,如下圖所示。

clip_image020

??差錯碼:這個1字節字段定義差錯的種類

??差錯子碼:這個1字節字段進一步定義每一種差錯的類型

??差錯數據:這個字段可用來給出關于該差錯的更多的診斷信息

具體的差錯碼,如下表所示。???

差錯碼

差錯碼說明

差錯子碼說明

1

報文首部差錯

3種不同的子碼:同步問題(1),壞的報文長度(2),壞的報文類型(3)

2

打開報文差錯

6種不同的子碼:不支持的版本(1),壞的對等AS(2),壞的BGP標識符(3),不支持的可選參數(4),鑒別失敗(5),不可接受的保持時間(6)

3

更新報文差錯

11 種不同的子碼:錯誤形成的屬性表(1),不能識別的熟知屬性(2),丟失熟知屬性(3),屬性標志差錯(4),屬性長度差錯(5),非法起點屬性 (6),AS路由選擇環路(7),無效的下一路屬性(8),可選屬性差錯(9),無效的網絡字段(10),錯誤形成的AS_PATH(11)

4

保持計時器截止期到

未定義子碼

5

有限狀態機差錯

定義過程的差錯,未定義子碼

6

關閉

未定義子碼

?

下圖為,是采用ethereal采集到的BGP的通知報文。

clip_image022

4、建立鄰居的過程??

在兩個BGP發言人交換信息之前,BGP都要求建立鄰居關系,BGP不是動態地發現所感興趣的運行BGP的路由器,相反,BGP使用一個特殊的鄰居IP地址來配置的。

BGP使用周期性的Keepalive分組來確認BGP鄰居的可訪問性。

Keepalive 計時器是保持時間(Hold?Time)的三分之一,如果發給某一特定BGP鄰居三個連續的Keepalive分組都丟失的話,保持時間計時器超時,那個 鄰居被視為不可達,RFC1771對保持時間的建議是90秒,Keepalive計時器的建議值是30秒。

按照RFC1771,BGP建立鄰居關系要經歷以下幾個階段,如下圖所示。

clip_image024

??Idle在 此狀態下不分配網絡資源,不允許傳入的BGP連接。當在持續性差錯條件下,經常性的重啟會導致波動。因此,在第一次進入到空閑狀態后,路由器會設置連接重 試定時器,在定時器到期時才會重新啟動BGP,思科的初始連接重試時間為60秒,以后每次連接重試時間都是之前的兩倍,也就是說,連接等待時間呈指數關系 遞增。

??Connect:(已經建立完成了TCP三次握手),BGP等待TCP連接完成,如果連接成功,BGP在發送了OPEN分組給對方之后,狀態機變為OpenSent狀態,如果連接失敗,根據失敗的原因,狀態機可能演變到Active,或是保持Connect,或是返回Idle。

??Active:在這個狀態下,初始化一個TCP連接來建立BGP間的鄰居關系。如果連接成功,BGP在發送了OPEN分組給對方之后,狀態機變為OpenSent狀態,如果連接失敗,可能仍處在Active狀態或返回Idle狀態。

??OpenSentBGP發送OPEN分組給對方之后,BGP在這一狀態下等待OPEN的回應分組,如果回應分組成功收到,BGP狀態變為OpenConfirm,并給對方發送一條Keepalive分組,如果沒有接到回應分組,BGP狀態重新變為Idle或是Active。

??OpenConfirm這時,距離最后的Established狀態只差一步,BGP在這個狀態下等待對方的Keepalive分組,如果成功接收,狀態變為Established,否則,因為出現錯誤,BGP狀態將重新變為Idle。

??Established這是BGP對等體之間?可以交換信息的狀態,可交換的信息包括UPDATE分組、KeepAlive分組和Notification分組。

connect和active都是TCP連接階段,ACTIVE是發起方,connect是應答方。可以使用命令show?ip?bgp?summary、debug?ip?bgp?events、debug?ip?bgp來查看。???

Router#debug?ip?bgp?

BGP?debugging?is?on?for?address?family:?IPv4?Unicast

*Jun?23?22:00:05.619:?BGP:?11.1.1.2?went?from?Idle?to?Active

*Jun?23?22:00:05.627:?BGP:?11.1.1.2?open?active?delayed?30128ms?(35000ms?max,?28%?jitter)

*Jun?23?22:00:06.215:?BGP:?11.1.1.2?passive?open?to?11.1.1.1

*Jun?23?22:00:06.219:?BGP:?11.1.1.2?went?from?Active?to?Idle

*Jun?23?22:00:06.219:?BGP:?11.1.1.2?went?from?Idle?to?Connect

*Jun?23?22:00:06.227:?BGP:?11.1.1.2?rcv?message?type?1,?length?(excl.?header)?26

*Jun?23?22:00:06.227:?BGP:?11.1.1.2?rcv?OPEN,?version?4,?holdtime?180?seconds

*Jun?23?22:00:06.231:?BGP:?11.1.1.2?went?from?Connect?to?OpenSent

*Jun?23?22:00:06.231:?BGP:?11.1.1.2?sending?OPEN,?version?4,?my?as:?100,?holdtime?180?seconds

*Jun?23?22:00:06.231:?BGP:?11.1.1.2?rcv?OPEN?w/?OPTION?parameter?len:?16

*Jun?23?22:00:06.231:?BGP:?11.1.1.2?rcvd?OPEN?w/?optional?parameter?type?2?(Capability)?len?6

*Jun?23?22:00:06.235:?BGP:?11.1.1.2?OPEN?has?CAPABILITY?code:?1,?length?4

*Jun?23?22:00:06.235:?BGP:?11.1.1.2?OPEN?has?MP_EXT?CAP?for?afi/safi:?1/1

*Jun?23?22:00:06.235:?BGP:?11.1.1.2?rcvd?OPEN?w/?optional?parameter?type?2?(Capability)?len?2

*Jun?23?22:00:06.235:?BGP:?11.1.1.2?OPEN?has?CAPABILITY?code:?128,?length?0

*Jun?23?22:00:06.239:?BGP:?11.1.1.2?OPEN?has?ROUTE-REFRESH?capability(old)?for?all?address-families

*Jun?23?22:00:06.239:?BGP:?11.1.1.2?rcvd?OPEN?w/?optional?parameter?type?2?(Capability)?len?2

*Jun?23?22:00:06.239:?BGP:?11.1.1.2?OPEN?has?CAPABILITY?code:?2,?length?0

*Jun?23?22:00:06.239:?BGP:?11.1.1.2?OPEN?has?ROUTE-REFRESH?capability(new)?for?all?address-families?

BGP:?11.1.1.2?rcvd?OPEN?w/?remote?AS?200

*Jun?23?22:00:06.243:?BGP:?11.1.1.2?went?from?OpenSent?to?OpenConfirm

*Jun?23?22:00:06.243:?BGP:?11.1.1.2?send?message?type?1,?length?(incl.?header)?45

*Jun?23?22:00:06.359:?BGP:?11.1.1.2?went?from?OpenConfirm?to?Established

*Jun?23?22:00:06.363:?%BGP-5-ADJCHANGE:?neighbor?11.1.1.2?Up

?

5、建立IBGP鄰居??

IBGP運行在AS內部,不需要直連。IBGP有水平分割,建議使用Full?Mesh,由于Full?Mesh不具有擴展性,為了解決IBGP的Full?Mesh問題,使用路由反射器(RR)和聯邦兩種方法來解決。主要減少了backbone?IGP中的路由。

Neighbor后所指的地址可達。發起方不能是缺省路由,應答方不能是缺省路由。

可以使用下面兩種方法來建立IBGP鄰居:

??鄰居之間可以通過各自的一個物理接口建立對等關系,該對等關系是通過屬于它們共享的子網的IP地址來建立的。

??鄰居之間也可以通過使用環回接口建立對等關系。

在IBGP中,由于假定了IBGP鄰居在物理上直接相連的可能性不大,所以將IP分組頭中的TTL域設置為255。

??6、建立EBGP鄰居??

EBGP運行在AS與AS之間的邊界路由器上,默認情況下,需要直連或使用靜態路由,如果不是直連,必須指EBGP多跳,Neighbor?x.x.x.x?ebgp-multihop?[1-255]?不選擇為最大值,255跳。

可以使用下面兩種方法來建立EBGP鄰居:

??鄰居之間可以通過各自的一個物理接口建立對等關系。

??鄰居之間也可以通過使用環回接口建立對等關系。

?

??7、neighbor?ip-address?remote-as?number命令??

例:neighbor?10.1.1.1?remote-as?100

指定對方屬于哪一個AS。所指的10.1.1.1地址,必須在IGP中可達。

??允許鄰居用這個地址來訪問我的179端口,但沒有指明訪問本路由器的哪個地址,只檢查源地址。

??本路由器以更新源地址去訪問neighbor后面這個地址的179端口,是否可以建立TCP鏈接要看對方是否允許我的更新源來訪問它。

示例:

clip_image026

R1/R2兩臺路由器運行RIPv2,都將環回口宣告進RIP。這時假如在兩臺路由器之間運行IBGP鄰居關系:

R1neighbor?192.168.2.1?remote-as?1

R2neighbor?10.1.1.1?remote-as?1

雙方都沒有寫更新源。(neighbor?x.x.x.x?update-source?lo0代表本路由器的更新源為lo0口,BGP的包以這個接口的地址為源地址發送出去。)

一邊指環回口,一邊指直連接口。可以建立鄰居。這里有2個TCP的session,其中只有R1去訪問R2的環回口的179端口的TCP?session可以建立。可以用show?tcp?brief查看。????

Router#sh?tcp?brief?

TCB?Local?Address?Foreign?Address?(state)

65693960?10.1.1.1.51124?192.168.2.1.179?ESTAB

?

這時在R2上寫上確定更新源命令:neighbor?10.1.1.1?update-source?lo1,這時即可建立2條TCP?session。可以使用命令Show?tcp?brief查看到2條TCP?session在建立,當一條establish完成后,另一條過會即消失。????

Router#sh?tcp?brief?

TCB?Local?Address?Foreign?Address?(state)

65693960?10.1.1.1.51124?192.168.2.1.179?CLOSED

65693E14?10.1.1.1.37992?192.168.2.1.179?ESTAB

Router#sh?tcp?brief?

TCB?Local?Address?Foreign?Address?(state)

65693E14?10.1.1.1.37992?192.168.2.1.179?ESTAB

?

注:路由器建立BGP鄰居寫兩條正確的neighbor命令,是為了冗余。

8、IBGP的同步??

??BGP同步規則指出,BGP路由器不應用使用通過IBGP獲悉的路由或將其通告給外部鄰居,除非該路由是本地的或是通過IGP獲悉的。

??同步開啟意味著,從一個IBGP鄰居學來的路由,除非從IGP中也同樣學習到,否則不可能被選為最優。

??如果IGP為OSPF,那么在IGP中,這些前綴的router-id也必須與通告這些前綴的bgp的router-id相匹配。才有可能被選為最優。

實例說明:如下圖所示

clip_image028

R1、R2、R3同為OSPF?area?0中路由器(每臺路由器的router-id如上圖所示),R2上一條路由3.3.3.0/24宣告進OSPF。

R1、 R3運行IBGP,R1將3.3.3.0/24的前綴引入BGP,傳給R3。這時R3既從OSPF?area0中的R2學習到該前綴,又從IBGP對等體 R1,學習到該前綴,如果R3的synchronizaion是開啟的,檢查同步,在R3的BGP轉發表里:???

R1

router?ospf?10

router-id?2.2.2.1

log-adjacency-changes

network?10.1.1.0?0.0.0.255?area?0

network?11.1.1.0?0.0.0.255?area?0

!

router?bgp?100

synchronization

bgp?log-neighbor-changes

redistribute?ospf?10

neighbor?11.1.1.2?remote-as?100

no?auto-summary

?

R3

router?ospf?10

router-id?2.2.2.3

log-adjacency-changes

network?11.1.1.0?0.0.0.255?area?0

!

router?bgp?100

synchronization

bgp?log-neighbor-changes

neighbor?11.1.1.1?remote-as?100

no?auto-summary

R3#sh?ip?bgp?

BGP?table?version?is?30,?local?router?ID?is?11.1.1.2

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?>?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

Network?Next?Hop?Metric?LocPrf?Weight?Path

*?i3.3.3.3/32?10.1.1.1?11?100?0??

*?i10.1.1.0/24?11.1.1.1?0?100?0??

r>i11.1.1.0/24?11.1.1.1?0?100?0??

R3#sh?ip?bgp?3.3.3.3?

BGP?routing?table?entry?for?3.3.3.3/32,?version?26

Paths:?(1?available,?no?best?path)

Not?advertised?to?any?peer

Local

10.1.1.1?(metric?20)?from?11.1.1.1?(11.1.1.1)

Origin?incomplete,?metric?11,?localpref?100,?valid,?internal,?not?synchronized

?

說明同步檢查沒有通過,當把R1的bgp的router-id改為2.2.2.2時,R3這時檢查同步就可以通過了。???

R1

router?ospf?10

router-id?2.2.2.1

log-adjacency-changes

network?10.1.1.0?0.0.0.255?area?0

network?11.1.1.0?0.0.0.255?area?0

!

router?bgp?100

synchronization

bgp?router-id?2.2.2.2

bgp?log-neighbor-changes

redistribute?ospf?10

neighbor?11.1.1.2?remote-as?100

no?auto-summary

R3#sh?ip?bgp?

BGP?table?version?is?37,?local?router?ID?is?11.1.1.2

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?>?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

Network?Next?Hop?Metric?LocPrf?Weight?Path

r>i3.3.3.3/32?10.1.1.1?11?100?0??

r>i10.1.1.0/24?11.1.1.1?0?100?0??

r>i11.1.1.0/24?11.1.1.1?0?100?0??

R3#sh?ip?bgp?3.3.3.3?

BGP?routing?table?entry?for?3.3.3.3/32,?version?35

Paths:?(1?available,?best?#1,?table?Default-IP-Routing-Table,?RIB-failure(17))

Flag:?0x820

Not?advertised?to?any?peer

Local

10.1.1.1?(metric?20)?from?11.1.1.1?(2.2.2.2)

Origin?incomplete,?metric?11,?localpref?100,?valid,?internal,?synchronized,?best

?

??關閉同步的條件

n?將EBGP的路由重分布進IGP

n?本AS不為其他AS提供穿越服務(末節的AS)

n?穿越路徑上所有路由器都運行BGP

??二、BGP屬性??

路由器發送關于目標網絡的BGP更新消息,更新的度量值被稱為路徑屬性。屬性可以是公認的或可選的、強制的或自由決定的、傳遞的或非傳遞的。屬性也可以是部分的。并非組織的和有組合都是合法的,路徑屬性分為4類:

??——公認強制的

??——公認自由決定的

??——可選傳遞的

??——可選非傳遞的

??只有可選傳遞屬性可被標記為部分的

公認屬性

??是公認所有BGP實現都必須能夠識別的屬性。這早些屬性被傳遞給BGP鄰居。

??公認強制屬性必須出現在路由描述中,公認自由決定屬性可以不出現在路由描述中

可選屬性

??非公認屬性被稱為可選的,可選屬性可以是傳遞的或非傳遞的

??可選屬性不要求所有的BGP實現都支持

??對于不支持的可選傳遞屬性,路由器將其原封不動地傳遞給其他BGP路由器,在這種情況下,屬性被標記為部分的。

??對于可選非傳遞屬性,路由器必須將其刪除,而不將其傳遞給其他BGP路由器

BGP定義屬性

??公認強制屬性

??公認自由決定

??可選傳遞屬性

??可選非傳遞屬性

BGP 每條更新消息都有一個長度可變的路徑屬性序列<屬性類型,屬性長度,屬性值>,如果第1比特是0,則屬于是公認屬性,如果它是1,則該屬性是 任選屬性,如果第2比特是0,則該屬性是不可傳遞的,如果它是1,則屬性是可傳遞的,公認屬性總是可傳遞的,屬性標志域中的第3個比特指示任選可傳遞屬性 中的信息是部分的(值為1)還是完整的(值為0),第4個比特確定該屬性長度是1字還是2字節,標志域其他4個比特總為0.屬性類型代碼字節含有屬性代 碼。如下圖所示。

clip_image030

??1、AS路徑屬性(AS-path)??

AS_PATH是一個公認必選的屬性,它用AS號的順序來描述AS間的路徑或到NLRI所明確的目的地的路由。

當 每個運行運行BGP的路由器發起一條路由——當它在自己的AS域內公布一個有關目的地NLRI——它將自己的AS號附加到AS_PATH中。當后續的運行 BGP的路由器向外部的對端公布路由,它將自己的AS號附加到AS_PATH中。AS可以描述所有它經過的自治系統,以最近的AS開始,以發起者的AS結 束。如下圖所示。

clip_image032

只有將更新消息發送給在另一個AS域內的鄰居時,BGP路由器才將它的AS號加到AS_PATH中,也就是說只有在兩個EBGP對等體之間公布路由時,AS號才被附加到AS_PATH中。

可以通過使用AS附加改變其公布路由的AS_PATH來影響數據流的流向。

AS_PATH屬性的另一個功能就是避免環路,如果BGP路由器從它的外部鄰居收到一條路由,而該路由AS_PATH包含這個BGP路由器自己的AS號。于是該路由器就知道是條環路路由。如下圖所示。

clip_image034

實例說明:如圖所示。

clip_image036

可以將私有的AS號進行隱藏,如下配置所示。

clip_image038

下面是AS屬性的另一個實例,如下圖所示。

clip_image040

R1在發送更新的時候,剝除私有AS號;并且不將AS100的路由傳播給其客戶路由器R3,配置如下所示。

clip_image042

聚合后繼承明細路由的屬性,在大括號里面的as-path在計算長度時,只算一個。在聯盟內小括號里面的AS號,在選路時,不計算到as-path長度里面。

增加as-path的長度,可以用route-map里面的set?as-path?prepend來做,如:???

neighbor?1.1.1.1?route-map?AS?{in|out}

route-map?AS

set?as-path?prepend?10?10

?

在neighbor的入向做as-path?prepend。是在as-path靠近我的地方加長度,如:

10?10?2i?。10?10是新加的。

而在neighbor的出向做as-path?prepend。是在AS起源的方向加path長度,如:

2?10?10i?。10?10是新加的。

在as-path?prepend的后面還有一個參數,last-as,如:???

route-map?AS

set?as-path?prepend?last-as??

<1-10>?number?of?last-AS?prepends

?

意思是將離我最近的AS,將它的AS號在as-path里面再重復出現幾次。這個10看起來可以和allowas-in里面的10對應起來。

假如as-path?prepend?與as-path?prepend?last-as合用的時候,last-as先生效,然后prepend再生效。

減小as-path的長度,如用聯盟和remove-private-AS等可以實現。

注意:Remove-private-as,如果在as-path里交替出現私有和公有的AS號,這樣將無法將私有AS號去掉。在起源的時候,連續的時候才有效。

bgp?bestpath?as-path?ignore(隱藏命令)這條命令可以使我們在選路時,跳過as-path的選路,直接往下繼續選擇最優路徑。

?

??2、源頭屬性(Origin)??

源頭是公認強制屬性,它定義了路徑信息的源頭。

IGP:路由在起始AS的內部,使用network命令通過BGP通告路由時,通常屬于這種情況,在BGP表中,IGP源頭用i表示

EGP:路由是通過EGP獲悉的,在BGP表中用e表示。

不完全:路由的源頭未知或是通過其他方法獲悉的,在BGP表中,不完整源頭用?表示

如下示例所示。

clip_image044

??2、下一跳屬性(NEXT_HOP)??

該為公認必選屬性,描述了到公布目的地的路徑下一跳路由器的IP地址。由BGP?NEXT_HOP屬性所描述的IP地址不經常是鄰居路由器的IP地址,要遵循下面的規則:

如果正在進行路由宣告的路由器和接收的路由器在不同的自治系統中,NEXT_HOP是正在宣告路由器接口的IP地址,如下圖所示。

clip_image046

如果正在進行路由宣告的路由器和接收的路由器在同一個AS內,并且更新消息的NLRI指明的目的地也在同一個AS內,那么NEST_HOP就是宣告路由的鄰居的IP地址。如下圖所示。

clip_image048

如果正在宣告的路由器和接收的路由器是內部對等體,并且更新消息的NLRI指明目的地在不同的AS,則NEXT_HOP就是學習到路由的外部對等實體的IP地址。如下圖所示。

clip_image050

從上面圖可以知道,在去往192.168.5.0的網段中會出現路徑不可達的情況,解決這個問題的方法是保證內部路由器知道與兩處自治系統相連的外部網絡,可以使用靜態路由的辦法,但實際的做法是在外部端口上以被動模式運行IGP。但在某種情況下,該方法并不理想。

第二種方法是采用配置選項來做,這個配置選項被稱做next-hop-self。

下面具體詳述了下一跳的不可達的解決方法:

??解決下一跳不可達的方法:

n?靜態路由

n?在IBGP鄰居所處的IGP中宣告

n?將與EBGP直連的網絡重分布進IGP

n?neighbor?x.x.x.x?next-hop-self(將指向EBGP鄰居更新源的地址變為自己的更新源地址)(RR有的版本會將下一跳改變)

??一般情況下,在本路由器上將直連的網絡引入BGP,下一跳為0.0.0.0,本路由器聚合的路由的下一跳也為0.0.0.0。

??在本路由器上將從IGP學來的路由引入BGP時,在本路由器上看BGP的轉發表,下一跳為IGP路由的下一跳。在多訪問網絡環境中,用直連接口建立鄰居關系,會產生第三方下一跳。

實例說明:如下圖所示,

clip_image052

R2與R1是IBGP鄰居,R1與R3是EBGP鄰居,當用直連接口建鄰居時,R2引入BGP的前綴172.16.2.0/24,在R3的bgp轉發表里,將顯示為R2的多訪問網絡接口地址(如:10.1.1.2)。產生第三方下一跳的現象。

n?如果R1、R2、R3全部用直連接口建鄰居時會產生第三方下一跳。

n?如果R1、?R2用環回口而R1、R3用直連建立鄰居時,會產生第三方下一跳。

n?如果R1、R2用直連而R1、R3用回環口時,不會產生第三方下一跳,如下所示配置。

n?如果R1、R2、R3都用環回口建立鄰居,則不會產生第三方下一跳,如下配置所示。???

R3#show?ip?bgp?

BGP?table?version?is?4,?local?router?ID?is?172.16.3.1

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

Network?Next?Hop?Metric?LocPrf?Weight?Path

*&gt;?172.16.1.0/24?10.1.1.1?0?0?100?i

*&gt;?172.16.2.0/24?10.1.1.2?0?100?i

*&gt;?172.16.3.0/24?0.0.0.0?0?32768?i

?

?

R1

router?bgp?100

no?synchronization

bgp?log-neighbor-changes

network?172.16.1.0?mask?255.255.255.0

neighbor?3.3.3.3?remote-as?200

neighbor?3.3.3.3?ebgp-multihop?2

neighbor?3.3.3.3?update-source?Loopback1

neighbor?10.1.1.2?remote-as?100

no?auto-summary

R3

router?bgp?200

no?synchronization

bgp?log-neighbor-changes

network?172.16.3.0?mask?255.255.255.0

neighbor?1.1.1.1?remote-as?100

neighbor?1.1.1.1?ebgp-multihop?2

neighbor?1.1.1.1?update-source?Loopback1

no?auto-summary

R3#sh?ip?bgp?

BGP?table?version?is?8,?local?router?ID?is?172.16.3.1

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*&gt;?172.16.1.0/24?1.1.1.1?0?0?100?i

*&gt;?172.16.2.0/24?1.1.1.1?0?100?i

*&gt;?172.16.3.0/24?0.0.0.0?0?32768?i

R1

router?bgp?100

no?synchronization

bgp?log-neighbor-changes

network?172.16.1.0?mask?255.255.255.0

neighbor?2.2.2.2?remote-as?100

neighbor?2.2.2.2?update-source?Loopback1

neighbor?3.3.3.3?remote-as?200

neighbor?3.3.3.3?ebgp-multihop?2

neighbor?3.3.3.3?update-source?Loopback1

no?auto-summary

R2

router?bgp?100

no?synchronization

bgp?log-neighbor-changes

network?172.16.2.0?mask?255.255.255.0

neighbor?1.1.1.1?remote-as?100

neighbor?1.1.1.1?update-source?Loopback1

no?auto-summary

R3

router?bgp?200

no?synchronization

bgp?log-neighbor-changes

network?172.16.3.0?mask?255.255.255.0

neighbor?1.1.1.1?remote-as?100

neighbor?1.1.1.1?ebgp-multihop?2

neighbor?1.1.1.1?update-source?Loopback1

no?auto-summary

R3#sh?ip?bgp?

BGP?table?version?is?10,?local?router?ID?is?172.16.3.1

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

Network?Next?Hop?Metric?LocPrf?Weight?Path

*&gt;?172.16.1.0/24?1.1.1.1?0?0?100?i

*&gt;?172.16.2.0/24?1.1.1.1?0?100?i

*&gt;?172.16.3.0/24?0.0.0.0?0?32768?i

?

第三方下一跳:收到路由更新的源地址與將要發出去的接口地址在同一網段的時候,路由的下一跳不改變,為原來路由更新的源地址。

??有時雖然路由的下一跳可達,但會出現訪問網絡出現環路的現象。

實例說明:

clip_image054

R5、 R3,R1、R2為EBGP鄰居關系,R1、R3為IBGP鄰居關系。那么R5通過BGP傳給R3的路由(如10.1.1.0/24),R3通過IBGP 傳給R1,R1通過EBGP傳給R2,這時R2訪問10.1.1.0/24這個網絡的下一跳就在R1上。這時R2去訪問R5的時候,就會產生環路。

則R2(走下一跳)——R1(走物理鏈路)——R2,這樣環路產生了。

解決方法:

??neighbor?x.x.x.x?next-hop-unchanged?(此命令只能用在EBGP多跳的環境下,將路由的下一跳,從自己的更新源地址改變為從IBGP學來的下一跳地址)(這時路由的下一跳在路由表里將改變。)

??neighbor?x.x.x.x?route-map?XX?{in|out}然后在route-map里面set?ip?next-hop來改變前綴的下一跳。(在路由表里下一跳會改變。)

??策略路由PBR,強制命令R2到10.1.1.0/24的時候走R3。(路由表里下一跳不會改變)

??3、本地優先級屬性(Local_preference)??

本地優先級是公認自由決定的屬性,它告訴AS中的路由器,那條路徑離開AS的首選路徑。本地優先級越高,路徑被選中的可能性越大。本地優先級這種屬性只能在同一個AS中的路由器之間交換,本是優先級只適用于內部鄰居,用于內部對等體之間的Update消息。

本地優先級,可以在本AS和大聯盟內傳遞。越大越優先。影響路由器的出站流量。默認情況下,local-preference為100。

clip_image056

使用下面的命令,如下圖所示

clip_image058

是將路由器收到的所有外部BGP路由的默認本地優先級修改為指定值。對IBGP鄰居路由器傳過來的路由,不會改變它們的local-preference。如果將一個IBGP鄰居傳來的路由傳給另外一個IBGP鄰居,那我必須是RR。

實例說明:如下圖所示。

clip_image060

未使用本地優先級操作路徑,如下所示路由器C的BGP表。

clip_image062

在路由器A?上修改本地優先級,如下所示。

clip_image064

在使用本地優先操縱后的路徑,查看路由器C?的BGP表。

clip_image066

??4、原子聚合屬性??

原子聚合是一個公認自決的屬性。類型代碼為6,它告訴鄰接AS,始發路由器對路由進行了聚合。可以使用下面的命令進行配置,

clip_image068

命令只聚合已經包含在BGP表中的網絡,這與使用network來通告匯總路由要求不同,后者要求網絡必須出?現在IP路由選擇表中

配置命令aggregate-address后,一條與匯總路由對應的指向null0的BGP路由將自動被加入到IP路由表中。如下示例所示。

clip_image070

可以使用show?ip?bgp命令來查看

clip_image072

關于原子聚合的詳細內容在以后的章節中詳細說明。

??5、權重屬性??

cisco私有的參數。本地有效。缺省條件下,本地始發的路徑具有相同的WEIGHT值(即32768),所有其他的路徑的weight值為0。越大越優選。影響路由器的出站流量。

權重只影響當前路由器,指定鄰居的權重。使用下面命令來修改權重。

clip_image074

可以在neighbor的入向設置。范圍0-65535。Neighbor?1.1.1.1?weight?10,從對等體1.1.1.1接收過來的所有路由的weight值都設置為10。

還可以用route-map來設定,可以將特定路由的weight值改變。如下所示:???

Neighbor?1.1.1.1?route-map?AA?in

Route-map?AA?permit?10

Match?ip?address?prefix?AA

Set?weight?10

Route-map?AA?permit?20

?

??6、MED屬性??

MED 屬性也被稱為度量值,是一種可選非傳遞屬性。承載于EBGP的Update消息中。MED用于向外部鄰居指出進入AS的首選路徑,當入口有多個時,AS可 以使用MED來動態地影響其他AS如何選擇進入路徑,在BGP中,MED是唯一一個可影響數據如何進入AS的屬性。度量值越小,路徑被選中的可能性越大。 與本地優先級不同,MED是在自主系統之間交換的。MED影響進入AS的數據流,而本地優先級影響離開AS的數據流。如下圖所示。

clip_image076

Metric和med:BGP的metric對IBGP同樣有效。特指med:從EBGP收到的metric比較的時候才叫MED,MED是借用了BGP的metric在EBGP的時候進行比較。MED(多出口區分)比較EBGP的metric找到最優的出口。

MED相當于IGP路由的metric值,越小越優先。在新的IOS中,將IGP中的路由重分布進BGP,BGP將自動繼承IGP路由的metric值。在老的IOS里,如果需要繼承需要在重分布時加route-map,如:???

Redistribute?rip?route-map?RE

Route-map?RE

set?metric-type?internal

?

默 認情況下,只有在兩條路徑的第一個(鄰近的)AS相同的情況下才會進行比較:任何聯盟內的子自治系統都被忽略。任何多跳路徑,只有在 AS_SEQUENCE中的第一個AS相同的情況下,才會比較MED;任何打頭的AS_CONFED_SEQUENCE都將被忽略。如果激活了bgp?always-compare-med,那么對于所有路徑都比較MED,而不考慮是否來自同一個AS。如果使用了這個選項,就應該在整個AS中都這樣做,以避免路由選擇環路。

實例說明:如下拓撲圖

下面是一個使用策略路由來實現修改MED值的案例。

clip_image078

clip_image080

clip_image082

clip_image084

實例說明:如下圖所示,此實例采用了本地優先級與MED屬性

clip_image086

clip_image088

clip_image089

??7、共同體屬性??

BGP團體是一組共享某些共同特性的目的地,用于簡化路由策略的執行,一個團體并不被限制在一個網絡或一個AS之中。是另一種過濾入站或出站BGP路由的方法。

COMMUNITY 屬性是一組4個8位組的數值,RFC1997規定,前2個8位組表示自治系統,后2個8位組表示出于管理目的而定義的標識符,格式為AA:NN,而思科的 默認格式為NN:AA,可以使用命令ip?bgpcommunity?new-format將思科默認格式改為RFC1997的標準格式。

團體屬性是一個可傳遞屬性,類型代碼為8。

??no_export——如果接收到的路由攜帶該數值,不通告到EBGP對等體。如果配置了聯盟,則不能將此路由宣告到聯盟之外。

??no_advertise——如果接收到的路由攜帶該數值,不通告給任何對等體,包括EBGP和IBGP。

??internet?——無任何值,所有路由器默認情況下都屬于該團體,帶此屬性的路由在被收到后,應該被通告給所有的其他路由器

??local_as——帶有此屬性的路由在被收到后,應該被通告給本地AS域內的對等體,但不應該被通告給外部系統中的對等體,包括同一個聯盟內其它自治系統中的對等體。

實例說明:如下圖所示。

clip_image091

clip_image093

clip_image095

clip_image097

??三、BGP路由匯總??

BGP的匯總有2種:

A匯總summary

靜態路由手工匯總指向null?0,再network引入BGP。

如果明細路由斷了,匯總仍然會被引入,且缺乏靈活性。

clip_image002[4]

命令network要求路由選擇表中有與指定的前綴或掩碼完全匹配的條目,為滿足這種要求,可配置一條指向接口null0的靜態路由,如果IGP執行匯總,則路由選擇中可能已以有這樣的靜態路由。

命令network告訴BGP通告哪些網絡,而不如何通告,僅當描寫的網絡號出現在IP路由選擇中后,BGP才會通告它,如下圖所示。

clip_image004[4]

B聚合aggregate

聚合路由在本路由器上生成一條聚合路由,下一跳為0.0.0.0。

clip_image006[4]

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

<cr>

??Advertise-map

n?只 對advertise-map里面匹配的路由進行聚合。當advertise-map里面匹配的明細路由全部消失后,即使聚合路由范圍內還有其他明細路 由,聚合路由也將消失。當與as-set合用時,只繼承advertise-map里面匹配的明細路由的屬性。如果用summary-only,會將所有 的明細包括沒有在advertise-map里面匹配的路由一起抑制。

??As-set

n?聚合路由繼承明細路由的屬性,包 括:as-path、local_preference、community、origin-code。與advertise-map合用,只繼承 advertise-map里面匹配的明細路由的屬性。如果繼承了as-path屬性,繼承的as-path如果沒有在大括號{?}中顯示,則有幾個算幾 個AS;如果繼承AS是在大括號中排列的,那么只算一個AS號。只關心AS的號碼,不關心順序。

??As-path、as-seq(as-path)原子聚合不帶任何AS。AS-SET首先是區別于atomic-aggregate,產生了AS的序列,序列中無分先后順序,這一點也不同于有明確順序的AS-SEQEUENCE

??Attribute-map和route-map

??這兩個參數一樣,可以將聚合路由的屬性清除掉(除了as-path屬性),添加自己需要添加的屬性。Attribute-map?與?as-set的合用時,能否將聚合的路由的屬性重置。(OK可以改)

??Summary-only將聚合路由所包括的所有路由都抑制掉,被抑制的路由在bgp的轉發表里,顯示為s,代表suppress的意思。發送更新時,只發送聚合路由。可以與

??neighbor?1.1.1.1?unsuppress-map?XX合用,對特定鄰居漏過特定的明細路由。

??Suppress-map,將suppress-map里面匹配的路由抑制掉,被抑制的路由在bgp的轉發表里,顯示為s,代表suppress的意思。發送更新時,只發送聚合路由和沒有被抑制的明細路由。可以與

??neighbor?1.1.1.1?unsuppress-map?XX合用,對特定鄰居漏過特定的明細路由。

?

??四、BGP路由決策??

BGP的RIB包括三部分:

??Adj-RIBs-In:存儲了從對等體學習到的路由理新中未經處理的路由信息,這些包含在Adj-RIBs-In中的路由被認為是可行路由。

??Loc-RIB:包含了BGP發言者對Adj-RIBs-In中的路由應用本地策略之后選定的路由

??Adj-RIBs-Out:包含了BGP發言者向對等體宣告路由。

BGP有三個部分既可以是3個不同的數據庫,也可以是利用指針來區分不同部分的單一數據庫。BGP路由決策通過對Adj-RIBs-In中的路由應用本地路由策略,且向Loc-RIB?和Adj-RIBs-Out中輸入選定或修改的路由進行路由選擇。其有三個階段。

第一階段:計算每條可行路由的優先級

第二階段:從所有可用路由中為特定目的地選出最佳路由,并將其安裝到Loc-RIB中。

第三階段:將相應的路由加入到Adj-RIBs-Out中,以便向對等體進行宣告。

以下為BGP選路原則的13條:

(1)weight

cisco私有的參數。本地有效。缺省條件下,本地始發的路徑具有相同的WEIGHT值(即32768),所有其他的路徑的weight值為0。越大越優選。影響路由器的出站流量。

(2)local-preference

本地優先級,可以在本AS和大聯盟內傳遞。越大越優先。影響路由器的出站流量。默認情況下,local-preference為100。

(3)本地起源

路 由器本地始發的路徑優先。在BGP的轉發表里顯示為0.0.0.0。依次降低的優先級順序是:default-originate(針對每個鄰居配置)、 default-informaiton-originate(針對每種地址簇配置)、network、redistribute、 aggregate-address。

(4)as-path

評估as-path的長度,as-path列表最短的路徑優先。

聚合后繼承明細路由的屬性,在大括號里面的as-path在計算長度時,只算一個。在聯盟內小括號里面的AS號,在選路時,不計算到as-path長度里面。

(5)起源代碼

評估路由的origin?code屬性,有3個i<e&lt;?。i代表用network將IGP引入BGP的,或者是聚合等路由,e代表EGP,?代表重分布進BGP的路由。i為0,e為1,?為3。越小越優。

(6)MED

metric傳遞不能傳出AS。例外:始發路由器可以metric傳給鄰居,可以是IBGP/EBGP,但是EBGP再傳不出去。

MED相當于IGP路由的metric值,越小越優先。

(7)EBGP優于IBGP

這里EBGP>聯盟內的EBGP&gt;IBGP。

(8)最近的IGP鄰居

這里是指peer的更新源在我的路由表里顯示,哪個最近哪個最優。

OSPF是否考慮O、OIA、OE1、OE2?只看cost不看O/OIA/OE。

(9)如果配置了maximum-path[ibgp]n,如果存在多條等價的路徑,會插入多條路徑。

BGP默認maximum-path=1,只能有一條最優路徑,但可以通過命令來改變,如果沒有IBGP參數,默認只能做EBGP的負載均衡。做負載均衡還有一個條件,就是上面的8條都比不出哪條最優的情況下,才有可能出現負載均衡。

做了BGP的負載均衡后,在BGP的轉發表里還是一個最優,但在路由表里可以出現2個下一跳。

(10)最老的

與本端最早建立鄰居關系的peer,被優選。因為它最穩定。但一般不考慮,會跳過這個繼續往下選。

如果以下任一條件為真,這一步將會被忽略:

啟用了bgp?bestpath?compare-routerid,多條路徑具有相同的router-id,因為這些路由都是從同一臺路由器接收過來的;當前沒有最佳路徑。缺乏當前最佳路徑的例子發生在正在通告最佳路徑的鄰居失效的時候。

(11)最低的ROUTER-ID

BGP 優選來自具有最低的路由器ID的BGP路由器的路由。Router-id是路由器上最高的IP地址,并且優選環回口。也可以通過bgp?router- id命令靜態的設定路由器ID。如果路徑包含RR屬性,那么在路徑選擇過程中,就用originator-id來替代路由器ID。

(12)多跳路徑的始發路由器ID相同,那么選擇CLUSTER_LIST長度短的,因為每經過一個RR,cluster-list會加上這個RR的router-id

如果多條路徑的始發router-id相同,那么BGP將優選cluster-list長度最短的路徑。這種情況僅僅出現在BGP?RR的環境下。

(13)BGP優選來自于最低的鄰居地址的路徑。是BGP的neighbor配置中的那個地址,如果是環回口,則看環回口地址的高低。

BGP優選來自于最低的鄰居地址的路徑。這是BGP的neighbor配置中所使用的IP地址,并且它對應于與本地路由器建立TCP連接的遠端對等體。

??五、路由翻動(route?flaps)和路由懲罰(route?dampening)??

路由翻動產生的原因有很多種比如:鏈路不穩定、路由器接口故障、ISP工程施工、管理員錯誤配置和錯誤故障檢查等等都能造成路由翻動,由于路由翻動會造成每臺路由器重新計算路由,從而消耗了大量的網絡帶寬和路由器的CPU資源。

BGP鄰居的flaping

clip_image008[4]

當 R1與R2兩臺路由器運行IGP協議,并且建立EBGP的鄰居關系,用環回口建立鄰居關系。這時假如R1、R2將他們的更新源通告進了BGP,然后通過 BGP傳遞給對方,這時由于從EBGP學到的路由的AD為20,大于IGP的默認AD,這時會產生鄰居的flaping現象。

這時show?ip?bgp?summary可以看到每經過60秒BGP?table?version?is?1,?main?routing?table?version?1會改變一次。BGP轉發表里變化了多少次。

用debug?ip?bgp、debug?ip?bgp?update來查看BGP的flaping。

解決方法:

(1)EBGP建鄰居時不要將環回口引入BGP。

(2)Network?+?backdoor

BGP路由下一跳的flaping

clip_image010[4]

R1、 R2、R3因為屬于同一個AS,所以運行一個IGP,R2-R4,R3-R5之間的鏈路并沒有通告進IGP中。R1、R2、R3?IBGP對等體關 系,R3在指R1時,打了neighbor?1.1.1.1?next-hop-self;R4、R2?,R5、R3?,R4、R5為EBGP對等體關 系,它們都拿直連接口建立鄰居關系。

這時R4將它的環回口4.4.4.0/24和R2-R4的直連網絡24.0.0.0/24引入BGP, 這時在R1上就會產生路由下一跳flaping的現象。這時show?ip?bgp?summary可以看到每經過60秒 BGP?table?version?is?1,?main?routing?table?version?1會改變一次。

解決方法:

(1)靜態路由(R1上靜態路由)

(2)在IBGP鄰居所處的IGP中宣告

(3)將與EBGP直連的網絡重分布進IGP

(4)neighbor?x.x.x.x?next-hop-self(R2指R1時輸入)

路由懲罰(route?dampening)由RFC2439描述,它主要由以下三個目的:

??提供了一種機制,以減少由于不穩定路由引起的路由器處理負載

??防止持續的路由抖動

??增強了路由的穩定性,但不犧牲表現良好的(well-behaved)路由的收斂時間。

ROUTER?BG?1

BG?DAMP?15?750?2000?60?----?針對所有的路由。

BG?DAMP?ROUTE-MAP?XXX

ROUTE-MAP?XXX

MATIP?ADD?PREFIS?XX

SET?DAM?15?750?2000?60?---DEFAULT?

IP?PREFIX?XX?PERMIT?1.1.1.0/24

SH?IP?BG?1.1.1.0

SH?IP?BG?DAM?PARA

Dampening為每一條前綴維護了一個路由抖動的歷史記錄。Dampening算法包含以下幾個參數:

??歷史記錄――――當一條路由flaping后,改路由就會被分配一個懲罰值,并且它的懲罰狀態被設置為history。

??懲罰值(penalty)――――路由每flaping一次,這個懲罰值就會增加。默認的路由flaping懲罰值為1000。如果只有路由屬性發生了變化,那么懲罰值為500。這個值是硬件編碼的。

??抑制門限(suppress?limit)――――如果懲罰值超過了抑制門限,改路由將被懲罰或dampen。路由狀態將由history轉變為damp狀態。默認值的抑制門限是2000,它可以被設置。

??懲罰狀態(damp?state)――――當路由處于懲罰狀態時,路由器在最佳路徑選擇中將不考慮這條路徑,因此也不會把這條前綴通告給它的對等體。

??半衰期(half?life)――――在一半的生命周期的時間內,路由的懲罰值將被減少,半衰期的缺省值是15分鐘。路由的懲罰值每5秒鐘減少一次。半衰期的值可以被設置。

??重 用門限(reuse?limit)――――路由的懲罰值不斷的遞減。當懲罰值降到重用門限以下時,改路由將不再被抑制。缺省的重用門限為750。路由器每 10秒鐘檢查一次那些不需要被抑制的前綴。重用門限時可以被配置的。當懲罰值達到了重用門限的一半時,這條前綴的歷史記錄(history)將被清除,以 便更有效率的使用內存。

??最大抑制門限/最大抑制時間――――如果路由在短時間內表現出極端的不穩定性,然后又穩定下來,那么累計的懲罰 值可能會導致這條路由在過長的時間里一直處于懲罰狀態。這就是設置最大抑制門限的基本目的。如果路由表現出連續的不穩定性,那么懲罰值就停留在它的上限 上,使得路由保持在懲罰狀態。最大抑制門限是用公式計算出來的。最大抑制時間為一條路由停留在懲罰狀態的最長時間。默認為60分鐘(半衰期的4倍)可以配 置。

n?最大抑制門限=重用門限×2(最大抑制時間÷半衰期)

n?由于最大抑制門限為公式算出來的,所以有可能最大抑制門限≤抑制門限,當這種情況發生時,dampening的設置是沒有效果的。如重用門限=750,抑制門限=3000,半衰期=30分鐘,最大抑制時間=60分鐘。按照這樣的配置,算出來的最大抑制門限為3000,

n?與抑制門限一樣,因為必須超過抑制門限,才能對路由進行dampening,所以這時dampening的設置沒有效果。

clip_image012[4]

BGP的dampening僅僅影響EBGP的路由。Dampening是基于每條路徑的路由而操作的。如果一條前綴具有兩條路徑,并且其中一條被懲罰了,那么另一條前綴仍然是可用的,可以通告給BGP對等體。

命令:

bgp?dampening?[route-map?XX]?[{Half-life?reuse-limit?suppress-limit?Maximum-time?}]

如果掛了route-map,那么就在route-map里面匹配特定EBGP路由,來設置dampening值。

檢查命令:

show?ip?protocol

sh?ip?bgp?dampening??

dampened-paths?只顯示(清除)被抑制的路由。

flap-statistics?顯示(清除)所有出現擺動的路由以及該路由出現擺動的次數。

parameters?Display?details?of?configured?dampening?parameters

show?ip?bgp?neighbors?1.1.1.1?dampened-routes

show?ip?bgp?neighbors?1.1.1.1?flap-statistics

??六、路由反射器??

由于IBGP的水平分割問題,所以IBGP需要Full?Mesh。由于整個IBGP?full?mesh的話,需要建的session數為n*(n-1)/2。不具有擴展性。所以產生兩種解決方法,路由反射器是其中一種,而另一種則是聯邦。

路由反射器是被配置為允許它把通過IBGP所獲悉的路由通告到其他IBGP對等體的路由器,路由器反射器與其他路由器有部分IBGP對等關系,這些路由器被稱為客戶。客戶間的對等是不需要的,因為路由反射器將在客戶間傳遞通告。?如下圖所示。

clip_image014[4]

其優點:減少AS內BGP鄰居關系的數量,從而減少了TCP連接數;在AS內可以有多個路由反射器,即是為了冗余也是為了分成組,以進一步減少所需IBGP會話的數量。路由反射器的路由器可以與非路由反射器的路由器共存,所以配置更簡單。

RFC1966中定義了3條RR用來決定要宣告哪條路由的規則,具體使用時取決于路由是如何學習到的。

??如果路由學習自非客戶IBGP對等體,則僅反射給客戶路由器。

??如果路由學習自某客戶,則反射給所有非客戶和客戶路由器(發起該路由的客戶除外)。

??如果路由學習自EBGP對等體,則反射給所有非客戶和客戶路由器

路 由反射器的客戶并不知道自己是客戶。客戶和非客戶經過路由反射器反射的路由更新將會帶上cluster-list和originator,可用于IBGP 防環。Cluster-id默認為路由反射器自己的router-id,可以通過命令bgp?cluster-id?1.1.1.1來修 改,cluster-id為32位的值,可以寫成點分十進制,也可以寫成十進制數;originator為IBGP內起源路由器的router-id。路 由反射器是IBGP的特性,出了IBGP后,路由反射器所有的特性消失(即路由攜帶的cluster-list和originator全部消失)。

neighbor?1.1.1.1?route-reflector-client

可以通過這條命令來將IBGP的peer?1.1.1.1變為自己的客戶。建議對每個IBGP鄰居都打上。

當路由反射器的客戶full?mesh時,可以用no?bgp?client-to-client?reflection禁止客戶到客戶的路由反射。可以減少路由更新。

如下圖為路由反射器的基本配置。

clip_image016[4]

clip_image018[4]

?

??七、BGP聯邦??

由于IBGP的水平分割問題,所以IBGP需要full?mesh。由于整個IBGP?full?mesh的話,需要建的session數為n*(n-1)/2。不具有擴展性。所以產生兩種解決方法,聯邦是其中一種。

聯邦既有EBGP的特性,又有IBGP的特性。

聯盟是另一種控制大量IBGP對等體的方法,它就是一個被細分為一組子自治系統(稱為成員自治系統)的AS。如下圖所示。

clip_image020[4]

聯盟增加了兩種類型的AS_PATH屬性

AS_CONFED_SEQUENCE:一個去往特定目的地所經路徑上的有序AS號列表,其用法與AS_SEQUENCE完全一樣,區別在于該列表中的AS號屬于本地聯盟中的自治系統。

AS_CONFED_SET:一個去往特定目的地所經路徑上的無序AS號列表,其用法與AS_SET完全一樣,區別在于該列表中的AS號屬于本地聯盟中的自治系統。

由于AS_PATH發生被用于成員自治系統之間,因而保留了環路預防功能。將Update消息發送給聯盟之外的對等體時,將從AS_PATH屬性中剝離AS_CONFED_SEQUENCE和AS_CONFED_SET信息,而將聯盟ID附加到AS_PATH中。

Local_preference和MED可以在聯邦內傳遞。聯盟內的小AS號,在as-path里顯示在小括號里,在as-path計算長度時,不被考慮。下一跳在聯邦內傳遞不會改變。

?

??八、配置樣例1??

下面的示例中涉及到BGP的基本配置,涉及到一些基本的知識點,如EBGP多跳、更新源使用環回接口、路由映射發布團體屬性等,如下圖所示。

clip_image022[4]

下面是其參考配置。

R1#sh?running-config

!

interface?Loopback0

ip?address?192.168.250.1?255.255.255.0

!

interface?Loopback1

ip?address?192.168.1.213?255.255.255.252

!?

interface?Loopback6

ip?address?5.5.5.5?255.255.255.0

!

interface?Serial2/0

ip?address?192.168.1.210?255.255.255.252

serial?restart-delay?0

!

router?bgp?300

no?synchronization

bgp?log-neighbor-changes

network?192.168.1.212?mask?255.255.255.252

network?192.168.250.0

neighbor?6.6.6.6?remote-as?100

neighbor?6.6.6.6?ebgp-multihop?2

neighbor?6.6.6.6?update-source?Loopback6

no?auto-summary

!

ip?route?6.6.6.0?255.255.255.0?192.168.1.209

!

?

R2#sh?running-config?

!

interface?Loopback5

ip?address?1.1.1.1?255.255.255.255

!

interface?Loopback6

ip?address?6.6.6.6?255.255.255.0

!

interface?Ethernet1/0

ip?address?192.168.1.221?255.255.255.252

duplex?half

!

interface?Ethernet1/1

ip?address?192.168.1.193?255.255.255.252

duplex?half

!

!?

interface?Serial2/0

ip?address?192.168.1.209?255.255.255.252

serial?restart-delay?0

!

interface?Serial2/1

ip?address?192.168.1.226?255.255.255.252

serial?restart-delay?0

!

router?ospf?10

log-adjacency-changes

passive-interface?Serial2/0

passive-interface?Serial2/1

network?1.1.1.1?0.0.0.0?area?0

network?192.168.1.192?0.0.0.3?area?0

network?192.168.1.220?0.0.0.3?area?0

!

router?bgp?100

no?synchronization

bgp?log-neighbor-changes

neighbor?2.2.2.2?remote-as?100

neighbor?2.2.2.2?update-source?Loopback5

neighbor?2.2.2.2?next-hop-self

neighbor?3.3.3.3?remote-as?100

neighbor?3.3.3.3?update-source?Loopback5

neighbor?3.3.3.3?next-hop-self

neighbor?5.5.5.5?remote-as?300

neighbor?5.5.5.5?ebgp-multihop?2

neighbor?5.5.5.5?update-source?Loopback6

neighbor?192.168.1.225?remote-as?200

no?auto-summary

!

ip?route?5.5.5.0?255.255.255.0?192.168.1.210

!

?

R3#sh?running-config?

!

interface?Loopback5

ip?address?2.2.2.2?255.255.255.255

!

interface?Ethernet1/0

ip?address?192.168.1.222?255.255.255.252

duplex?half

!

interface?Ethernet1/1

ip?address?192.168.1.198?255.255.255.252

duplex?half

!

router?ospf?10

log-adjacency-changes

network?2.2.2.2?0.0.0.0?area?0

network?192.168.1.196?0.0.0.3?area?0

network?192.168.1.220?0.0.0.3?area?0

!?

router?bgp?100

no?synchronization

bgp?log-neighbor-changes

neighbor?1.1.1.1?remote-as?100

neighbor?1.1.1.1?update-source?Loopback5

neighbor?3.3.3.3?remote-as?100

neighbor?3.3.3.3?update-source?Loopback5

no?auto-summary

!

?

R4#sh?running-config?

!

interface?Loopback5

ip?address?3.3.3.3?255.255.255.255

!

interface?Ethernet1/0

ip?address?192.168.1.194?255.255.255.252

duplex?half

!

interface?Ethernet1/1

ip?address?192.168.1.197?255.255.255.252

duplex?half

!

interface?Ethernet1/2

ip?address?192.168.1.206?255.255.255.252

duplex?half

!

!

router?ospf?10

log-adjacency-changes

passive-interface?Ethernet1/2

network?3.3.3.3?0.0.0.0?area?0

network?192.168.1.192?0.0.0.3?area?0

!

router?bgp?100

no?synchronization

bgp?log-neighbor-changes

neighbor?1.1.1.1?remote-as?100

neighbor?1.1.1.1?update-source?Loopback5

neighbor?1.1.1.1?next-hop-self

neighbor?2.2.2.2?remote-as?100

neighbor?2.2.2.2?update-source?Loopback5

neighbor?2.2.2.2?next-hop-self

neighbor?192.168.1.205?remote-as?400

no?auto-summary

!

R5#sh?running-config?

!

interface?Loopback0

ip?address?192.168.50.1?255.255.255.0

!

interface?Loopback1

ip?address?192.168.75.1?255.255.255.0

!?

interface?Loopback3

ip?address?192.168.1.201?255.255.255.252

!

interface?Ethernet1/0

ip?address?192.168.1.205?255.255.255.252

duplex?half

!?

router?bgp?400

no?synchronization

bgp?log-neighbor-changes

network?192.168.1.200?mask?255.255.255.252

network?192.168.50.0

network?192.168.75.0

neighbor?192.168.1.206?remote-as?100

no?auto-summary

!

R6#sh?running-config?

!

interface?Loopback0

ip?address?192.168.100.1?255.255.255.0

!

interface?Loopback1

ip?address?192.168.200.1?255.255.255.0

!?

interface?Loopback3

ip?address?192.168.1.217?255.255.255.252

!

interface?Loopback10

ip?address?192.168.192.1?255.255.255.0

!

interface?Loopback11

ip?address?192.168.193.1?255.255.255.0

!

interface?Loopback12

ip?address?192.168.194.1?255.255.255.0

!

interface?Loopback13

ip?address?192.168.195.1?255.255.255.0

!

interface?Loopback14

ip?address?192.168.196.1?255.255.255.0

!

interface?Loopback15

ip?address?192.168.197.1?255.255.255.0

!

interface?Loopback16

ip?address?192.168.198.1?255.255.255.0

!

interface?Loopback17

ip?address?192.168.199.1?255.255.255.0

!

interface?Serial2/0

ip?address?192.168.1.225?255.255.255.252

serial?restart-delay?0

!

router?bgp?200

no?synchronization

bgp?log-neighbor-changes

network?192.168.1.216?mask?255.255.255.252

network?192.168.100.0

network?192.168.192.0

network?192.168.193.0

network?192.168.194.0

network?192.168.195.0

network?192.168.196.0

network?192.168.197.0

network?192.168.198.0

network?192.168.199.0

network?192.168.200.0

aggregate-address?192.168.192.0?255.255.248.0

neighbor?192.168.1.226?remote-as?100

neighbor?192.168.1.226?send-community

neighbor?192.168.1.226?route-map?community?out

no?auto-summary

!

!?

no?ip?http?server

no?ip?http?secure-server

!

!

access-list?110?permit?ip?host?192.168.192.0?host?255.255.248.0

!

route-map?community?permit?10

match?ip?address?110

set?community?none

!

route-map?community?permit?20

set?community?no-export

!

?

使用一些常用命令來查看其狀態信息,如下所示:

R2#sh?ip?bgp?

BGP?table?version?is?18,?local?router?ID?is?6.6.6.6

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*&gt;i192.168.1.200/30?3.3.3.3?0?100?0?400?i

*&gt;?192.168.1.212/30?5.5.5.5?0?0?300?i

*&gt;?192.168.1.216/30?192.168.1.225?0?0?200?i

*&gt;i192.168.50.0?3.3.3.3?0?100?0?400?i

*&gt;i192.168.75.0?3.3.3.3?0?100?0?400?i

*&gt;?192.168.100.0?192.168.1.225?0?0?200?i

*&gt;?192.168.192.0?192.168.1.225?0?0?200?i

*&gt;?192.168.192.0/21?192.168.1.225?0?0?200?i

*&gt;?192.168.193.0?192.168.1.225?0?0?200?i

*&gt;?192.168.194.0?192.168.1.225?0?0?200?i

*&gt;?192.168.195.0?192.168.1.225?0?0?200?i

*&gt;?192.168.196.0?192.168.1.225?0?0?200?i

*&gt;?192.168.197.0?192.168.1.225?0?0?200?i

*&gt;?192.168.198.0?192.168.1.225?0?0?200?i

*&gt;?192.168.199.0?192.168.1.225?0?0?200?i

*&gt;?192.168.200.0?192.168.1.225?0?0?200?i

*&gt;?192.168.250.0?5.5.5.5?0?0?300?i

?

R2#sh?ip?bgp?summary?

BGP?router?identifier?6.6.6.6,?local?AS?number?100

BGP?table?version?is?18,?main?routing?table?version?18

17?network?entries?using?1989?bytes?of?memory

17?path?entries?using?884?bytes?of?memory

5/4?BGP?path/bestpath?attribute?entries?using?620?bytes?of?memory

3?BGP?AS-PATH?entries?using?72?bytes?of?memory

1?BGP?community?entries?using?24?bytes?of?memory

0?BGP?route-map?cache?entries?using?0?bytes?of?memory

0?BGP?filter-list?cache?entries?using?0?bytes?of?memory

BGP?using?3589?total?bytes?of?memory

BGP?activity?17/0?prefixes,?17/0?paths,?scan?interval?60?secs

?

Neighbor?V?AS?MsgRcvd?MsgSent?TblVer?InQ?OutQ?Up/Down?State/PfxRcd

2.2.2.2?4?100?15?18?18?0?0?00:12:09?0

3.3.3.3?4?100?16?18?18?0?0?00:12:17?3

5.5.5.5?4?300?16?18?18?0?0?00:12:49?2

192.168.1.225?4?200?17?18?18?0?0?00:12:03?12

?

R4#sh?ip?bgp?

BGP?table?version?is?18,?local?router?ID?is?3.3.3.3

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*&gt;?192.168.1.200/30?192.168.1.205?0?0?400?i

*&gt;i192.168.1.212/30?1.1.1.1?0?100?0?300?i

*&gt;i192.168.1.216/30?1.1.1.1?0?100?0?200?i

*&gt;?192.168.50.0?192.168.1.205?0?0?400?i

*&gt;?192.168.75.0?192.168.1.205?0?0?400?i

*&gt;i192.168.100.0?1.1.1.1?0?100?0?200?i

*&gt;i192.168.192.0?1.1.1.1?0?100?0?200?i

*&gt;i192.168.192.0/21?1.1.1.1?0?100?0?200?i

*&gt;i192.168.193.0?1.1.1.1?0?100?0?200?i

*&gt;i192.168.194.0?1.1.1.1?0?100?0?200?i

*&gt;i192.168.195.0?1.1.1.1?0?100?0?200?i

*&gt;i192.168.196.0?1.1.1.1?0?100?0?200?i

*&gt;i192.168.197.0?1.1.1.1?0?100?0?200?i

*&gt;i192.168.198.0?1.1.1.1?0?100?0?200?i

*&gt;i192.168.199.0?1.1.1.1?0?100?0?200?i

*&gt;i192.168.200.0?1.1.1.1?0?100?0?200?i

*&gt;i192.168.250.0?1.1.1.1?0?100?0?300?i

?

R4#sh?ip?route?

Codes:?C?-?connected,?S?-?static,?R?-?RIP,?M?-?mobile,?B?-?BGP

D?-?EIGRP,?EX?-?EIGRP?external,?O?-?OSPF,?IA?-?OSPF?inter?area?

N1?-?OSPF?NSSA?external?type?1,?N2?-?OSPF?NSSA?external?type?2

E1?-?OSPF?external?type?1,?E2?-?OSPF?external?type?2

i?-?IS-IS,?su?-?IS-IS?summary,?L1?-?IS-IS?level-1,?L2?-?IS-IS?level-2

ia?-?IS-IS?inter?area,?*?-?candidate?default,?U?-?per-user?static?route

o?-?ODR,?P?-?periodic?downloaded?static?route

?

Gateway?of?last?resort?is?not?set

?

B?192.168.192.0/24?[200/0]?via?1.1.1.1,?00:12:47

1.0.0.0/32?is?subnetted,?1?subnets

O?1.1.1.1?[110/11]?via?192.168.1.193,?00:13:28,?Ethernet1/0

B?192.168.193.0/24?[200/0]?via?1.1.1.1,?00:12:47

2.0.0.0/32?is?subnetted,?1?subnets

O?2.2.2.2?[110/21]?via?192.168.1.193,?00:13:28,?Ethernet1/0

B?192.168.194.0/24?[200/0]?via?1.1.1.1,?00:12:47

B?192.168.75.0/24?[20/0]?via?192.168.1.205,?00:12:49

3.0.0.0/32?is?subnetted,?1?subnets

C?3.3.3.3?is?directly?connected,?Loopback5

B?192.168.195.0/24?[200/0]?via?1.1.1.1,?00:12:47

B?192.168.196.0/24?[200/0]?via?1.1.1.1,?00:12:47

B?192.168.197.0/24?[200/0]?via?1.1.1.1,?00:12:47

B?192.168.198.0/24?[200/0]?via?1.1.1.1,?00:12:48

B?192.168.199.0/24?[200/0]?via?1.1.1.1,?00:12:48

B?192.168.200.0/24?[200/0]?via?1.1.1.1,?00:12:48

B?192.168.250.0/24?[200/0]?via?1.1.1.1,?00:12:49

B?192.168.50.0/24?[20/0]?via?192.168.1.205,?00:12:51

192.168.1.0/30?is?subnetted,?7?subnets

B?192.168.1.200?[20/0]?via?192.168.1.205,?00:12:51

C?192.168.1.204?is?directly?connected,?Ethernet1/2

C?192.168.1.192?is?directly?connected,?Ethernet1/0

C?192.168.1.196?is?directly?connected,?Ethernet1/1

B?192.168.1.216?[200/0]?via?1.1.1.1,?00:12:48

O?192.168.1.220?[110/20]?via?192.168.1.193,?00:13:30,?Ethernet1/0

B?192.168.1.212?[200/0]?via?1.1.1.1,?00:12:49

B?192.168.100.0/24?[200/0]?via?1.1.1.1,?00:12:48

B?192.168.192.0/21?[200/0]?via?1.1.1.1,?00:12:48

?

R4#sh?ip?bgp?summary?

BGP?router?identifier?3.3.3.3,?local?AS?number?100

BGP?table?version?is?18,?main?routing?table?version?18

17?network?entries?using?1989?bytes?of?memory

17?path?entries?using?884?bytes?of?memory

5/4?BGP?path/bestpath?attribute?entries?using?620?bytes?of?memory

3?BGP?AS-PATH?entries?using?72?bytes?of?memory

0?BGP?route-map?cache?entries?using?0?bytes?of?memory

0?BGP?filter-list?cache?entries?using?0?bytes?of?memory

BGP?using?3565?total?bytes?of?memory

BGP?activity?17/0?prefixes,?17/0?paths,?scan?interval?60?secs

?

Neighbor?V?AS?MsgRcvd?MsgSent?TblVer?InQ?OutQ?Up/Down?State/PfxRcd

1.1.1.1?4?100?19?17?18?0?0?00:13:37?14

2.2.2.2?4?100?16?17?18?0?0?00:13:25?0

192.168.1.205?4?400?17?19?18?0?0?00:13:30?3

?

R5#sh?ip?bgp?

BGP?table?version?is?18,?local?router?ID?is?192.168.75.1

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*&gt;?192.168.1.200/30?0.0.0.0?0?32768?i

*&gt;?192.168.1.212/30?192.168.1.206?0?100?300?i

*&gt;?192.168.1.216/30?192.168.1.206?0?100?200?i

*&gt;?192.168.50.0?0.0.0.0?0?32768?i

*&gt;?192.168.75.0?0.0.0.0?0?32768?i

*&gt;?192.168.100.0?192.168.1.206?0?100?200?i

*&gt;?192.168.192.0?192.168.1.206?0?100?200?i

*&gt;?192.168.192.0/21?192.168.1.206?0?100?200?i

*&gt;?192.168.193.0?192.168.1.206?0?100?200?i

*&gt;?192.168.194.0?192.168.1.206?0?100?200?i

*&gt;?192.168.195.0?192.168.1.206?0?100?200?i

*&gt;?192.168.196.0?192.168.1.206?0?100?200?i

*&gt;?192.168.197.0?192.168.1.206?0?100?200?i

*&gt;?192.168.198.0?192.168.1.206?0?100?200?i

*&gt;?192.168.199.0?192.168.1.206?0?100?200?i

*&gt;?192.168.200.0?192.168.1.206?0?100?200?i

*&gt;?192.168.250.0?192.168.1.206?0?100?300?i

?

R5#sh?ip?route?

Codes:?C?-?connected,?S?-?static,?R?-?RIP,?M?-?mobile,?B?-?BGP

D?-?EIGRP,?EX?-?EIGRP?external,?O?-?OSPF,?IA?-?OSPF?inter?area?

N1?-?OSPF?NSSA?external?type?1,?N2?-?OSPF?NSSA?external?type?2

E1?-?OSPF?external?type?1,?E2?-?OSPF?external?type?2

i?-?IS-IS,?su?-?IS-IS?summary,?L1?-?IS-IS?level-1,?L2?-?IS-IS?level-2

ia?-?IS-IS?inter?area,?*?-?candidate?default,?U?-?per-user?static?route

o?-?ODR,?P?-?periodic?downloaded?static?route

?

Gateway?of?last?resort?is?not?set

?

B?192.168.192.0/24?[20/0]?via?192.168.1.206,?00:13:03

B?192.168.193.0/24?[20/0]?via?192.168.1.206,?00:13:03

B?192.168.194.0/24?[20/0]?via?192.168.1.206,?00:13:03

C?192.168.75.0/24?is?directly?connected,?Loopback1

B?192.168.195.0/24?[20/0]?via?192.168.1.206,?00:13:03

B?192.168.196.0/24?[20/0]?via?192.168.1.206,?00:13:03

B?192.168.197.0/24?[20/0]?via?192.168.1.206,?00:13:03

B?192.168.198.0/24?[20/0]?via?192.168.1.206,?00:13:03

B?192.168.199.0/24?[20/0]?via?192.168.1.206,?00:13:03

B?192.168.200.0/24?[20/0]?via?192.168.1.206,?00:13:03

B?192.168.250.0/24?[20/0]?via?192.168.1.206,?00:13:34

C?192.168.50.0/24?is?directly?connected,?Loopback0

192.168.1.0/30?is?subnetted,?4?subnets

C?192.168.1.200?is?directly?connected,?Loopback3

C?192.168.1.204?is?directly?connected,?Ethernet1/0

B?192.168.1.216?[20/0]?via?192.168.1.206,?00:13:04

B?192.168.1.212?[20/0]?via?192.168.1.206,?00:13:35

B?192.168.100.0/24?[20/0]?via?192.168.1.206,?00:13:04

B?192.168.192.0/21?[20/0]?via?192.168.1.206,?00:13:04

?

??九、配置樣例2??

?

下面的示例中涉及到聚合路由內容,并將聚合路由使用communityrouter-mapprefix-list等功能實現過濾精細路由,拓撲圖如下所示。

clip_image024[4]

具體配置如下:

R1#sh?running-config?

!

hostname?R1

!

interface?Loopback0

ip?address?192.168.192.1?255.255.255.0

!

interface?Loopback1

ip?address?192.168.193.1?255.255.255.0

!?

interface?Loopback2

ip?address?192.168.194.1?255.255.255.0

!

interface?Loopback3

ip?address?192.168.195.1?255.255.255.0

!

interface?Loopback4

ip?address?192.168.196.1?255.255.255.0

!

interface?Loopback5

ip?address?192.168.197.1?255.255.255.0

!

interface?Loopback6

ip?address?192.168.198.1?255.255.255.0

!

interface?Loopback7

ip?address?192.168.199.1?255.255.255.0

!

interface?Ethernet1/0

ip?address?10.1.1.1?255.255.255.0

duplex?half

!

interface?Ethernet1/1

ip?address?10.1.6.1?255.255.255.0

duplex?half

!

router?ospf?10

log-adjacency-changes

network?10.1.1.0?0.0.0.255?area?0

network?10.1.6.0?0.0.0.255?area?0

network?192.168.192.0?0.0.0.255?area?0

network?192.168.193.0?0.0.0.255?area?0

network?192.168.194.0?0.0.0.255?area?0

network?192.168.195.0?0.0.0.255?area?0

network?192.168.196.0?0.0.0.255?area?0

network?192.168.197.0?0.0.0.255?area?0

network?192.168.198.0?0.0.0.255?area?0

network?192.168.199.0?0.0.0.255?area?0

-------------------------------------------------------------------------------------------------------------------------

R2#sh?running-config?

interface?Ethernet1/0

ip?address?10.1.1.2?255.255.255.0

duplex?half

!

interface?Serial2/0

ip?address?10.1.2.1?255.255.255.0

serial?restart-delay?0

!

router?ospf?10

log-adjacency-changes

network?10.1.1.0?0.0.0.255?area?0

!

router?bgp?100

no?synchronization

bgp?log-neighbor-changes

aggregate-address?192.168.192.0?255.255.248.0

redistribute?ospf?10?metric?50

neighbor?10.1.2.2?remote-as?200

neighbor?10.1.2.2?send-community

neighbor?10.1.2.2?route-map?community?out

neighbor?10.1.6.2?remote-as?100

no?auto-summary

!

access-list?110?permit?ip?host?192.168.192.0?host?255.255.248.0

!

route-map?community?permit?10

match?ip?address?110

set?community?none

!

route-map?community?permit?20

set?community?no-export

!

-------------------------------------------------------------------------------------------------------------------------

R3#sh?running-config?

interface?Ethernet1/0

ip?address?10.1.7.1?255.255.255.0

duplex?half

!

interface?Serial2/0

ip?address?10.1.2.2?255.255.255.0

serial?restart-delay?0

!

interface?Serial2/1

ip?address?10.1.3.1?255.255.255.0

serial?restart-delay?0

!

router?bgp?200

no?synchronization

bgp?log-neighbor-changes

neighbor?10.1.2.1?remote-as?100

neighbor?10.1.3.2?remote-as?300

neighbor?10.1.7.2?remote-as?200

no?auto-summary

!

-------------------------------------------------------------------------------------------------------------------------

R4#sh?running-config?

interface?Serial2/0

ip?address?10.1.3.2?255.255.255.0

serial?restart-delay?0

!?

interface?Serial2/1

ip?address?10.1.4.1?255.255.255.0

serial?restart-delay?0

!

router?bgp?300

no?synchronization

bgp?log-neighbor-changes

neighbor?10.1.3.1?remote-as?200

neighbor?10.1.4.2?remote-as?200

no?auto-summary

!

-------------------------------------------------------------------------------------------------------------------------

R5#sh?running-config?

interface?Ethernet1/0

ip?address?10.1.7.2?255.255.255.0

duplex?half

!

interface?Serial2/0

ip?address?10.1.4.2?255.255.255.0

serial?restart-delay?0

!

interface?Serial2/1

ip?address?10.1.5.1?255.255.255.0

serial?restart-delay?0

!

router?bgp?200

no?synchronization

bgp?log-neighbor-changes

neighbor?10.1.4.1?remote-as?300

neighbor?10.1.5.2?remote-as?100

neighbor?10.1.7.1?remote-as?200

no?auto-summary

!

-------------------------------------------------------------------------------------------------------------------------

R6#sh?running-config?

interface?Ethernet1/0

ip?address?10.1.6.2?255.255.255.0

duplex?half

!

interface?Serial2/0

ip?address?10.1.5.2?255.255.255.0

serial?restart-delay?0

!

!

router?ospf?10

log-adjacency-changes

network?10.1.6.0?0.0.0.255?area?0

!

router?bgp?100

no?synchronization

bgp?log-neighbor-changes

aggregate-address?192.168.192.0?255.255.248.0

redistribute?ospf?10?metric?50

neighbor?10.1.1.2?remote-as?100

neighbor?10.1.5.1?remote-as?200

neighbor?10.1.5.1?send-community

neighbor?10.1.5.1?route-map?community?out

no?auto-summary

!

!

ip?prefix-list?aggregate?seq?5?permit?192.168.192.0/21

!

route-map?community?permit?10

match?ip?address?prefix-list?aggregate

set?community?none

!

route-map?community?permit?20

set?community?no-export

!

配置完成以后,可以查看聚合路由表。

R4#sh?ip?bgp?

BGP?table?version?is?32,?local?router?ID?is?10.1.4.1

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*?192.168.192.0/21?10.1.4.2?0?200?100?i

*&gt;?10.1.3.1?0?200?100?i

R3#sh?ip?bgp?

BGP?table?version?is?22,?local?router?ID?is?10.1.7.1

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*?i10.1.1.0/24?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?0?0?100??

*?i10.1.6.0/24?10.1.5.2?0?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.192.0/21?10.1.5.2?0?100?0?100?i

*&gt;?10.1.2.1?0?0?100?i

*?i192.168.192.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.193.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.194.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.195.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.196.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.197.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.198.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.199.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

R5#sh?ip?bgp?

BGP?table?version?is?33,?local?router?ID?is?10.1.7.2

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*?i10.1.1.0/24?10.1.2.1?0?100?0?100??

*&gt;?10.1.5.2?50?0?100??

*?i10.1.6.0/24?10.1.2.1?50?100?0?100??

*&gt;?10.1.5.2?0?0?100??

*&gt;?192.168.192.0/21?10.1.5.2?0?0?100?i

*?i?10.1.2.1?0?100?0?100?i

*?i192.168.192.1/32?10.1.2.1?50?100?0?100??

*&gt;?10.1.5.2?50?0?100??

*?i192.168.193.1/32?10.1.2.1?50?100?0?100??

*&gt;?10.1.5.2?50?0?100??

*?i192.168.194.1/32?10.1.2.1?50?100?0?100??

*&gt;?10.1.5.2?50?0?100??

*?i192.168.195.1/32?10.1.2.1?50?100?0?100??

*&gt;?10.1.5.2?50?0?100??

*?i192.168.196.1/32?10.1.2.1?50?100?0?100??

*&gt;?10.1.5.2?50?0?100??

*?i192.168.197.1/32?10.1.2.1?50?100?0?100??

*&gt;?10.1.5.2?50?0?100??

*?i192.168.198.1/32?10.1.2.1?50?100?0?100??

*&gt;?10.1.5.2?50?0?100??

*?i192.168.199.1/32?10.1.2.1?50?100?0?100??

*&gt;?10.1.5.2?50?0?100??

使用下面的命令查看攜帶NO-EPORT?COMMUNITY屬性的路由情況

R3#sh?ip?bgp?community?no-export?

BGP?table?version?is?22,?local?router?ID?is?10.1.7.1

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*&gt;?10.1.1.0/24?10.1.2.1?0?0?100??

*&gt;?10.1.6.0/24?10.1.2.1?50?0?100??

*&gt;?192.168.192.1/32?10.1.2.1?50?0?100??

*&gt;?192.168.193.1/32?10.1.2.1?50?0?100??

*&gt;?192.168.194.1/32?10.1.2.1?50?0?100??

*&gt;?192.168.195.1/32?10.1.2.1?50?0?100??

*&gt;?192.168.196.1/32?10.1.2.1?50?0?100??

*&gt;?192.168.197.1/32?10.1.2.1?50?0?100??

*&gt;?192.168.198.1/32?10.1.2.1?50?0?100??

*&gt;?192.168.199.1/32?10.1.2.1?50?0?100??

?

R5#sh?ip?bgp?community?no-export?

BGP?table?version?is?33,?local?router?ID?is?10.1.7.2

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*&gt;?10.1.1.0/24?10.1.5.2?50?0?100??

*&gt;?10.1.6.0/24?10.1.5.2?0?0?100??

*&gt;?192.168.192.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.193.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.194.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.195.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.196.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.197.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.198.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.199.1/32?10.1.5.2?50?0?100??

也可以在上面配置的基礎上實現如下策略:

??通過R2-R3鏈路來宣告192.168.192.0/24、192.168.193.0/24、192.168.194.0/24

??通過R6-R5鏈路來宣告192.168.196.0/24、192.168.197.0/24、192.168.198.0/24

??不宣告192.168.195.0/24、192.168.199.0/24

具體配置如下:

R2#sh?running-config

router?bgp?100

no?synchronization

bgp?log-neighbor-changes

aggregate-address?192.168.192.0?255.255.248.0?suppress-map?suppress

!

access-list?1?permit?192.168.195.0?0.0.0.255

access-list?1?permit?192.168.196.0?0.0.3.255

!

route-map?suppress?permit?10

match?ip?address?1

?

R6#sh?running-config

router?bgp?100

no?synchronization

bgp?log-neighbor-changes

aggregate-address?192.168.192.0?255.255.248.0?suppress-map?suppress

!

ip?prefix-list?suppress?seq?5?permit?192.168.192.0/22?le?24

ip?prefix-list?suppress?seq?10?permit?192.168.199.0/24

!

route-map?suppress?permit?10

match?ip?address?prefix-list?suppress

使用命令查看路由狀態

R3#sh?ip?bgp?

BGP?table?version?is?39,?local?router?ID?is?10.1.7.1

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*?i10.1.1.0/24?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?0?0?100??

*?i10.1.6.0/24?10.1.5.2?0?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.192.0/21?10.1.5.2?0?100?0?100?i

*&gt;?10.1.2.1?0?0?100?i

*?i192.168.192.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.193.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.194.1/32?10.1.5.2?50?100?0?100??

*&gt;?10.1.2.1?50?0?100??

*?i192.168.195.1/32?10.1.5.2?50?100?0?100??

*?i192.168.196.1/32?10.1.5.2?50?100?0?100??

*?i192.168.197.1/32?10.1.5.2?50?100?0?100??

*?i192.168.198.1/32?10.1.5.2?50?100?0?100??

*?i192.168.199.1/32?10.1.5.2?50?100?0?100??

?

?

R5#sh?ip?bgp?

BGP?table?version?is?62,?local?router?ID?is?10.1.7.2

Status?codes:?s?suppressed,?d?damped,?h?history,?*?valid,?&gt;?best,?i?-?internal,

r?RIB-failure,?S?Stale

Origin?codes:?i?-?IGP,?e?-?EGP,???-?incomplete

?

Network?Next?Hop?Metric?LocPrf?Weight?Path

*&gt;?10.1.1.0/24?10.1.5.2?50?0?100??

*?i?10.1.2.1?0?100?0?100??

*&gt;?10.1.6.0/24?10.1.5.2?0?0?100??

*?i?10.1.2.1?50?100?0?100??

*&gt;?192.168.192.0/21?10.1.5.2?0?0?100?i

*?i?10.1.2.1?0?100?0?100?i

*&gt;?192.168.192.1/32?10.1.5.2?50?0?100??

*?i?10.1.2.1?50?100?0?100??

*&gt;?192.168.193.1/32?10.1.5.2?50?0?100??

*?i?10.1.2.1?50?100?0?100??

*&gt;?192.168.194.1/32?10.1.5.2?50?0?100??

*?i?10.1.2.1?50?100?0?100??

*&gt;?192.168.195.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.196.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.197.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.198.1/32?10.1.5.2?50?0?100??

*&gt;?192.168.199.1/32?10.1.5.2?50?0?100??

轉載于:https://www.cnblogs.com/sddai/p/5988094.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457105.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457105.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457105.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle 備份導出,oracle 怎么備份或導入導出表

exp/imp下面介紹的是導入導出的實例&#xff0c;向導入導出看實例基本上就可以完成&#xff0c;因為導入導出很簡單。數據導出&#xff1a;1 將數據庫TEST完全導出,用戶名system 密碼manager 導出到D:\daochu.dmp中exp system/managerTEST filed:\daochu.dmp fully2 將數據庫中…

GitHub+Hexo搭建自己的Blog之-本地環境部署01

前言 之前我的博客沒有綁自己的域名&#xff0c;一直在github上放著&#xff0c;訪問起來比較麻煩&#xff0c;前陣子在阿里云買了這個域名&#xff0c;配置上之后&#xff0c;就可以通過自己的域名訪問了&#xff0c;有些朋友問我這個博客怎么搭的&#xff0c;用的什么主題&am…

appsettings 連接oracle數據庫,ABP .net core集成訪問Oracle數據庫

1.添加包引用&#xff1a;Microsoft.EntityFrameworkCore.RelationalOracle.EntityFrameworkCore2.重寫DbContext OnModelCreating/// /// 判斷如果是Oracle&#xff0c;需要執行Schema/// /// protected override void OnModelCreating(ModelBuilder modelBuilder){//判斷當前…

Day08-函數(3)

import functools #偏函數 def demo(a,b,c,d):print(a,b,c,d)# def partital_demo(a,b): # demo(a,b,3,4) # partital_demo(1,2)#實現偏函數 # #固定前兩個 # demo functools.partial(demo,5,6) # demo(10,50)# #固定后兩個 # demofunctools.partial(demo,c3,d5) # demo(1…

使用VS2010編譯Qt 5.6.1過程記錄

由于Qt官方發布的Qt 5.6.1二進制安裝包沒有對應VS2010版本的&#xff0c;而我的電腦上只安裝了VS2010&#xff0c;因此只能自己編譯。 本文記錄本人的編譯安裝過程&#xff0c;以及其中遇到的一些問題。 本文使用VS2010 32位編譯Qt 5.6.1。 1. 下載Qt源代碼 Qt源代碼下載地址&…

golang 指針

指針1、簡單的定義一個指針package mainimport "fmt"func main(){var p *inti :2p &ifmt.Println("memory address i:",p) } //執行結果&#xff1a; memory address i: 0xc42000a2e02、打印指針的值package mainimport "fmt"func main(){v…

php防錯處理,更好的PHP錯誤處理

錯誤類型PHP 主要有兩種錯誤&#xff1a;觸發錯誤和異常。其中觸發錯誤大概可以分為&#xff1a;編譯錯誤、引擎錯誤和運行時錯誤&#xff0c;其中前兩個是無法捕獲的&#xff1b;異常都是可以捕獲的&#xff0c;當沒有嘗試捕獲時則會中斷代碼。觸發錯誤可以通過 error_get_las…

Windows安裝Apache注冊服務出現(OS 5)拒絕訪問。 : AH00369: Failed to open the Windows service manager,

windows安裝Apache&#xff0c;注冊服務出現“(OS 5)拒絕訪問。 : AH00369: Failed to open the WinNT service manager..."錯誤 在安裝Apache的時候&#xff0c;我下載的是zip格式&#xff0c;不是msi安裝版&#xff0c;需要自己注冊服務&#xff0c;才能在桌面任務欄里有…

算法與數據結構(三) 二叉樹的遍歷及其線索化(Swift版)

前面兩篇博客介紹了線性表的順序存儲與鏈式存儲以及對應的操作&#xff0c;并且還聊了棧與隊列的相關內容。本篇博客我們就繼續聊數據結構的相關東西&#xff0c;并且所涉及的相關Demo依然使用面向對象語言Swift來表示。本篇博客我們就來介紹樹結構的一種&#xff1a;二叉樹。在…

關于android開發時,發生Error infalting classa com.baidu.mapapi.map.MapView的解決辦法

1.問題描述&#xff1a;百度地圖SDK中 Error&#xff1a; infalting classa com.baidu.mapapi.map.MapView 。 2.解決辦法&#xff1a;通過1個多小時的上網搜索&#xff0c;最終發現很多網友之所以出現這方面的問題有以下幾種原因&#xff1a; &#xff08;1&#xff09;.忘…

c++動態綁定的技術實現

1 什么是動態綁定 有一個基類&#xff0c;兩個派生類&#xff0c;基類有一個virtual函數&#xff0c;兩個派生類都覆蓋了這個虛函數。現在有一個基類的指針或者引用&#xff0c;當該基類指針或者引用指向不同的派生類對象時&#xff0c;調用該虛函數&#xff0c;那么最終調用的…

linux替換某個文件夾下所有文件,Linux 批量查找并替換文件夾下所有文件的內容...

1.批量查找某個目下文件的包含的內容cd etcgrep -rn "查找的內容" ./2.批量替換某個目下所有包含的文件的內容cd etcsed -i "s/查找的內容/替換后的內容/g" grep -rl "查找的內容" ./3.批量查找并替換任意文件夾下的文件內容。sed -i "s/要…

Day09-遞歸

#模擬棧結構 stack [] #壓棧&#xff08;想棧里存數據&#xff09; stack.append("A") print(stack) stack.append("B") print(stack) stack.append("C") print(stack)#出棧&#xff08;在棧里取數據&#xff09; res stack.pop() print("…

java中String相等問題

判斷兩個字符串是否相等的問題。在編程中&#xff0c;通常比較兩個字符串是否相同的表達式是“”,但在java中不能這么寫。在java中&#xff0c;用的是equals(); 例&#xff1a;A字符串和B和字符串比較: if(A.equals(B)){ } 返回true 或false. String 的equals 方法用于比較兩個…

linux proc文件 write的原子性,linux - Linux中writev()系統調用的原子性 - 堆棧內存溢出...

在fs.h找到它&#xff1a;static inline void file_start_write(struct file *file){if (!S_ISREG(file_inode(file)->i_mode))return;__sb_start_write(file_inode(file)->i_sb, SB_FREEZE_WRITE, true);}然后在super.c&#xff1a;/** This is an internal function, p…

關于對發送HTTP請求以及解析服務器返回的數據操作的提取到一個公共類中進行封裝

創建一個名為HttpUtil的類并提供名為sendHttpRequest靜態方法.相關代碼如下&#xff1a; package com.hzy.networktest;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;p…

初始化CSS

不同的瀏覽器默認樣式不一樣,所以容易出現兼容性問題,每次寫網頁時都應該都網頁的css或HTML標簽進行初始化 這樣可以節約代碼,節約網頁下載時間,是網頁內容更加簡潔, 大致需要初始化的地方有 H1-H4標簽,table標簽,文字大小,文字沒有鏈接,超鏈接樣式,DIV,居中,ol,ul,li,img等等的…

Day10-時間

UTC(世界協調時間)&#xff1a;格林尼織天文時間 在中國來說是UTC8 DST&#xff08;夏令時&#xff09;&#xff1a;是一種節約能源而人為規定時間制度&#xff0c;在夏季調快一個小時時間的表示形式&#xff1a; 1、時間戳 以整形或浮點型表示時間的一個以秒為單位的時間間隔 …

WebForm 分頁與組合查詢

1.封裝實體類 2.寫查詢方法 //SubjectData類 public List<Subject> Select(string name){List<Subject> list new List<Subject>();cmd.CommandText "select *from Subject where SubjectName like a ";cmd.Parameters.Clear();cmd.Parameters.A…

linux如何輸出當前時間,如何在linux下輸出當前時間

用localtime可直接分解出年月日時分秒QUOTE:struct tm *ptm;long ts;int y,m,d,h,n,s;ts time(NULL);ptm localtime(&ts);y ptm->tm_year1900; //年m ptm->tm_mon1; //月d ptm->tm_mday; //日h ptm->tm_hour; //時n ptm->tm_min; //分s ptm->tm_…