Nəzəri əsaslar və memarlıq
Operator şəbəkəsində daxili BGP (iBGP, RFC 4271) sərhəd PE routerlərini birləşdirən əsas protokoldur. eBGP-dən fərqli olaraq iBGP daxilində AS_PATH artırılmır. Dövrələrin qarşısını almaq üçün iBGP Split Horizon qaydası tətbiq olunur: bir iBGP qonşudan öyrənilən marşrut heç vaxt digər iBGP qonşuya göndərilmir! Bu səbəbdən Full Mesh topologiyası tələb olunur: hər bir PE digər bütün PE-lərlə birbaşa iBGP sessiyasına malik olmalıdır (N*(N-1)/2 düsturu: 10 PE üçün 45, 100 PE üçün 4950 sessiya). iBGP sessiyaları Loopback0 ünvanları arasında qurulur (update-source). next-hop-self PE-də eBGP qonşulardan öyrənilən marşrutlar üçün lazımdır (əks halda next hop nüvəyə məlum olmayan CE ünvanı olar); VPNv4/VPNv6-da PE next hop-u özü avtomatik təyin edir.
iBGP və eBGP: əslində nə ilə fərqlənirlər
Protokol eynidir (RFC 4271, TCP/179), lakin davranışı qonşuların eyni AS-də olub-olmamasından asılıdır. Provayder şəbəkəsinin dizaynına təsir edən fərqlər:
| Xassə | eBGP | iBGP |
|---|---|---|
| Qonşunun AS-i | başqa | eyni (65000) |
| AS_PATH | göndərərkən yerli AS əlavə olunur | dəyişmir |
| NEXT_HOP | göndərənin ünvanı ilə əvəz olunur | dəyişmir |
| LOCAL_PREF | ötürülmür | ötürülür, susmaya görə 100 |
| Sessiya paketlərinin TTL-i | 1 (loopback üçün multihop lazımdır) | 255 |
| Admin distance Cisco / Junos preference | 20 / 170 | 200 / 170 |
| Marşrutun başqa qonşuya ötürülməsi | istənilən qonşuya | yalnız marşrut eBGP-dən və ya lokal olduqda |
Sonuncu sətir iBGP split horizon qaydasıdır: iBGP qonşusundan öyrənilmiş marşrut başqa iBGP qonşusuna göndərilə bilməz. AS daxilində AS_PATH artmır və ondan döngünü aşkar etmək mümkün deyil, buna görə bu qayda loop prevention-ı əvəz edir.
Full mesh riyaziyyatı
Hər iBGP spikeri digər hamı ilə sessiya qurmalıdır, əks halda bəzi marşrutlar ona çatmayacaq. N marşrutlaşdırıcı üçün N*(N-1)/2 sessiya lazımdır, hər birində N-1:
- 4 PE: 6 sessiya, hər düyündə 3;
- 10 PE: 45 sessiya, hər birində 9;
- 20 PE: 190 sessiya, hər birində 19;
- 50 PE: 1225 sessiya, hər birində 49;
- 100 PE: 4950 sessiya, hər birində 99.
Yalnız TCP sessiyalarının sayı artmır. Hər PE hər qonşudan bir yol saxlayır: 900 min prefiks və 99 qonşu ilə Adj-RIB-In on milyonlarla yol saxlaya bilər, hər yeni PE isə bütün digərlərində konfiqurasiya dəyişikliyi tələb edir. Məhz bu rəqəm Route Reflector-a keçidi məcbur edir (növbəti dərs). Full mesh 3-8 PE üçün və klaster daxilində mini-sxem kimi normal həll olaraq qalır.
Loopback ilə peering və update-source
iBGP sessiyası fiziki interfeys ünvanları arasında yox, Loopback0 ünvanları arasında qurulur, iki səbəbə görə: loopback tək bir linklə birlikdə düşmür (TCP sessiyası IGP-nin ehtiyat yol üzrə yenidən qurulmasından sağ çıxır) və məhz PE loopback ünvanı LDP/LSP-də və VPN marşrutlarının BGP next hop-u kimi istifadə olunur. Tələblər:
- /32 loopback-in IGP ilə əlçatanlığı: marşrut məhz /32 olmalıdır (summarizasiya olmadan), əks halda bu ünvanın FEC-i üçün LDP etiketi yaranmayacaq (LDP FEC-i dəqiq uyğunlaşdırır) və next hop-a qədər LSP qurulmayacaq.
- update-source (Cisco), connect-interface (Huawei), local-address (Junos): çıxan SYN loopback ünvanından gedir. Onsuz marşrutlaşdırıcı çıxış interfeysinin ünvanını götürür, 10.255.0.1 gözləyən qonşu PE isə konfiqurasiyada uyğunluq tapmır və bağlantını sıfırlayır: sessiya Active vəziyyətində qalır.
- Ünvan hər iki tərəfdə üst-üstə düşməlidir: PE2-də
neighborolaraq 10.255.0.1 göstərilib, PE1 isə məhz bu ünvandan göndərməlidir.
Hər iki PE eyni anda TCP başladarsa, kolliziya baş verir: RFC 4271 bənd 6.8-ə görə BGP Identifier-i böyük olan marşrutlaşdırıcının başlatdığı bağlantı saxlanılır, ikincisi bağlanır. Buna görə loqlarda başlanğıcda bəzən tək-tək sıfırlamalar görünür və bu xəta deyil.
Next hop və next-hop-self
eBGP ilə qəbul edəndə PE1 198.51.100.0/24 marşrutunu NEXT_HOP 172.16.1.2 (linkdə CE ünvanı) ilə alır. iBGP bu atributu dəyişmədən ötürür. PE2 marşrutu nüvə IGP-sində olmayan 172.16.1.2 next hop-u ilə alır və yolu əlçatmaz kimi qeyd edir (Cisco: inaccessible, Junos: Unusable/hidden, Huawei: marşrut active olmur), çünki BGP next hop-u rekursiv həll edə bilmir. İki həll var:
- iBGP-yə göndərərkən PE-də next-hop-self (Cisco
next-hop-self, Huaweinext-hop-local, Junos export siyasətithen next-hop self, MikroTiknexthop-choice=force-self): next hop PE1-in IGP-də və LDP-də olan loopback-i 10.255.0.1 olur. VPN marşrutları üçün PE özünü avtomatik qoyur, qlobal cədvəldə adi IPv4 üçün isə açıq şəkildə təyin etmək lazımdır. - 172.16.1.0/30 link şəbəkəsini IGP-yə passive interfeys kimi daxil etmək. Bu işləyir, lakin IGP-ni şişirdir və link dəyişəndə pozulur, buna görə operator şəbəkələrində next-hop-self istifadə olunur.
Tranzit üçün next hop-un düzgün həlli belədir: BGP next hop -> IGP-də /32 -> LDP etiketi (nəqliyyat etiketi). 10.255.0.1 üçün etiket yoxdursa, paket LSP olmadan çıxır və xarici prefiksləri bilməyən P marşrutlaşdırıcı (BGP-free core) onu atır.
Taymerlər və razılaşma
OPEN-də hər tərəf Hold Time təklif edir, kiçik qiymət qüvvədə olur, Keepalive isə Hold Time-ın üçdə biridir. Susmaya görə: Cisco və Huawei 60/180 saniyə, Junos hold-time 90 (keepalive 30), MikroTik 1 dəq/3 dəq. Ardıcıl 3 keepalive itirilərsə (hold timer expired) NOTIFICATION gəlir və sessiya bütün marşrutlarla birlikdə düşür. Nüvənin sürətli konvergensiyası üçün taymerləri qısaltmaq tövsiyə olunmur; bunun üçün BFD (metrik və BFD dərsinə baxın) və IGP fast-reroute istifadə olunur. Router-ID unikal olmalıdır: eyni BGP Identifier-li iki tərəf NOTIFICATION "Bad BGP Identifier" (OPEN Message Error) alır. Sessiya tipi (internal/external) OPEN-dəki AS-lərin müqayisəsi ilə təyin olunur: səhv remote-as "Bad Peer AS" verir.