Ders 01 / 13
Arayüzler ve Adresler
Arayüz listesi sekiz aday nedene karşı üç ayrı yanıt veriyor; iki yanıt tek başına yedi adayı eliyor, üçüncüsü yalnız ikisini eliyor ve geriye altı aday bırakıyor.
İçindekiler
Bir önceki kurs depolamayla bitti: arızanın en sessiz göründüğü katman. Dolan bir dosya düğümü tablosu hiçbir uyarı üretmiyordu, dolan bir anlık görüntü ardında iz bırakmıyordu. Ama o sessizliğin bir avantajı vardı — arıza yereldi. Bakılacak yer tek bir makineydi ve o makinenin bütün katmanlarına aynı kabuktan erişilebiliyordu.
Ağda bu avantaj yok. Arıza hem sessiz hem de başkasının makinesinde olabilir; hatta arada, hiç kimsenin makinesi olmayan bir yolda olabilir. Bu yüzden kursun ölçüsü değişiyor. Sistem Yönetimi kursu bir aracın ne göremediğini saydı. Bu kurs, bir sınamanın kaç aday nedeni elediğini sayar. Kuralı şudur: bir sınamanın sayısı verdiği yanıt değil, elediği aday nedendir; kaç adayı elediği yazılmayan sınama ölçülmemiş sayılır. İlk ders en alttaki sınamayla, arayüz ve adres listesiyle başlar.
Kurgu Sunucu ve Sekiz Aday Neden
Kurs boyunca tek bir kurgu sunucu izlenir. Üzerinde veri-alma adlı bir birim çalışır ve
bir bağlantı noktasını dinler; sunucu bir arayüz üzerinden ağa bağlıdır, bir varsayılan ağ
geçidi üzerinden dışarı çıkar ve adları bir çözücüye sorar. Bu sunucuya bağlanmaya
çalışan biri “bağlantı kurulmuyor” diyor. Tanının başladığı yer bu cümledir ve cümle hiçbir
şey söylemez: sekiz ayrı arıza tam olarak bu cümleyi üretir.
- AY1 — Sekiz aday neden var ve her biri sağlam durumun tek bir alanını bozar: arayüz kapalı, adres yok, ağ geçidi yanlış, rota eksik, çözücü sessiz, servis dinlemiyor, güvenlik duvarı düşürüyor, büyük paket düşüyor. Aynı anda iki arıza bulunmadığı varsayılır.
- AY2 — Kâhin gerçek arızadır. Kurguyu biz seçtiğimiz için hangi alanın bozuk olduğunu biliyoruz; sınamayı yapan kişi bilmiyor. Ölçüm bu asimetriyi kullanır.
- AY3 — Sekiz sınama var; her biri bir araca karşılık gelir ve bir yanıt döndürür. Yanıt aday kümesini böler: aynı yanıtı veren adaylar birlikte kalır, farklı yanıt verenler elenir.
- AY4 — Bütün sayılar tam sayımdır. Sekiz aday ve sekiz sınama üzerinden tüketici hesap yapılır; rastgelelik yoktur.
Bu kurs tek makinenin yapılandırmasıdır. Katman modelleri, adresleme aritmetiği, ad çözümleme protokolü ve yönlendirme protokolleri Bilgisayar Ağları müfredatının konusudur; burada kurulmaz, oradaki derslere bırakılır. Buradaki soru protokolün nasıl çalıştığı değil, bu makinenin yapılandırmasının ne söylediği ve o söylemin kaç adayı elediğidir. Konteyner ağı ve ad alanları da bu kursun dışındadır; onlar Çekirdek Arayüzleri ve İzolasyon kursuna bırakılmıştır.
Arayüz Listesi Ne Gösterir
Arayüz, çekirdeğin ağ donanımına ya da sanal bir bağlantıya verdiği addır. Listeleme aracı her arayüz için iki ayrı şey söyler: yönetimsel durum (arayüz açılmış mı) ve taşıyıcı durumu (karşı uçtan sinyal geliyor mu). Bu ikisi ayrıdır ve ayrı olmaları ölçümün temelidir.
# örnek döküm — çalıştırılmamıştır $ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP 3: eth1: <BROADCAST,MULTICAST> mtu 1500 state DOWN
Adres ayrı bir sorudur. Bir arayüz açık olabilir, taşıyıcısı da olabilir ve üzerinde hiçbir adres bulunmayabilir; bu durumda paket üretilemez. Kısa biçimli adres dökümü iki soruyu yan yana koyar.
# örnek döküm — çalıştırılmamıştır $ ip -brief addr show lo UNKNOWN 127.0.0.1/8 eth0 UP 203.0.113.24/24 eth1 DOWN
Bu iki blok çalıştırılmamıştır ve buradan hiçbir sayı iddiası çıkarılmaz. Dökümün öğrettiği şey biçimdir: durum alanı, arayüz adı ve adres alanı. Bu dersteki bütün adresler kurgudur; arayüz adları da dağıtımın adlandırma düzenine göre değişir ve bu bir kez söylenip geçilir.
Adres atamanın iki yolu vardır ve aralarındaki fark tanıda sık karıştırılır. Komutla verilen adres çalışma zamanına aittir: çekirdeğin tablosuna yazılır, yeniden başlatmada kaybolur. Yapılandırma dosyasına ya da ağ yöneticisine yazılan adres kalıcıdır: önyüklemede yeniden uygulanır. İkisi çakışabilir. Elle verilmiş bir adresle çalışan sunucu haftalarca sorunsuz görünür ve ilk yeniden başlatmada adressiz açılır. Depolama kursundaki kalıcı takma girdisiyle aynı kalıptır: çalışan durum ile kalıcı yapılandırma iki ayrı gerçektir ve yalnız biri sınanmışsa iş bitmemiştir.
Listenin Göremediği
Arayüz listesi üç ayrı soruyu tek dökümde birleştirir ve birleştirdiği için bazı ayrımları kaybeder. Yönetimsel durum, arayüzün açılmış olup olmadığını söyler ve bu bir yapılandırma kararıdır. Taşıyıcı durumu, karşı uçtan sinyal gelip gelmediğini söyler ve bu bir fiziksel gerçektir. Üçüncüsü adresin varlığıdır ve o da yapılandırmadır. Açılmış ama taşıyıcısı olmayan bir arayüz, dökümde açık görünen bir satır üretir; kablo çıkmışken bile satır yerinde durur ve yalnız taşıyıcı alanı değişir. Tanıya başlayan kişi bu alana bakmazsa arayüzü sağlıklı sayar.
Aynı birleştirme adres tarafında da var. Bir arayüzde birden çok adres bulunabilir ve dökümde hepsi alt alta listelenir; hangisinin dışarı çıkan paketlerde kaynak olarak kullanılacağı listeden okunmaz, seçimi yönlendirme yapar. İki arayüzün aynı alt ağda adres alması da liste düzeyinde tamamen normal görünür ve trafiği beklenmedik bir arayüze taşıyabilir.
- AY5 — Ortak tanım bu ayrımları tek bir alana indiriyor:
arayuz-kapaliadayı hem arayüzün kapalı hem de adresin yok olması demektir, çünkü kapalı arayüzde adres etkin değildir. Taşıyıcı durumu ile yönetimsel durum arasındaki fark modelde ayrı bir alan olarak tutulmuyor; bu, modelin bilinçli bir sınırıdır ve süpürmede tam bu sınır zorlanır.
Sınamanın Ölçüsü Elenen Adaydır
Aşağıdaki tanım kurs boyunca kullanılacak ortak tanımdır: kurgu sunucunun sağlam durumu, sekiz arıza ve sekiz sınama. Her sınama bir aracın verdiği yanıtı döndürür.
- AY6 — Sınamalar birbirinden bağımsız çağrılır; bir sınamanın yanıtı ötekinin yanıtını değiştirmez. Ölçülen şey her sınamanın tek başına kaç adayı elediğidir.
- AY7 — “En kötü kalan”, sınamanın verebileceği yanıtlar arasında en büyük öbeğin boyudur; kâhinden bağımsız bir ölçüdür ve sınamanın tavanını verir.
"""Ortak tanim: kurgu sunucunun saglam durumu , sekiz aday ariza , sekiz sinama. Olculen sey bir sinamanin kac aday nedeni ELEDIGIDIR.""" 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_arayuz(d): return ("acik-adresli" if d["arayuz_acik"] and d["adres_var"] else "acik-adressiz" if d["arayuz_acik"] else "kapali") 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" def s_ad_cozumleme(d): return "cozuldu" if d["cozumleyici_yanit"] else "cozulemedi" def s_dinleyen(d): return "dinliyor" if d["servis_dinliyor"] else "dinlemiyor" def s_baglanti(d): if not (d["arayuz_acik"] and d["adres_var"] and d["ag_gecidi_dogru"] and d["rota_var"]): return "ulasilamaz" if not d["guvenlik_duvari_gecirir"]: return "zaman-asimi" return "reddedildi" if not d["servis_dinliyor"] else "kuruldu" def s_buyuk_paket(d): return "geciyor" if (d["arayuz_acik"] and d["adres_var"] and d["ag_gecidi_dogru"] and d["rota_var"] and d["yol_bozulmadan"]) else "gecmiyor" SINAMA = {"arayuz": s_arayuz, "rota": s_rota, "gecit-yankisi": s_gecit_yankisi, "uzak-yanki": s_uzak_yanki, "ad-cozumleme": s_ad_cozumleme, "dinleyen": s_dinleyen, "baglanti": s_baglanti, "buyuk-paket": s_buyuk_paket} def obekler(sinama, tablo=ARIZA): o = {} for a in tablo: o.setdefault(SINAMA[sinama](durum(a, tablo)), []).append(a) return o print("sinama ayri yanit en kotu kalan") for s in SINAMA: o = obekler(s) print(f" {s:14s} {len(o):9d} {max(len(v) for v in o.values()):13d}") print() print("arayuz sinamasi: yanit basina aday") for yanit, kume in obekler("arayuz").items(): print(f" {yanit:14s} kalan {len(kume):2d} elenen {len(ARIZA) - len(kume):2d}" f" {', '.join(kume)}") print() print("aday kumesi supurmesi") EK = dict(ARIZA, **{"kablo-yok": {"arayuz_acik": False, "adres_var": False}}) EKSIK = {k: v for k, v in ARIZA.items() if k != "adres-yok"} for ad, tablo in (("temel 8 aday", ARIZA), ("+kablo-yok 9", EK), ("-adres-yok 7", EKSIK)): o = obekler("arayuz", tablo) en = max(len(v) for v in o.values()) kapali = len(o.get("kapali", [])) print(f" {ad:14s} ayri yanit {len(o)} en kotu kalan {en}" f" 'kapali' yanitinda kalan {kapali}" f" elenen {len(tablo) - kapali}")
sinama ayri yanit en kotu kalan arayuz 3 6 rota 3 5 gecit-yankisi 2 6 uzak-yanki 2 4 ad-cozumleme 2 7 dinleyen 2 7 baglanti 4 4 buyuk-paket 2 5 arayuz sinamasi: yanit basina aday kapali kalan 1 elenen 7 arayuz-kapali acik-adressiz kalan 1 elenen 7 adres-yok acik-adresli kalan 6 elenen 2 ag-gecidi-yanlis, rota-eksik, cozumleyici-sessiz, servis-dinlemiyor, guvenlik-duvari-dusuruyor, buyuk-paket-dusuyor aday kumesi supurmesi temel 8 aday ayri yanit 3 en kotu kalan 6 'kapali' yanitinda kalan 1 elenen 7 +kablo-yok 9 ayri yanit 3 en kotu kalan 6 'kapali' yanitinda kalan 2 elenen 7 -adres-yok 7 ayri yanit 2 en kotu kalan 6 'kapali' yanitinda kalan 1 elenen 6
Üç sayı yan yana duruyor. Kâhin: sekiz adaydan biri gerçek arızadır ve hangisi olduğunu kurguyu kuran taraf bilir. Sınama: arayüz listesi bu sekiz duruma karşı üç ayrı yanıt üretir — kapalı, açık-adressiz, açık-adresli. Elenen aday: yanıta göre yedi, yedi ve iki; en kötü durumda geriye altı aday kalır.
Üç Yanıt Eşit Değildir
İlk tabloda arayüz sınamasının üç ayrı yanıt vermesi onu en ayrıntılı sınamalardan biri gibi gösteriyor; yalnız bağlantı denemesi daha fazlasını, dört yanıt veriyor. Ama ayrı yanıt sayısı eleme gücü değildir. İkinci tablo bunu açıyor: üç yanıttan ikisi tek bir adayı işaret ediyor, üçüncüsü altı adayı bir arada bırakıyor.
Bunun pratik okuması şudur. Arayüz sınaması arızayı bulduğunda kesin, bulamadığında neredeyse sessizdir. Liste “kapalı” derse iş bitmiştir: yedi aday elenir, tek aday kalır. Liste “açık-adressiz” derse yine iş bitmiştir. Ama liste beklendiği gibi “açık ve adresli” derse — ki tanıya başlayan kişinin karşılaştığı en sık yanıt budur — sekiz adaydan yalnız ikisi elenir ve geriye altı aday kalır. Sınamanın beklenen sonucu, en az bilgi taşıyan sonuçtur.
Bu asimetri kursun ilk genel kuralını verir: olumlu yanıt veren bir sınama tanı yapmaz, yalnız bir kapıyı kapatır. Arayüz listesine bakıp “burada bir sorun yok” demek doğrudur ve adayların dörtte üçünü ayakta bırakır. Buna karşılık aynı listeye bakıp “arayüz açık, öyleyse ağ çalışıyor” demek, iki adayın elenmesinden altı adayın masumiyetini çıkarmaktır.
Sınamanın yine de ilk sırada yapılmasının nedeni eleme gücü değil, maliyetidir. Arayüz listesi yerelde okunur, yan etkisi yoktur, saniyenin altında döner ve yanlış olduğunda iki adayı kesin biçimde işaret eder. İlk tabloda daha güçlü görünen sınamalar — bağlantı denemesi ile uzak yankı, ikisi de en kötü durumda dörder aday bırakıyor — uzak uca erişim, açık bir hedef ve bekleme süresi gerektirir; ikisi de arayüz kapalıyken “ulaşılamaz” ya da “yanıt yok” der ve o yanıt dört ayrı adaya birden uyar. Sıralamanın mantığı budur: ucuz ve kesin olan önce, pahalı ve ayırt edici olan sonra. Kaç adayın elendiği bir sınamanın değerini verir; hangi sırada yapılacağını ise değerle maliyetin oranı belirler.
Aday Kümesi Süpürmesi
Bu kursta rastgelelik olmadığı için ikinci bir tohumla ölçüm tekrarlanamaz. Sonucun kurguya ne kadar bağlı olduğunu görmenin yolu aday kümesini süpürmektir: listeye bir aday eklenir ve bir aday çıkarılır, eleme sayılarının nasıl değiştiği okunur.
- AY8 — Eklenen aday
kablo-yok, fiziksel bağlantının kopması durumudur ve arayüz sınaması bakımındanarayuz-kapaliile aynı yanıtı üretir. - AY9 — Çıkarılan aday
adres-yok, arayüzün adressiz kalması durumudur ve sınamanın üçüncü yanıtını tek başına doldurur. - AY10 — Süpürme yalnız aday listesini değiştirir; sağlam durum, sınama tanımları ve ölçüm yöntemi aynı kalır.
Üçüncü tablo iki ayrı kırılganlık gösteriyor. Aday eklendiğinde “en kötü kalan” sayısı altıda
sabit kalıyor, yani sınamanın tavanı değişmiyor; ama kesin sanılan yanıt kesinliğini
yitiriyor. Dokuz adaylık listede “kapalı” yanıtı yine yedi aday eliyor, geriye kalan ise bir
değil iki adaydır: arayuz-kapali ile kablo-yok arayüz listesinden ayrılamaz. Ayrımı
yapan şey başka bir okumadır — taşıyıcı durumu. Sınamanın gücü sınamada değil, aday
listesindedir.
Aday çıkarıldığında ise yanıt sayısı üçten ikiye düşüyor ve “kapalı” yanıtının elediği aday yediden altıya iniyor. Sayı küçüldü ama sınama zayıflamadı; küçülen şey problemdir. Bu, ölçünün yorumlanmasında sürekli karşılaşılacak bir tuzağı gösteriyor: eleme sayısı sınamanın değil, sınama ile aday kümesinin ortak özelliğidir. İki kurulumda ölçülen eleme sayıları ancak aday listeleri aynıysa karşılaştırılabilir.
Süpürmenin uygulamadaki karşılığı, tanıya başlamadan önce aday listesini yazılı hâle getirmektir. Liste yazılmadığında eleme sayısı hesaplanamaz ve sınamaların hangi sırayla yapılacağı sezgiye kalır; liste yazıldığında her yanıt kaç satırın üstünü çizdiğini gösterir. Bu kursun geri kalanı aynı sekiz satırı kullanır ve her derste bir ya da iki sınama ekleyerek listenin nasıl daraldığını sayar. Listenin kendisi de bir yapılandırma kararıdır: hangi arızaların olası sayıldığı, hangi sınamaların yapılmaya değer bulunacağını doğrudan belirler.
Özet
- Bu kurs tek makinenin ağ yapılandırmasını okur ve her sınamayı elediği aday neden sayısıyla ölçer; kaç adayı elediği yazılmayan sınama ölçülmemiş sayılır.
- Kurgu sunucuda sekiz aday neden ve sekiz sınama vardır; her arıza sağlam durumun tek bir alanını bozar ve kâhin, kurguyu kuran tarafın bildiği gerçek arızadır.
- Arayüz listesi üç ayrı yanıt verir ve yanıtlar eşit değildir: kapalı ve açık-adressiz yanıtları yedişer aday eler, beklenen açık-adresli yanıtı yalnız iki aday eler ve geriye altı aday bırakır.
- Çalışma zamanındaki adres ile kalıcı yapılandırmadaki adres iki ayrı gerçektir; yalnız biri sınanmışsa yapılandırma doğrulanmamıştır.
- Aday kümesi süpürmesi eleme sayısının kırılganlığını gösteriyor: dokuzuncu aday eklendiğinde
“kapalı” yanıtı artık tek aday bırakmıyor,
adres-yokçıkarıldığında yanıt sayısı üçten ikiye düşüyor. Eleme sayısı sınamanın değil, sınama ile aday kümesinin ortak özelliğidir.
Sonraki Adım
Arayüz açık ve adresli çıktığında geriye altı aday kalıyor ve bunların ikisi paketin nereye gönderileceğiyle ilgili: varsayılan ağ geçidi yanlış olabilir ya da rota hiç bulunmayabilir. Bir sonraki ders yönlendirme tablosunu okur ve aynı ölçüyü ona uygular. Orada görülecek olan şey, tablonun üç ayrı yanıt verdiği ama iki adayı — ağ geçidinin yanlış olması ile rotanın eksik olması — birbirinden ayırmakta beklenmedik biçimde zorlandığıdır: yankı temelli iki sınama arka arkaya yapıldığında bu iki aday hâlâ aynı öbekte durur.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.