Ders 02 / 13
Yönlendirme Tablosu
Yönlendirme tablosu sekiz aday nedene karşı üç yanıt veriyor ve en kötü durumda beş aday bırakıyor; ağ geçidinin yanlış olması ile rotanın eksik olması iki yankı sınamasından sonra hâlâ aynı öbekte duruyor.
İçindekiler
Arayüz listesi beklenen yanıtı verdiğinde — açık ve adresli — sekiz adaydan yalnız ikisi eleniyordu ve geriye altı aday kalıyordu. Bu altı adayın ikisi paketin nereye gönderileceğiyle ilgilidir: varsayılan ağ geçidi yanlış olabilir ya da hedefe giden rota hiç bulunmayabilir. İkisi de adresi olan, açık bir arayüzün arkasında durur ve arayüz listesinden görünmez.
Bu ders yönlendirme tablosunu okur ve aynı ölçüyü ona uygular. Sonuç iki bakımdan öğreticidir. Tablo okuması arayüz listesinden daha dar bir öbek bırakıyor, yani daha güçlü bir sınama. Buna karşılık, bu ikisini birbirinden ayırmak için akla ilk gelen yol — yankı göndermek — iki ayrı sınamaya rağmen ayrımı yapamıyor.
Tablo Neyi Söyler
Yönlendirme tablosu, bir hedef adres için paketin hangi arayüzden ve hangi bir sonraki düğüme gönderileceğini belirleyen satırlardan oluşur. Satırlar sırayla denenmez; her satırın bir hedef öneki vardır ve çekirdek en uzun eşleşen öneki seçer. Varsayılan ağ geçidi bu kuralın en kısa öneke sahip satırıdır ve bu yüzden yalnız başka hiçbir satır eşleşmediğinde kullanılır. Adres bir arayüze verildiğinde o alt ağın satırı tabloya kendiliğinden girer; buna bağlı rota denir ve yerel ağa erişimi o satır sağlar.
# örnek döküm — çalıştırılmamıştır $ ip route show default via 203.0.113.1 dev eth0 203.0.113.0/24 dev eth0 proto kernel scope link src 203.0.113.24 198.51.100.0/24 via 203.0.113.9 dev eth0
Tablonun tamamını okumak yerine tek bir hedef için kararı sormak da olanaklıdır. Karar sorgusu üç şeyi birden söyler: seçilen satırı, çıkış arayüzünü ve paketin kaynak adresi olarak hangi adresin yazılacağını. Kaynak adres seçimi tabloda görünmez ve yanlış seçildiğinde arıza tek yönlü olur: paket gider, yanıt dönemez.
# örnek döküm — çalıştırılmamıştır $ ip route get 198.51.100.42 198.51.100.42 via 203.0.113.9 dev eth0 src 203.0.113.24
Bu iki blok çalıştırılmamıştır ve buradan hiçbir sayı iddiası çıkarılmaz; öğrettikleri şey satırın biçimidir. Adresler kurgudur. Yönlendirme protokollerinin nasıl çalıştığı, tabloların komşular arasında nasıl dağıtıldığı ve ölçütlerin nasıl hesaplandığı Bilgisayar Ağları müfredatının konusudur; bu derste tablo verili kabul edilir ve yalnız okunur.
- AY11 — Kurgu sunucunun tablosu üç satırdan oluşur: varsayılan ağ geçidi, yerel alt ağın bağlı rotası ve uzak alt ağa yazılmış tek bir statik rota. Aynı anda birden çok yönlendirme tablosu bulunmadığı varsayılır.
- AY12 —
ag-gecidi-yanlisadayı, varsayılan satırın var olduğu ama işaret ettiği bir sonraki düğümün paketi iletmediği durumdur.rota-eksikadayı, hedefe eşleşen hiçbir satırın bulunmadığı durumdur. Tabloda biri dolu ve yanlış, öteki boştur.
Rota Sınamasının Ölçüsü
"""Yonlendirme tablosu sinamasi: 8 aday nedene karsi kac aday eleniyor. Ortak tanimin ayni sekiz arizasi; bu derste rota ve iki yanki sinamasi okunuyor.""" SAGLAM = {"arayuz_acik": True, "adres_var": True, "ag_gecidi_dogru": True, "rota_var": True, "cozumleyici_yanit": True, "servis_dinliyor": True, "guvenlik_duvari_gecirir": True, "yol_bozulmadan": True} ARIZA = { "arayuz-kapali": {"arayuz_acik": False, "adres_var": False}, "adres-yok": {"adres_var": False}, "ag-gecidi-yanlis": {"ag_gecidi_dogru": False}, "rota-eksik": {"rota_var": False}, "cozumleyici-sessiz": {"cozumleyici_yanit": False}, "servis-dinlemiyor": {"servis_dinliyor": False}, "guvenlik-duvari-dusuruyor": {"guvenlik_duvari_gecirir": False}, "buyuk-paket-dusuyor": {"yol_bozulmadan": False}, } def durum(ariza, tablo): d = dict(SAGLAM) d.update(tablo[ariza]) return d def s_rota(d): if not d["adres_var"]: return "tablo-bos" return "tam" if d["rota_var"] else "varsayilan-yok" def s_gecit_yankisi(d): return "yanit" if d["arayuz_acik"] and d["adres_var"] else "yanit-yok" def s_uzak_yanki(d): return "yanit" if (d["arayuz_acik"] and d["adres_var"] and d["ag_gecidi_dogru"] and d["rota_var"]) else "yanit-yok" SINAMA = {"rota": s_rota, "gecit-yankisi": s_gecit_yankisi, "uzak-yanki": s_uzak_yanki} def obekle(sinamalar, tablo=ARIZA): o = {} for a in tablo: anahtar = tuple(SINAMA[s](durum(a, tablo)) for s in sinamalar) o.setdefault(anahtar, []).append(a) return o print("rota sinamasi: yanit basina aday") for yanit, kume in obekle(["rota"]).items(): print(f" {yanit[0]:14s} kalan {len(kume):2d} elenen {len(ARIZA) - len(kume):2d}" f" {', '.join(kume)}") print() print("arac kumesi buyudukce ayirt edilemeyen obekler") for kume in (["gecit-yankisi"], ["gecit-yankisi", "uzak-yanki"], ["gecit-yankisi", "uzak-yanki", "rota"]): ayrilmayan = [sorted(v) for v in obekle(kume).values() if len(v) > 1] print(f" {len(kume)} sinama {'+'.join(kume):38s} obek {len(ayrilmayan)}") for o in ayrilmayan: print(f" {', '.join(o)}") print() print("aday kumesi supurmesi (rota sinamasi)") EK = dict(ARIZA, **{"adres-yanlis-alt-ag": {"ag_gecidi_dogru": False, "rota_var": False}}) EKSIK = {k: v for k, v in ARIZA.items() if k != "ag-gecidi-yanlis"} for ad, tablo in (("temel 8", ARIZA), ("+adres-yanlis 9", EK), ("-ag-gecidi-yanlis 7", EKSIK)): o = obekle(["rota"], tablo) yok = len(o.get(("varsayilan-yok",), [])) print(f" {ad:18s} ayri yanit {len(o)} en kotu kalan " f"{max(len(v) for v in o.values())}" f" 'varsayilan-yok' kalan {yok} elenen {len(tablo) - yok}")
rota sinamasi: yanit basina aday
tablo-bos kalan 2 elenen 6 arayuz-kapali, adres-yok
tam kalan 5 elenen 3 ag-gecidi-yanlis, cozumleyici-sessiz, servis-dinlemiyor, guvenlik-duvari-dusuruyor, buyuk-paket-dusuyor
varsayilan-yok kalan 1 elenen 7 rota-eksik
arac kumesi buyudukce ayirt edilemeyen obekler
1 sinama gecit-yankisi obek 2
adres-yok, arayuz-kapali
ag-gecidi-yanlis, buyuk-paket-dusuyor, cozumleyici-sessiz, guvenlik-duvari-dusuruyor, rota-eksik, servis-dinlemiyor
2 sinama gecit-yankisi+uzak-yanki obek 3
adres-yok, arayuz-kapali
ag-gecidi-yanlis, rota-eksik
buyuk-paket-dusuyor, cozumleyici-sessiz, guvenlik-duvari-dusuruyor, servis-dinlemiyor
3 sinama gecit-yankisi+uzak-yanki+rota obek 2
adres-yok, arayuz-kapali
buyuk-paket-dusuyor, cozumleyici-sessiz, guvenlik-duvari-dusuruyor, servis-dinlemiyor
aday kumesi supurmesi (rota sinamasi)
temel 8 ayri yanit 3 en kotu kalan 5 'varsayilan-yok' kalan 1 elenen 7
+adres-yanlis 9 ayri yanit 3 en kotu kalan 5 'varsayilan-yok' kalan 2 elenen 7
-ag-gecidi-yanlis 7 ayri yanit 3 en kotu kalan 4 'varsayilan-yok' kalan 1 elenen 6
Üç sayı yan yana. Kâhin: bu turda gerçek arıza ag-gecidi-yanlis; varsayılan satır
yerinde duruyor ve işaret ettiği düğüm paketi iletmiyor. Sınama: yönlendirme tablosu
okunuyor ve yanıtı tam — üç ayrı yanıttan biri. Elenen aday: yalnız üç; geriye
beş aday kalıyor.
Aynı sınama başka bir kâhinle bambaşka bir sonuç veriyor. Gerçek arıza rota-eksik olsaydı
yanıt varsayilan-yok olacak, yedi aday elenecek ve tek aday kalacaktı. Yanıt
tablo-bos olsaydı altı aday elenecekti. Arayüz listesindeki asimetri burada da var ve
yönü aynı: sınama, tablodaki boşluğu görmekte kesin, tablodaki yanlışı görmekte
neredeyse kör. Bunun nedeni tablonun bir doğruluk kaydı değil, bir niyet kaydı olmasıdır.
Satır, paketin nereye gönderileceğini söyler; oraya varıp varmadığını söylemez.
Bu ayrım tabloyu okurken doğrudan işe yarar. Varsayılan satırın varlığı doğrulanabilir bir olgudur ve tablodan bakılarak kesin biçimde yanıtlanır. Satırdaki adresin doğruluğu doğrulanabilir bir olgu değildir; o adresin gerçekten bir yönlendirici olup olmadığı, paketi iletip iletmediği ve iletirken hedefe giden bir yolu bulunup bulunmadığı tablonun bilgisi dışındadır. Tablo bu bakımdan bir dosya sistemi girdisine benzer: girdinin var olması, gösterdiği yerin doğru olduğunu göstermez. Depolama kursunda kalıcı takma girdisi kâğıt üzerinde doğruyken yanlış aygıtı takıyordu; buradaki varsayılan satır da kâğıt üzerinde doğruyken paketi hiçbir yere iletmeyen bir adresi gösterebilir.
İki Adayın Ayrılamaması
İkinci tablo, ag-gecidi-yanlis ile rota-eksik çiftinin neden zor bir çift olduğunu
gösteriyor. Yankı göndermek bu iki adayı ayırmanın en doğal yolu gibi görünür ve iki ayrı
yankı sınaması yapılabilir: biri yerel ağ geçidine, öteki uzak bir adrese.
- AY13 — Ağ geçidi yankısı yalnız arayüzün açık ve adresli olmasına bağlıdır; yerel ağ bağlı rota üzerinden erişilir ve varsayılan satır bu sınamaya karışmaz.
- AY14 — Uzak yankı, arayüzün, adresin, ağ geçidinin ve rotanın dördünün birden doğru olmasını gerektirir. Bu sınama ad çözümleme devrede olmadan, doğrudan adresle yapılır.
- AY15 — Yankının kendisinin engellenmediği varsayılır; yankı yanıtının filtrelendiği durum bu konunun değil, güvenlik duvarı derslerinin sorunudur.
Tek yankı sınamasıyla bakıldığında sekiz aday iki öbeğe düşüyor ve büyük öbek altı aday
taşıyor. İkinci yankı eklendiğinde öbek sayısı üçe çıkıyor: sınama gerçekten iş görüyor,
altılı öbeği ikiye bölüyor. Ama böldüğü yer beklenen yer değil. ag-gecidi-yanlis ile
rota-eksik yeni öbekte birlikte kalıyor, çünkü ikisi de aynı deseni üretiyor: ağ geçidi
yankısı yanıt veriyor, uzak yankı vermiyor. İki sınama, iki bekleme süresi ve iki ayrı çıktı
harcandı; bu çift hâlâ ayrılmadı.
Bu sonucun nedeni sınamaların zayıflığı değil, bağımlılık zincirinin biçimidir. Uzak yankının başarılı olması için dört alanın birden doğru olması gerekiyor; alanlardan herhangi biri bozulduğunda yanıt aynı yanıttır. Bir sınama kaç alana bağlıysa, olumsuz yanıtı o kadar çok adaya birden uyar. Bağlantı zincirinin ucuna yaklaştıkça sınamalar güçlenmez, tam tersine ayırt etme yetenekleri düşer; kazandıkları şey kapsamdır. Uzak yankı bir adımda dört alanı birden sınar ve bu yüzden “her şey yolunda” demek için iyi, “sorun şurada” demek için kötü bir araçtır.
Ayrımı yapan şey üçüncü sınamadır ve o sınama hiç paket göndermez. Tablo okunduğunda
rota-eksik adayı varsayilan-yok yanıtını, ag-gecidi-yanlis adayı tam yanıtını
verir; öbek dağılır ve ayırt edilemeyen öbek sayısı üçten ikiye düşer. Kursun ikinci
iddiası burada ilk kez ödeniyor: daha çok çıktı daha iyi tanı demek değildir. Yerel bir
dosyayı okumak, iki uzak sınamanın yapamadığı ayrımı tek adımda yapıyor.
Kaynak Adres Seçimi ve Tek Yönlü Arıza
Tablonun görünmeyen bir çıktısı daha vardır. Paket üretilirken kaynak adresi de seçilir ve seçimi yapan, uygulama değil yönlendirmedir: kullanılacak satır belirlendikten sonra o satırın çıkış arayüzüne bağlı adreslerden biri kaynak olarak yazılır. Karar sorgusunun son alanı bu seçimi gösterir; tablo dökümünde ise ancak bağlı rotanın kaynak alanından dolaylı olarak okunur.
Bu seçim yanlış olduğunda ortaya çıkan arıza kalıbı özeldir. Paket hedefe ulaşır, hedef yanıtı üretir ve yanıtı kaynak olarak yazılmış adrese gönderir; o adres dönüş yolunda bilinmiyorsa yanıt kaybolur. Yerel makinede görülen şey “yanıt yok”tur ve bu, ağ geçidinin yanlış olmasıyla üretilen görüntünün aynısıdır. İki arayüzlü bir sunucuda bu kalıp sık kurulur: giden trafik bir arayüzden çıkar, dönüş trafiği ötekine yönlendirilir ve hiçbir tablo satırı yanlış görünmez. Arızanın ayırt edici imzası, aynı hedefe iki farklı kaynak adresle yapılan iki denemenin farklı sonuç vermesidir; tek bir denemeyle bu imza görülmez, çünkü yanıtsızlık her iki durumda da aynı yanıtsızlıktır.
- AY16 — Ortak tanımda kaynak adres seçimi ayrı bir alan olarak tutulmuyor; tek arayüzlü kurgu sunucuda bu seçim belirsizlik taşımaz. Çok arayüzlü durum modelin dışındadır ve yukarıdaki kalıp modelin değil, okumanın bir uyarısıdır.
Rota Eklemek ve Geri Almak
Rota eklemenin de iki biçimi vardır ve fark adres atamadakiyle aynıdır: çalışma zamanına yazılan rota yeniden başlatmada kaybolur, yapılandırmaya yazılan rota önyüklemede geri gelir. Tanı sırasında elle eklenen bir rota sorunu çözdüğünde iş bitmiş sayılmaz; aynı satır kalıcı yapılandırmaya da geçmelidir.
Aynı hedefe iki satır yazıldığında hangisinin kullanılacağını önek uzunluğu belirler; önekler de eşitse satırlara verilen ölçüt sayısı belirler ve küçük olan seçilir. Bu, tanıda sık karşılaşılan bir belirsizlik kaynağıdır: iki ayrı kaynaktan — elle verilmiş bir satır ile adres yapılandırmasının kendiliğinden eklediği bir satır — aynı hedefe iki varsayılan satır girebilir ve tablo dökümü ikisini de gösterir. Döküme bakan kişi iki satırı da doğru sayar; kullanılan yalnız biridir. Karar sorgusu bu belirsizliği ortadan kaldırır, çünkü tablonun tamamını değil, verilen kararı yazdırır.
Varsayılan satırı değiştiren ya da silen işlemler ayrı bir sınıftır. Uzaktan yönetilen bir makinede varsayılan ağ geçidini değiştirmek, komutu yazan oturumun kendisini kesebilir ve komut geri dönmediği için düzeltme de yapılamaz. Bu ders o komut dizisini çalıştırılabilir tam biçimde vermez. Önleyen yol üç adımdır ve üçü de bu kursta tekrar edilecektir: değişikliği önce kuru çalışma ile yazdırmak, değişikliği bir zamanlayıcıyla geri alma görevinin arkasına koymak, ve yönetim erişimini değişiklikten etkilenmeyen ayrı bir kanaldan sağlamak.
Aday Kümesi Süpürmesi
Üçüncü tablo aday listesini iki yönde sarsıyor.
- AY17 — Eklenen aday
adres-yanlis-alt-ag, adresin yanlış alt ağdan verildiği durumdur; bu durumda ağ geçidi erişilemez olur ve varsayılan satır kurulamaz, yani iki alan birden bozulur. - AY18 — Çıkarılan aday
ag-gecidi-yanlis, tablo okumasının en zayıf kaldığı adaydır.
Aday eklendiğinde ayrı yanıt sayısı üçte, en kötü kalan beşte sabit kalıyor. Değişen şey yine
kesin sanılan yanıttır: varsayilan-yok yanıtı dokuz adaydan yedisini eliyor ama geriye
bir değil iki aday bırakıyor. Yani “varsayılan satır yok” okuması artık tanı değil, iki
adaya inmiş bir daraltmadır. Aday çıkarıldığında ise en kötü kalan beşten dörde iniyor ve
varsayilan-yok yanıtının elediği aday yediden altıya. Sınama aynı sınamadır; değişen
yalnız listedir.
Bu iki satır, eleme sayılarını mutlak bir ölçüt saymanın neden yanlış olduğunu gösteriyor. Rota okumasının “en kötü durumda beş aday bırakan” bir sınama olması, sekiz adaylık listeye bağlı bir sayıdır. Liste büyüdükçe sınamanın tavanı yükselir, liste daraldıkça düşer; sabit kalan tek şey sınamanın hangi alanı gördüğüdür. Sınamaları bu değişmez özelliğe göre sıralamak, eleme sayılarına göre sıralamaktan daha dayanıklı bir alışkanlıktır: rota okuması her zaman rota alanını görür, aday listesi ne olursa olsun.
Özet
- Yönlendirme tablosu bir niyet kaydıdır: paketin nereye gönderileceğini söyler, oraya vardığını söylemez. Satır seçimi en uzun eşleşen önek kuralına göre yapılır ve varsayılan ağ geçidi en kısa öneke sahip satırdır.
- Rota sınaması üç ayrı yanıt verir ve en kötü durumda beş aday bırakır:
tamyanıtında yalnız üç aday elenir,varsayilan-yokyanıtında yedi,tablo-bosyanıtında altı. Sınama tablodaki boşluğu görür, tablodaki yanlışı görmez. ag-gecidi-yanlisilerota-eksikçifti iki yankı sınamasına kadar ayrılamıyor: her ikisi de yerel yankıya yanıt verip uzak yankıya vermiyor. Ayırt edilemeyen öbek sayısı iki sınamada üç, tablo okuması eklendiğinde ikidir.- Ayrımı hiç paket göndermeyen yerel bir okuma yapıyor; daha çok çıktı üreten iki uzak sınama yapamıyor.
- Süpürme, eleme sayısının aday listesine bağlı olduğunu gösteriyor: dokuzuncu aday
eklendiğinde
varsayilan-yokyanıtı iki aday bırakıyor,ag-gecidi-yanlisçıkarıldığında en kötü kalan beşten dörde iniyor.
Sonraki Adım
Tablo okuması, tam yanıtı verdiğinde geriye kalan beş adayın dördü artık paketin yoluyla
değil, ne istendiğiyle ilgilidir: hedefin adı çözülemiyor olabilir, servis dinlemiyor
olabilir, güvenlik duvarı düşürüyor olabilir ya da büyük paket yolda kayboluyor olabilir. Bir
sonraki ders bu dörtlünün ilkine bakar ve çözücü yapılandırmasını okur. Orada ölçülecek
sayı kursun en küçük sayılarından biridir: ad çözümleme sınaması, beklenen yanıtı verdiğinde
sekiz adaydan yalnız birini eler. Bu kadar zayıf bir sınamanın neden yine de yapıldığı,
o dersin asıl sorusudur.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.