BGP FSM olayları
BGP, TCP 179 portu üzerinde çalışır. Önce iki router arasında bir TCP bağlantısı kurulur, sonra taraflar birbirine OPEN mesajı yollar, ardından KEEPALIVE ile karşılıklı onay verir. Bundan sonra UPDATE mesajlarıyla route bilgisi akmaya başlar. FSM (finite state machine), bu sırayı altı duruma böler:
- Idle: Hiçbir şey denenmiyor. Başlangıç durumu, bir hatadan sonra dönülen yer de burası.
- Connect: TCP bağlantısının tamamlanması bekleniyor.
- Active: TCP bağlantısı henüz yok, router bağlantı kurmaya çalışıyor ve karşıdan gelecek bağlantıyı da dinliyor.
- OpenSent: TCP tamam, OPEN mesajımızı gönderdik, karşının OPEN’ını bekliyoruz.
- OpenConfirm: Karşının OPEN’ı geldi ve kabul edildi, şimdi KEEPALIVE bekliyoruz.
- Established: Oturum açık. UPDATE ve KEEPALIVE trafiği akıyor.
Sorunsuz bir kurulumda sıra şöyle ilerler: Idle, Connect, OpenSent, OpenConfirm, Established.
Active, TCP bağlantısı ilk denemede kurulamadığında devreye giren yan yoldur. Bu yüzden Active görmek genelde iyiye işaret değildir.


