1.根本原因
導致路由收斂環路的根本原因是:同前綴的不同路徑,比較順序不同,最佳路徑選擇的結果不同——存在路徑比較環路
例如Net A有三條路徑a、b、c,如果存在如下關係,則可能會發生路由收斂環路
a > b,b > c,c > a
而如果不滿足上述條件,三條路徑相互比較,一定能夠比較出優先級序列,例如
a > b,c > b,a > c,則有a > c > b
在此情況下,由於選路優先級明確,即便在收斂過程中可能會出現浮動,但是最終一定能夠收斂到預測的結果
在BGP中,具體表現爲AS_PATH中最近的AS不一致時,不比較MED;而AS_PATH中最近的AS相同時比較MED
當有多條路徑時,可能導致某些路徑比較MED值,而某些路徑比較其它選路參數
2.收斂環路現象及解決辦法
2.1 現象
①BGP Table Version值不斷增加
and
②BGP路徑不斷切換,路徑數量也會發生浮動
2.2 解決辦法
①配置deterministic-med,防止路由比較環路的產生——推薦做法
②always-compare-med
③將MED值置爲0(可以配合community使用)
3.iBGP全互聯環境下的收斂環路
如上圖所示,聯盟內某個AS 4臺設備分別收到4條相同前綴的更新,其優先情況爲R1> R2 > R3,R4 > R1,R2 > R4,R3 > R4
3.1 初始情況
R1:
Path | Next Hop | AS_PATH | MED | RID |
1 | - | 100 | 1 | 10.10.10.10 |
其它設備同理,這裏不一一列出,紅色路徑表示當前選擇的最佳路徑
3.2 4臺設備相互發送更新後,其BGP轉發表分別如下
R1:
Path | Next Hop | AS_PATH | MED | RID |
1 | R2 | 100 | 2 | 2.2.2.2 |
2 | R4 | 200 | 1 | 4.4.4.4 |
3 | R3 | 100 | 3 | 3.3.3.3 |
4 | - | 100 | 1 | 10.10.10.10 |
R1上選路未發生改變,下一步本地無操作
R2:
Path | Next Hop | AS_PATH | MED | RID |
1 | R3 | 100 | 3 | 3.3.3.3 |
2 | R4 | 200 | 1 | 4.4.4.4 |
3 | R1 | 100 | 1 | 10.10.10.10 |
4 | - | 100 | 2 | 2.2.2.2 |
此時R2上的選路發生改變,R2下一步將回收向R1、R3、R4通告的更新
R3:
Path | Next Hop | AS_PATH | MED | RID |
1 | R2 | 100 | 2 | 2.2.2.2 |
2 | R4 | 200 | 1 | 4.4.4.4 |
3 | R1 | 100 | 1 | 10.10.10.10 |
4 | - | 100 | 3 | 3.3.3.3 |
此時R3上的選路發生改變,R2下一步將回收向R1、R2、R4通告的更新
R4:
Path | Next Hop | AS_PATH | MED | RID |
1 | R2 | 100 | 2 | 2.2.2.2 |
2 | R3 | 100 | 3 | 3.3.3.3 |
3 | R1 | 100 | 1 | 10.10.10.10 |
4 | - | 200 | 1 | 4.4.4.4 |
R4上選路未發生改變,下一步本地無操作
3.3 R2、R3的更新被回收
R1:
Path | Next Hop | AS_PATH | MED | RID |
1 | R4 | 200 | 1 | 4.4.4.4 |
2 | - | 100 | 1 | 10.10.10.10 |
R1上的最佳路徑發生改變,R1將回收通告的更新
R2:
Path | Next Hop | AS_PATH | MED | RID |
1 | R4 | 200 | 1 | 4.4.4.4 |
2 | R1 | 100 | 1 | 10.10.10.10 |
3 | - | 100 | 2 | 2.2.2.2 |
R2上最佳路徑發生改變,R2將通告更新
R3:
Path | Next Hop | AS_PATH | MED | RID |
1 | R4 | 200 | 1 | 4.4.4.4 |
2 | R1 | 100 | 1 | 10.10.10.10 |
3 | - | 100 | 3 | 3.3.3.3 |
R4:
Path | Next Hop | AS_PATH | MED | RID |
1 | R1 | 100 | 1 | 10.10.10.10 |
2 | - | 200 | 1 | 4.4.4.4 |
R4上最佳路徑未發生改變,下一步無操作
3.4 R1回收更新,R2、R3通告更新
R1:
Path | Next Hop | AS_PATH | MED | RID |
1 | R3 | 100 | 3 | 3.3.3.3 |
2 | R2 | 100 | 2 | 2.2.2.2 |
3 | R4 | 200 | 1 | 4.4.4.4 |
4 | - | 100 | 1 | 10.10.10.10 |
R1上的最佳路徑發生改變,R1將通告更新
R2:
Path | Next Hop | AS_PATH | MED | RID |
1 | R3 | 100 | 3 | 3.3.3.3 |
2 | R4 | 200 | 1 | 4.4.4.4 |
3 | - | 100 | 2 | 2.2.2.2 |
R2上最佳路徑未發生改變
R3:
Path | Next Hop | AS_PATH | MED | RID |
1 | R2 | 100 | 2 | 2.2.2.2 |
2 | R4 | 200 | 1 | 4.4.4.4 |
3 | - | 100 | 3 | 3.3.3.3 |
R3上最佳路徑發生改變,R3將回收通告的更新
R4:
Path | Next Hop | AS_PATH | MED | RID |
1 | R3 | 100 | 3 | 3.3.3.3 |
2 | R2 | 100 | 2 | 2.2.2.2 |
3 | - | 200 | 1 | 3.3.3.3 |
R4上最佳路徑發生改變,R4將回收通告的更新
3.5 R1通告更新,R3、R4回收更新
R1:
Path | Next Hop | AS_PATH | MED | RID |
1 | R2 | 100 | 2 | 2.2.2.2 |
2 | - | 100 | 1 | 10.10.10.10 |
R1上最佳路徑未改變
R2:
Path | Next Hop | AS_PATH | MED | RID |
1 | R1 | 100 | 1 | 10.10.10.10 |
2 | - | 100 | 2 | 2.2.2.2 |
R2上最佳路徑發生改變,將回收更新
R3:
Path | Next Hop | AS_PATH | MED | RID |
1 | R1 | 100 | 1 | 10.10.10.10 |
2 | R2 | 100 | 2 | 2.2.2.2 |
3 | - | 100 | 3 | 3.3.3.3 |
R3上最佳路徑發生改變,下一步無操作
R4:
Path | Next Hop | AS_PATH | MED | RID |
1 | R1 | 100 | 1 | 10.10.10.10 |
2 | R2 | 100 | 2 | 2.2.2.2 |
3 | - | 200 | 1 | 3.3.3.3 |
R4上最佳路徑發生改變,將通告更新
3.6 R2回收更新,R4通告更新
R1:
Path | Next Hop | AS_PATH | MED | RID |
1 | R4 | 200 | 1 | 4.4.4.4 |
2 | - | 100 | 1 | 10.10.10.10 |
R2:
Path | Next Hop | AS_PATH | MED | RID |
1 | R4 | 200 | 1 | 4.4.4.4 |
2 | R1 | 100 | 1 | 10.10.10.10 |
3 | - | 100 | 2 | 2.2.2.2 |
R3:
Path | Next Hop | AS_PATH | MED | RID |
1 | R4 | 200 | 1 | 4.4.4.4 |
2 | R1 | 100 | 1 | 10.10.10.10 |
3 | - | 100 | 3 | 3.3.3.3 |
R4:
Path | Next Hop | AS_PATH | MED | RID |
1 | R1 | 100 | 1 | 10.10.10.10 |
2 | - | 200 | 1 | 4.4.4.4 |
此時情況與(3)完全相同,收斂環路發生
3.7 小結
iBGP全互聯網絡存在路由收斂環路的風險,但是其發生概率相對較小,尤其是在非聯盟環境中,由於MED之後將比較iBGP與eBGP通告的更新(eBGP由於iBGP),當AS_PATH不同時,這往往會導致設備優選eBGP通告的更新,進而防止收斂環路發生
而在聯盟內由於聯盟內iBGP與聯盟內eBGP優先級相同,此時路由會收到下一跳IGPmetric或RID的影響,導致收斂環路發生的概率上升
4.RR環境下clients之間的收斂環路
如上圖所示
R2收到更新爲Net A,AS_PATH 200 400,MED 10,R2的RID爲22.22.22.22
R3收到更新爲Net A,AS_PATH 300 400,MED 5,R3的RID爲33.33.33.33
R4收到更新爲Net A,AS_PATH 300 400,MED 6,R4的RID爲4.4.4.4
三條更新如果直接比較有如下關係:
R2 > R3,R3 >R4,R4 > R2,存在路由比較環路
在該環境下,R2、R3、R4分別將更新通告給R1,R1選擇最優路徑進行通告,依次下去,將產生路由收斂環路,這裏不再詳細分析
與iBGP全互聯相比,這裏區別在於:
①選路由中間設備RR完成
②RR上當MED無法比較出最優路徑時,往往比較下一跳IGP開銷或RID,而不存在eBGP由於iBGP的比較關係
5.RR網絡的收斂環路
如上圖所示
R2收到更新爲Net A,AS_PATH 200 400,MED 10
R3收到更新爲Net A,AS_PATH 300 400,MED 5
R4收到更新爲Net A,AS_PATH 300 400,MED 6
R1上如果同時收到3條更新,IGP metric分別爲
to R2:15
to R3:20
to R4:11
R8上入股同時收到3條更新,IGP metric分別爲
to R2:20
to R3:25
to R4:6
三條更新如果在R1或R8上直接比較有如下關係:
R2 > R3,R3 >R4,R4 > R2,存在路由比較環路
在該環境下同樣存在路由收斂環路,這裏不再詳細分析
6.Confederation環境下的路由收斂環路
如上圖所示,R5、R6通告的更新內容與之前幾個案例中相同,聯盟內同一子AS中建立全互聯iBGP會話,由於聯盟內的子AS其長度爲0,因此實際上該環境與RR網絡中是相同的(R1在R2、R3中只選擇最優的路徑通告給R8,整體上講,兩個子系統都只將本地選擇的最佳路徑通告給另一個子系統),這裏同樣不再做詳細分析
注意:
在上例與RR網絡的收斂案例中,通過修改IGP metric確實也可以解決出現的問題,但是筆者認爲,爲了解決根本問題,還是應當配置deterministric-med這樣的命令,一方面保證選路的合理性(相比較於always-compare-med),另一方面確保網絡環境變化時的適用性