Yönlendirme algoritmaları: Dijkstra ve Bellman-Ford
Link-state (Dijkstra) tablosunu adım adım doldurmak, distance-vector (Bellman-Ford) vektörlerini tur tur güncellemek, count-to-infinity ve poisoned reverse. Vizede tablo doldurma sorusu buradan gelir.
Bir önceki haftada router’ın iletim tablosuna bakıp paketi ilettiğini gördük. Peki o tabloyu kim dolduruyor? Yönlendirme algoritmaları (routing algorithms). Bu, ağ katmanının kontrol düzlemi (control plane): ağı bir çizge (graph) gibi görüp her hedefe en düşük maliyetli yolu (least-cost path) bulmak. Sınavda iki tablo doldurma sorusu çıkar: Dijkstra tablosu ve distance-vector güncellemesi. Altın kurallar:
- Dijkstra her adımda N’ dışındaki en küçük mesafeli düğümü ekler. Komşu olup olmadığı önemsiz.
- Eklenen düğümün komşularını güncelle: .
- İletim tablosu sadece ilk atlamayı (next hop) tutar.
- Bellman-Ford: , komşular.
- DV’de kötü haber yavaş yayılır (count-to-infinity).
Ağ çizge olarak
Router’lar düğüm, bağlantılar kenar. Her kenarın bir maliyeti (cost) var: gecikme, ters bant genişliği ya da yönetici kararı. Bir yolun maliyeti kenar maliyetlerinin toplamıdır.
| Link-state (LS) | Distance-vector (DV) | |
|---|---|---|
| Bilgi | Her router tüm topolojiyi bilir | Sadece komşularının vektörlerini |
| Algoritma | Dijkstra | Bellman-Ford |
| Mesaj | Herkese flooding | Sadece komşulara |
| Hesap | Merkezi (her router kendi içinde) | Dağıtık, yinelemeli, asenkron |
| Sorun | Yüke bağlı maliyetlerde salınım | Count-to-infinity, yavaş yakınsama |
| Örnek protokol | OSPF, IS-IS | RIP |
Link-state: Dijkstra algoritması
Her router bağlantı durumlarını (link-state packets) bütün ağa yayar. Herkes aynı haritaya sahip olur ve Dijkstra’yı kendisi koşar.
Gösterim: kaynaktan ‘ye şu ana kadar bilinen en düşük maliyet, o yoldaki öncül düğüm, kesinleşmiş düğümler.
Başla: N' = {kaynak}; her v için D(v) = c(kaynak,v) (komşu değilse sonsuz)
Döngü: N' dışındaki en küçük D(w)'yi seç, N'ye ekle
w'nin N' dışındaki her komşusu v için:
D(v) = min( D(v), D(w) + c(w,v) )
Bitiş: bütün düğümler N' içinde
Örnek: kaynak A. Kenarlar:
A-B 4 A-C 1 B-C 2 B-D 5 C-D 8
C-E 10 D-E 2 D-F 6 E-F 3
Tabloda her hücre D,p biçiminde. * o düğümün kesinleştiğini gösterir.
adım N' B C D E F
0 A 4,A 1,A inf inf inf
1 AC 3,C * 9,C 11,C inf
2 ACB * * 8,B 11,C inf
3 ACBD * * * 10,D 14,D
4 ACBDE * * * * 13,E
5 ACBDEF * * * * *
Adım 1’de C (1) eklendi: B için , öncül C oldu. Adım 2’de B (3) eklendi: D için . Adım 3’te D (8): E için . Adım 4’te E (10): F için .
Sonuç ve A’nın iletim tablosu:
| Hedef | Maliyet | Yol | Next hop |
|---|---|---|---|
| B | 3 | A-C-B | C |
| C | 1 | A-C | C |
| D | 8 | A-C-B-D | C |
| E | 10 | A-C-B-D-E | C |
| F | 13 | A-C-B-D-E-F | C |
TUZAK · doğrudan bağlantı her zaman en kısa değil. A-B doğrudan 4, ama A-C-B 3. Tabloyu doldururken ilk satırdaki değerleri “kesin” sanma; düğüm ancak N’ye eklendiğinde kesinleşir.
İPUCU · next hop’u bulmak. Öncül zincirini geri izle: F’nin öncülü E, E’nin D, D’nin B, B’nin C, C’nin A. Kaynağa varmadan önceki son düğüm (C) next hop’tur.
Karmaşıklık. n düğüm için n - 1 tur, her turda en küçüğü bulmak için tarama: . Salınım (oscillation): maliyet trafik yüküne bağlıysa herkes aynı anda ucuz yola geçer, o yol pahalanır, herkes geri döner. Çözüm: router’ların hesap zamanlarını rastgele kaydırmak.
İPUCU · sınavda tabloyu hızlı doldurmak. Her satırda üç iş yap: (1) N’ dışındaki en küçük değeri daire içine al, (2) o düğümü N’ kümesine yaz, (3) sadece onun komşularının hücrelerini güncelle, diğer hücreleri aynen kopyala. Eşitlik olursa hangisini seçtiğin sonucu değiştirmez, ama tutarlı ol (genelde alfabetik). Değişmeyen hücreyi yeniden hesaplamaya çalışmak zaman kaybıdır.
Mesaj karmaşıklığı. LS’de her router kendi bağlantı durumunu bütün ağa yayar; n router ve E bağlantı için mesaj. DV’de mesajlar sadece komşular arasında gider, ama yakınsama süresi değişkendir ve döngüler oluşabilir. Sağlamlık açısından LS daha iyidir: her router kendi hesabını yaptığı için bir router’ın hatası sınırlı kalır.
Distance-vector: Bellman-Ford
Her router sadece mesafe vektörünü (distance vector) tutar: her hedefe tahmini maliyet. Komşularından vektör alınca kendi vektörünü Bellman-Ford denklemiyle yeniler:
Vektör değiştiyse komşulara yollar. Değişmezse susar. Bu yüzden algoritma yinelemeli, asenkron ve dağıtıktır.
Örnek: dört düğüm, senkron turlar. Kenarlar: W-X 1, X-Y 3, W-Y 6, Y-Z 2, X-Z 9. Satırlar düğümün vektörü, sütunlar hedef W X Y Z.
t=0 (sadece doğrudan bağlantılar)
D_W 0 1 6 inf
D_X 1 0 3 9
D_Y 6 3 0 2
D_Z inf 9 2 0
t=1
D_W 0 1 4 8 Y: min(6, 1+3)=4 Z: min(inf, 1+9, 6+2)=8
D_X 1 0 3 5 Z: min(9, 3+2)=5
D_Y 4 3 0 2
D_Z 8 5 2 0
t=2
D_W 0 1 4 6 Z: min(1+5, 6+2)=6 (X'in yeni vektörü)
D_X 1 0 3 5
D_Y 4 3 0 2
D_Z 6 5 2 0
t=3: hiçbir vektör değişmedi, yakınsadı
W’nin Z’ye en iyi yolu W-X-Y-Z, maliyet . Bu bilgi iki turda geldi, çünkü üç atlamalık bir yol.
Count-to-infinity ve poisoned reverse
Maliyet düşerse haber hızla yayılır. Artarsa sorun çıkar. Örnek: A-B 2, B-C 1, A-C 30. Yakınsamış durumda , (C, A’ya B üzerinden gidiyor). Şimdi A-B maliyeti 40 oldu.
B: min(40, 1 + D_C(A)=3) = 4 B, C'nin yolunun kendisinden geçtiğini bilmiyor
C: min(30, 1 + 4) = 5
B: min(40, 1 + 5) = 6
C: 7, B: 8, ... her turda 2 artış
...
B: 30, C: min(30, 31) = 30 C sonunda doğrudan bağlantıya geçti
B: min(40, 1 + 30) = 31 kararlı
Kararlı duruma 15 turda ulaşıldı (her turda önce B, sonra C güncelliyor). Bu sürenin neredeyse tamamında B ile C birbirini gösteren bir döngüdeydi. A-C bağlantısı olmasaydı sayılar sonsuza kadar tırmanırdı; adı oradan geliyor.
Poisoned reverse: C’nin A’ya yolu B’den geçiyorsa C, B’ye der. B hemen alır ve döngü oluşmaz. Ancak üç ya da daha çok düğümlü döngülerde bu hile yetmez. RIP bu yüzden sonsuzu 16 hop olarak tanımlar.
Hiyerarşik yönlendirme
Gerçek İnternette yüz milyonlarca router var; hepsi tek bir Dijkstra çalıştıramaz. Ayrıca her kurum kendi ağını kendi yönetmek ister. Çözüm: özerk sistemler (autonomous systems, AS). AS içinde intra-AS protokolü (OSPF, RIP), AS’ler arasında inter-AS protokolü (BGP) çalışır. Bunu bir sonraki sayfada işliyoruz.
Sık yapılan hatalar
| Yanlış düşünce | Doğrusu |
|---|---|
| Dijkstra’da komşuyu önce eklemek | En küçük D değerli düğüm eklenir |
| İlk satırdaki doğrudan maliyet kesindir | Düğüm N’ye girince kesinleşir |
| Next hop = hedefin öncülü | Zinciri kaynağın komşusuna kadar geri izle |
| Bellman-Ford’da en ucuz bağlantıyı seçmek | toplamının en küçüğü |
| DV’de her router topolojiyi bilir | Sadece komşu vektörlerini bilir |
| DV tek turda yakınsar | k atlamalık yol için k tur gerekebilir |
| Count-to-infinity LS’de olur | DV sorunudur; LS’nin sorunu salınım |
| Poisoned reverse her döngüyü çözer | Sadece iki düğümlü döngüleri |
Kendini test et
Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.
Run Dijkstra's algorithm from node S on the network below. What is the least-cost path cost from S to W?
S-T 3 S-U 7 T-U 2 T-V 6
U-V 1 U-W 8 V-W 2Cevabı göster
Başlangıç: T 3, U 7, V ve W sonsuz.
Adım 1: en küçük T (3) eklenir. U = min(7, 3+2) = 5, V = 3+6 = 9.
Adım 2: U (5) eklenir. V = min(9, 5+1) = 6, W = 5+8 = 13.
Adım 3: V (6) eklenir. W = min(13, 6+2) = 8.
Adım 4: W (8) eklenir. Yol S-T-U-V-W, maliyet 3+2+1+2 = 8.
In the same network, in what order are the nodes added to the set N' by Dijkstra's algorithm (starting from S)?
- S, T, U, V, W
- S, T, V, U, W
- S, U, T, V, W
- S, T, U, W, V
Cevabı göster
Her adımda N' dışındaki en küçük değerli düğüm eklenir: T (3), U (5), V (6), W (8). Doğrudan komşu olmak sıraya etki etmez; sadece o anki mesafe belirler.
In the same network, what is the next hop in S's forwarding table for destination W?
- T
- U
- V
- W
Cevabı göster
Öncül zinciri: p(W) = V, p(V) = U, p(U) = T, p(T) = S. Geriye doğru S'nin hemen yanındaki düğüme kadar git: T. İletim tablosu sadece ilk adımı tutar; T, U ve V'nin hepsine giden yol T'den başlar.
Node x has neighbors a, b, c with link costs c(x,a) = 2, c(x,b) = 5, c(x,c) = 1. They advertise D_a(y) = 6, D_b(y) = 2, D_c(y) = 9. Using the Bellman-Ford equation, what is D_x(y)?
Cevabı göster
.
a üzerinden 2 + 6 = 8, b üzerinden 5 + 2 = 7, c üzerinden 1 + 9 = 10. En küçük 7, sonraki atlama b. En ucuz bağlantı (c) kazanmaz; toplam önemli.
In the network below every node starts with only its direct link costs and all nodes exchange vectors synchronously. What is D_P(T) after the first exchange, and after convergence?
P-Q 2 P-R 7 Q-R 1 R-T 3 Q-T 8Cevabı göster
t = 0'da P'nin T'ye yolu yok (sonsuz). Komşu vektörleri: , .
t = 1: . Aynı turda Q de güncellendi: .
t = 2: P yeni vektörü alır: . Sonraki turda değişiklik yok. Yol P-Q-R-T, maliyet 6.
What is the worst-case time complexity of the basic (array-based) Dijkstra's algorithm on a network of n nodes?
- O(n)
- O(n log n)
- O(n^2)
- O(2^n)
Cevabı göster
n - 1 tur var, her turda N' dışındaki bütün düğümler taranıyor: , yani . Yığın (heap) ile olur.
Which statement about link-state (LS) and distance-vector (DV) algorithms is TRUE?
- In DV, every node knows the full topology
- In LS, each node computes its own table, so an incorrect link cost advertised by one router has limited effect
- LS can suffer from count-to-infinity
- DV requires flooding link-state packets to all routers
Cevabı göster
LS'de her router bütün topolojiyi bilir ve yolunu kendisi hesaplar. Bozuk bir router sadece kendi bağlantı maliyetini yanlış duyurabilir. DV'de bir router yanlış "her yere ucuz giderim" derse hata komşudan komşuya yayılır. Count-to-infinity DV sorunudur; flooding LS'nin yöntemidir.
Which problem is the distance-vector algorithm known for when a link cost increases?
- Routing oscillation due to load-sensitive costs
- Count-to-infinity
- Fragmentation
- Broadcast storm
Cevabı göster
İyi haber (maliyet düşüşü) hızlı yayılır, kötü haber (artış) yavaş. İki router birbirini eski yol sanıp maliyeti her turda biraz artırır. Load-sensitive salınım LS'nin sorunudur.
Links: A-B = 2, B-C = 1, A-C = 30. All tables have converged. Then the cost of A-B rises to 40. Without poisoned reverse, what value does D_B(A) finally settle at?
Cevabı göster
Değişiklikten önce ve (C, A'ya B üzerinden gider). Bağlantı 40 olunca B, C'nin eski 3 değerine güvenir: . C buna bakıp 5 der, B 6, C 7... Her turda 2 artar. C'nin değeri doğrudan bağlantıya (30) ulaşınca durur. Son durum: , . Bizim tur modelinde (önce B, sonra C) 15 tur sürer.
With poisoned reverse, if C's least-cost path to A goes through B, what does C advertise to B as D_C(A)?
- Its real cost D_C(A)
- 0
- Infinity
- The cost of link B-C
Cevabı göster
C, A'ya B üzerinden gidiyorsa B'ye "A'ya mesafem sonsuz" der. B artık C'ye geri dönen bir döngü yolu seçemez. Yukarıdaki örnekte B hemen alır. Üç ya da daha fazla düğümlü döngülerde poisoned reverse yetmeyebilir.
Why does Dijkstra's algorithm require non-negative link costs?
- Because routers cannot store negative numbers
- Because once a node is added to N' its cost is assumed final, and a negative edge found later could make a cheaper path
- Because Bellman-Ford also fails on negative costs
- Because negative costs create count-to-infinity
Cevabı göster
Dijkstra'nın açgözlü (greedy) adımı "N' içindeki mesafe kesindir" varsayımına dayanır. Negatif bir kenar bu varsayımı bozar. Ağlarda maliyetler zaten pozitif olduğu için pratikte sorun değildir.
Doğrulama: Bütün Dijkstra tabloları ve DV vektörleri node ile yazılmış Dijkstra ve senkron Bellman-Ford uygulamalarının çıktısından alındı (verify/SEN2008/06.mjs).