“Active” adı aldatıyor
Yeni başlayan biri Active görünce komşuluğun aktif olduğunu düşünebilir. Oysa tam tersi: router karşıya ulaşamıyor, tekrar tekrar deniyor. Bir komşu uzun süre Connect ile Active arasında gidip geliyorsa sorun çoğu zaman TCP katmanındadır. BGP ayarlarına bakmadan önce şunları kontrol etmek gerekir:
- Komşu IP’sine yönlendirme tablosunda rota var mı? Loopback üzerinden kuruyorsanız IGP ya da statik rota gerçekten karşının loopback’ini getiriyor mu?
- Ping çalışıyor mu? Kaynak adres, karşı tarafın beklediği adresle aynı mı? (Huawei’de
peer ... connect-interface, Nokia’dalocal-addressile ayarlanır.) - Arada 179 numaralı TCP portunu kesen bir ACL veya güvenlik duvarı var mı?
- eBGP komşusu doğrudan bağlı değilse TTL tarafını düşünün. eBGP paketleri çoğu uygulamada TTL 1 ile gider; birkaç atlama ötedeki komşu için multihop türü bir ayar gerekir.
- MD5 kimlik doğrulaması varsa iki tarafta da aynı anahtar mı? Anahtar uyuşmazsa TCP oturumu kurulamaz ve komşu
Active/Connectarasında kalır. Log’da MD5 ile ilgili bir uyarı aramak iyi bir fikirdir.
Idle: hiç denemiyor ya da bırakmış
Idle, ilk açılışta kısa süre görünebilir. Uzun süre orada kalıyorsa genelde şunlardan biri vardır:
- Komşu yönetimsel olarak kapatılmış (
shutdownile kapatılmış ya da komşu tanımı silinmiş olabilir). - Komşuya giden rota yok, yani router bağlantıyı başlatamıyor.
- Önceki bir hata nedeniyle oturum düşmüş ve router yeniden denemeden önce bekliyor.
OpenSent’te takılmak
Bu noktada TCP kurulmuş demektir. Yani yol açık, ağ sorunu büyük ihtimalle değil. Router OPEN mesajını göndermiş, karşıdan OPEN bekliyor. Uzun süre burada kalıyorsa:
- Karşı taraf bizi komşu olarak tanımlamamıştır (bizim IP adresimiz onun tarafında tanımlı değildir).
- OPEN mesajındaki bir değer karşıda kabul görmemiştir; karşı taraf NOTIFICATION gönderip bağlantıyı kapatmış, biz de sürekli Idle, Connect, OpenSent döngüsüne girmişizdir.
İkinci durumda oturum sürekli düşüp kalkar. Çözüm, hangi NOTIFICATION’ın geldiğine bakmaktır. Aşağıdaki tablo bunun için.
OpenConfirm de hızlı geçilmeli
OpenConfirm’de kalan bir oturum nadirdir. Orada takılıyorsa ya KEEPALIVE’lar bir yönde kayboluyordur ya da karşı taraf zamanlayıcı uyuşmazlığı nedeniyle oturumu kapatıyordur. İki tarafta da hold time değerlerine bakın.
Zamanlayıcılar: hold time ve keepalive
İki router, OPEN mesajında kendi hold time değerlerini gönderir; oturum için küçük olan değer kullanılır. RFC 4271’e göre hold time ya sıfır olmalı ya da en az 3 saniye olmalı. KEEPALIVE aralığı için önerilen değer hold time’ın üçte biridir ve saniyede birden sık gönderilmemelidir. Hold time sıfırsa periyodik KEEPALIVE gönderilmez.
Varsayılan değerler üreticiye ve yazılım sürümüne göre değişebilir. Kendi cihazınızdaki değere komşu ayrıntı çıktısından bakmak en güvenlisidir.
Hold time içinde hiç KEEPALIVE ya da UPDATE gelmezse router “Hold Timer Expired” NOTIFICATION’ı gönderip oturumu kapatır. Hat kaybı, tek yönlü paket kaybı ya da cihazın yoğun yük altında olması bu tür düşmelere yol açabilir.
NOTIFICATION kodları: oturum neden kapandı?
Bir oturum hata nedeniyle kapanırken karşıya NOTIFICATION mesajı gider. Bu mesajdaki hata kodu, arıza aramanın en kısa yoludur:
| Kod | Anlamı | Ne zaman görürsünüz |
|---|---|---|
| 1 | Message Header Error | Bozuk mesaj başlığı |
| 2 | OPEN Message Error | OPEN içindeki bir parametre kabul edilmedi |
| 3 | UPDATE Message Error | UPDATE içeriğinde hata |
| 4 | Hold Timer Expired | Süre içinde KEEPALIVE ya da UPDATE gelmedi |
| 5 | Finite State Machine Error | Mevcut duruma uymayan bir mesaj geldi |
| 6 | Cease | Oturum yönetimsel olarak ya da bir limit nedeniyle kapatıldı |
Kod 2 (OPEN Message Error) için alt kodlar özellikle işe yarar:
- 1: Desteklenmeyen sürüm numarası
- 2: Bad Peer AS. Karşının AS numarası, bizim tarafta tanımlı komşu AS numarasıyla uyuşmuyor.
- 3: Bad BGP Identifier. Router-id değeri geçersiz.
- 4: Desteklenmeyen opsiyonel parametre
- 6: Kabul edilemeyen hold time
Yeni kurulan bir eBGP komşuluğunda en sık rastlanan hatalardan biri “Bad Peer AS”tir. İki tarafın birbirinin AS numarasını yanlış yazması çok basit bir hatadır ama kolayca gözden kaçar.
Huawei VRP’de komşuların durumunu görmek için:
display bgp peer
Nokia SR OS’ta:
show router bgp summary
show router bgp neighbor <ip> detail
Her iki üreticide de durum Established değilse önce komşunun ayrıntı çıktısına ve cihaz loglarına bakın. Oturumun neden kapandığına dair bilgi çoğunlukla orada bulunur.
Komşu Established olmuyorsa şu sırayla ilerlemek zaman kazandırır:
- Durum
Idleise: komşu yönetimsel olarak kapalı mı, komşuya rota var mı? - Durum
Connectya daActiveise: ping, kaynak adres, 179. port, ACL, TTL, MD5. - Durum
OpenSentile Idle arasında gidip geliyorsa: AS numarası, router-id, hold time. NOTIFICATION kodunu bulun. Establishedolduktan sonra düşüyorsa: hold timer, cihaz yükü, hat kalitesi, prefix limitleri.- Oturum açık ama route gelmiyorsa: artık FSM değil politika meselesidir. Import ve export politikalarına bakın.
