İçeriğe geç
academia.sh

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.
  • AY2Kâ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-kapali adayı 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ından arayuz-kapali ile 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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat