İçeriğe geç
academia.sh

Ders 04 / 13

Bağlantı Noktaları ve Dinleyen Servisler

Yerel dinleyen listesi sekiz aday nedenden yalnız birini eliyor; dışarıdan yapılan tek bir bağlantı denemesi aynı anda yedisini eliyor ve sekiz arıza üzerinden toplam 14'e karşı 42 aday eliyor.

İçindekiler

Ad çözümleme de doğrulandığında geriye üç aday kalıyordu: servis dinlemiyor olabilir, güvenlik duvarı paketi düşürüyor olabilir ya da büyük paket yolda kayboluyor olabilir. Üçü de sunucunun kendi üzerinde bakılabilecek bir yer bırakıyor gibi görünür — dinleyen soketlernın listesi. Liste yereldir, hızlıdır, ayrıntılıdır ve doğrudan sorunun geçtiği yere bakar.

Bu ders o listeyi çıkarır ve yanına ikinci bir sınama koyar: dışarıdan yapılan tek bir bağlantı denemesi. İki sınama aynı anda, aynı arızaya karşı ölçülür ve aradaki fark kursun en büyük farklarından biridir.

Dinleyen Bağlantı Noktası Nedir

Bir servis bir bağlantı noktasını dinlemeye başladığında çekirdekte bir kayıt oluşur: hangi adres ve bağlantı noktası çiftinin gelen istekleri kabul edeceği. Yerel envanter bu kayıtları listeler. Listenin en önemli sütunu bağlantı noktası numarası değil, bağlanma adresidir.

# örnek döküm — çalıştırılmamıştır
$ ss -ltn
State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port
LISTEN  0       128     0.0.0.0:9443         0.0.0.0:*
LISTEN  0       128     127.0.0.1:7070       0.0.0.0:*

İki satır aynı biçimdedir ve iki farklı gerçeği anlatır. Birincisi bütün arayüzlerden gelen istekleri kabul eder; ikincisi yalnız geri döngü arayüzünden, yani makinenin kendisinden gelen istekleri kabul eder. Dışarıdan bakıldığında ikinci satırın karşılığı hiç dinlemeyen bir bağlantı noktasıdır. Envanterde iki satır da “LISTEN” yazar.

Süreç sütunu ayrı bir okumadır ve yetki gerektirir: yetkisiz çalıştırılan listeleme aracı bağlantı noktalarını gösterir, hangi sürecin dinlediğini göstermez. Bu, tanıda bir adım kaybettirir — hangi bağlantı noktasının açık olduğu bilinir, hangi birimin açtığı bilinmez.

Bağlantı noktası numaralarının nasıl atandığı, hangi aralıkların geçici bağlantı noktalarına ayrıldığı ve taşıma katmanının bağlantı kurma davranışı Bilgisayar Ağları müfredatının konusudur; burada protokol kurulmaz, yalnız bu makinenin envanteri okunur.

  • AY25 — Kurgu sunucuda veri-alma birimi bütün arayüzlerden dinler; ikinci bir yerel yönetim ucu yalnız geri döngüden dinler ve dışarıya hiç açılmaz.
  • AY26 — Ortak tanımda dinleyen listesi ile bağlantı denemesi aynı alana bağlıdır: servis dinliyorsa liste de bunu gösterir, bağlantı da kurulur. Yalnız geri döngüye bağlanmış bir servis — listede dinliyor görünüp dışarıdan reddedilen durum — modelin dışındadır ve yukarıdaki uyarı ölçümün değil, okumanın parçasıdır.

Listeyi Okurken Karışan Üç Şey

Envanter üç ayrı kavramı tek tabloda toplar ve üçü de “dinliyor” sözcüğüyle anlatıldığı için birbirine karışır.

Birincisi bağlantı yönelimli olmayan bağlantı noktalarıdır. Bağlantı kuran taşıma biçiminde bir bağlantı noktası açıkça dinleme durumuna geçer ve listede öyle görünür; bağlantı kurmayan biçimde böyle bir durum yoktur, yalnız bir bağlantı noktasının bağlanmış olduğu görülür. İki tür aynı listede yan yana durur ve aynı sözcükle okunur; oysa ikincisinde “dinliyor” ifadesinin karşılığı yalnız “bu bağlantı noktasına gelen paketler bir sürece teslim edilir”dir.

İkincisi soket durumu ile servis sağlığının ayrılmasıdır. Dinleme kaydının varlığı, arkasındaki sürecin istekleri gerçekten işlediğini göstermez. İsteği kabul etmeyen ama soketi açık bırakan bir süreç listede sağlıklı görünür; bekleyen istek kuyruğu dolar ve yeni bağlantılar bir noktadan sonra düşmeye başlar. Sistem Yönetimi kursundaki ölçüm burada tekrarlanmaz; oradaki sonuç şuydu: birimin “çalışıyor” görünmesi ile işini yapması iki ayrı gerçektir. Ağ tarafındaki karşılığı, dinleme kaydının varlığı ile isteğin yanıtlanması arasındaki farktır.

Üçüncüsü kalıcı yapılandırma ile çalışan durumun farkıdır ve bu konunun ilk dersinden beri tekrarlanan kalıptır. Elle başlatılmış bir servis listede görünür; önyüklemede başlaması için ayrıca etkinleştirilmiş olması gerekir. Envanter yalnız şimdiki anı gösterir.

İki Sınamanın Ölçüsü

"""Yerel dinleyen listesi ile disaridan baglanti denemesinin ELEME gucu.
Ayni sekiz aday neden , ayni an , iki ayri sinama."""
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_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"


SINAMA = {"dinleyen": s_dinleyen, "baglanti": s_baglanti}


def obekler(sinama, tablo=ARIZA):
    o = {}
    for a in tablo:
        o.setdefault(SINAMA[sinama](durum(a, tablo)), []).append(a)
    return o


for s in SINAMA:
    print(f"{s} sinamasi: yanit basina aday")
    for yanit, kume in obekler(s).items():
        print(f"  {yanit:12s} kalan {len(kume):2d}  elenen {len(ARIZA) - len(kume):2d}"
              f"  {', '.join(kume)}")
    print()
print("kahin basina elenen aday")
print(f"  {'gercek ariza':27s} {'dinleyen':>20s} {'baglanti':>20s}")
toplam = {"dinleyen": 0, "baglanti": 0}
for gercek in ARIZA:
    satir = ""
    for s in SINAMA:
        yanit = SINAMA[s](durum(gercek, ARIZA))
        elenen = len(ARIZA) - len(obekler(s)[yanit])
        toplam[s] += elenen
        satir += f"  {yanit:12s} {elenen:2d} "
    print(f"  {gercek:27s} {satir}")
print(f"  {'TOPLAM elenen':27s} {toplam['dinleyen']:18d} {toplam['baglanti']:19d}")
print()
print("aday kumesi supurmesi")
EK = dict(ARIZA, **{"servis-cokmus": {"servis_dinliyor": False}})
EKSIK = {k: v for k, v in ARIZA.items() if k != "guvenlik-duvari-dusuruyor"}
for ad, tablo in (("temel            8", ARIZA), ("+servis-cokmus   9", EK),
                  ("-guvenlik-duvari 7", EKSIK)):
    d = obekler("dinleyen", tablo)
    b = obekler("baglanti", tablo)
    dk = len(d.get("dinlemiyor", []))
    bk = len(b.get("reddedildi", []))
    print(f"  {ad:18s} dinleyen: yanit {len(d)}"
          f"  'dinlemiyor' elenen {len(tablo) - dk} kalan {dk}"
          f"  | baglanti: yanit {len(b)} en kotu kalan "
          f"{max(len(v) for v in b.values())}"
          f"  'reddedildi' kalan {bk}")
dinleyen sinamasi: yanit basina aday
  dinliyor     kalan  7  elenen  1  arayuz-kapali, adres-yok, ag-gecidi-yanlis, rota-eksik, cozumleyici-sessiz, guvenlik-duvari-dusuruyor, buyuk-paket-dusuyor
  dinlemiyor   kalan  1  elenen  7  servis-dinlemiyor

baglanti sinamasi: yanit basina aday
  ulasilamaz   kalan  4  elenen  4  arayuz-kapali, adres-yok, ag-gecidi-yanlis, rota-eksik
  kuruldu      kalan  2  elenen  6  cozumleyici-sessiz, buyuk-paket-dusuyor
  reddedildi   kalan  1  elenen  7  servis-dinlemiyor
  zaman-asimi  kalan  1  elenen  7  guvenlik-duvari-dusuruyor

kahin basina elenen aday
  gercek ariza                            dinleyen             baglanti
  arayuz-kapali                 dinliyor      1   ulasilamaz    4 
  adres-yok                     dinliyor      1   ulasilamaz    4 
  ag-gecidi-yanlis              dinliyor      1   ulasilamaz    4 
  rota-eksik                    dinliyor      1   ulasilamaz    4 
  cozumleyici-sessiz            dinliyor      1   kuruldu       6 
  servis-dinlemiyor             dinlemiyor    7   reddedildi    7 
  guvenlik-duvari-dusuruyor     dinliyor      1   zaman-asimi   7 
  buyuk-paket-dusuyor           dinliyor      1   kuruldu       6 
  TOPLAM elenen                               14                  42

aday kumesi supurmesi
  temel            8 dinleyen: yanit 2  'dinlemiyor' elenen 7 kalan 1  | baglanti: yanit 4 en kotu kalan 4  'reddedildi' kalan 1
  +servis-cokmus   9 dinleyen: yanit 2  'dinlemiyor' elenen 7 kalan 2  | baglanti: yanit 4 en kotu kalan 4  'reddedildi' kalan 2
  -guvenlik-duvari 7 dinleyen: yanit 2  'dinlemiyor' elenen 6 kalan 1  | baglanti: yanit 3 en kotu kalan 4  'reddedildi' kalan 1

Üç sayı yan yana. Kâhin: bu turda gerçek arıza guvenlik-duvari-dusuruyor; servis dinliyor, paketler geliyor ve filtre onları sessizce düşürüyor. Sınama: yerel dinleyen listesi çıkarılıyor ve yanıtı dinliyor; aynı anda dışarıdan bir bağlantı deneniyor ve yanıtı zaman-asimi. Elenen aday: dinleyen listesi bir, bağlantı denemesi yedi. Liste yedi aday bırakıyor, bağlantı denemesi tek aday bırakıyor ve tanıyı bitiriyor.

Dört Yanıtın Gücü

Üçüncü tablo bu farkın tek bir arızaya özgü olmadığını gösteriyor. Sekiz arızanın hepsi için toplandığında dinleyen listesi 14 aday, bağlantı denemesi 42 aday eliyor. Oran üçtür ve tek tek bakıldığında dağılım daha da keskin: dinleyen listesi sekiz durumun yedisinde yalnız bir aday eliyor, tek bir durumda yedi eliyor. Bağlantı denemesi hiçbir durumda dörtten aşağı düşmüyor.

Farkın kaynağı çıktı miktarı değil, yanıt sayısıdır. Dinleyen listesi onlarca satır üretebilir; taşıdığı ayrım tek bir ikili sorudur — servis dinliyor mu, dinlemiyor mu. Bağlantı denemesi tek satır üretir ve dört ayrı yanıt taşır: ulaşılamaz, zaman aşımı, reddedildi, kuruldu. Her yanıt farklı bir aday kümesine karşılık gelir. Bir sınamanın eleme gücünün üst sınırını çıktı uzunluğu değil, ayırt ettiği durum sayısı belirler.

Yanıtların hangi adaylara karşılık geldiği tanıda doğrudan kullanılır. Ulaşılamaz yanıtı yol sorunlarını işaret eder ve dört adayı bir arada bırakır; bu sınamanın en zayıf yanıtıdır ve ayrımı önceki üç dersin sınamaları yapar. Reddedildi yanıtı, paketin hedefe ulaştığını ve hedefte dinleyen bulunmadığını söyler; yol boyunca her şey çalışıyor demektir ve tek adayı bırakır. Zaman aşımı yanıtı, paketin gittiğini ve hiçbir yanıt dönmediğini söyler; sessizce düşüren bir filtrenin imzası budur. Kuruldu yanıtı, bağlantının açıldığını söyler ve şaşırtıcı biçimde iki adayı ayakta bırakır: sessiz çözücü ile yolda düşen büyük paket. Bağlantının kurulması, bağlantının kullanılabilir olduğu anlamına gelmez.

Bu son satır kursun ikinci iddiasının bu dersteki karşılığıdır. Reddedildi ile zaman aşımı arasındaki ayrım tek bir sözcüktür ve yedişer aday eler; oysa aynı bilgiyi elde etmek için yapılabilecek en ayrıntılı işlem — trafiğin tamamını kaydetmek — binlerce satır üretir. Daha çok çıktı daha iyi tanı demek değildir; ayıran şey, çıktının kaç ayrı duruma karşılık geldiğidir.

Bu ölçünün bir de tersten okunuşu var. Bağlantı denemesinin dört yanıtı, dört ayrı arıza sınıfına karşılık geldiği için değerlidir; yanıtların çokluğu kendi başına yeterli olsaydı, her yanıtı ayrı bir hata koduna bölen bir araç sınırsız güçlü olurdu. Değerli olan şey, yanıtların aday kümesini dengeli bölmesidir: dört yanıt sekiz adayı 4-1-1-2 biçiminde ayırıyor. Yanıtlardan üçü tek ya da iki adaya iniyor, biri dört adayda takılıyor. Sınamayı zayıflatan yanıt, en sık karşılaşılan yanıttır; buradaki ulasilamaz da öyledir ve önceki üç dersin sınamaları tam bu yanıtın bıraktığı dört adayı ayırmak için vardır.

Envanterin Yeri

Dinleyen listesinin zayıf olması onu gereksiz yapmaz; yerini değiştirir. Liste, bağlantı denemesi reddedildi dediğinde doğrulama aracıdır: reddedilme hedefte dinleyen bulunmadığını söyler, envanter bunu yerelde teyit eder ve hangi bağlanma adresiyle dinlendiğini gösterir. Liste ayrıca bağlantı denemesinin yapılamadığı durumlarda tek seçenektir — dışarıdan erişim yoksa, sınamayı yapacak ikinci bir uç yoksa, yerel envanter elde kalan tek okumadır.

  • AY27 — Bağlantı denemesi, hedefe erişebilen ayrı bir uçtan yapılır; o ucun kendi yapılandırmasının sağlam olduğu varsayılır. Denemenin iki uçlu olması bu sınamanın maliyetini yükselten şeydir.
  • AY28 — Zaman aşımı ile reddedilme arasındaki ayrımın istemci tarafında görülebildiği varsayılır; ara katmanların yanıtı değiştirdiği durumlar modelin dışındadır.

Envanterin ikinci işlevi tanı değil, yüzey sayımıdır. Dışarıdan dinleyen her bağlantı noktası, dışarıya açılmış bir kapıdır; yalnız geri döngüden dinleyen bir bağlantı noktası değildir. Bu ayrım güvenlik duvarı derslerinin çıkış noktasıdır ve orada açık yüzey sayılarak ele alınır. Bu derste yalnız şu söylenir: envanterin satır sayısı bir sağlık ölçüsü değildir, bağlanma adresi sütunu okunmadan satır saymak yanıltıcıdır.

Üçüncü işlevi ise karşılaştırmadır. Envanterin bir yapılandırma değişikliğinden önce ve sonra alınması, değişikliğin gerçekten ne yaptığını gösteren en ucuz kayıttır. Bir birim yeniden başlatıldığında dinlenen bağlantı noktası değişmiş olabilir, bağlanma adresi daralmış ya da genişlemiş olabilir; iki listenin farkı bunu tek bakışta verir. Bu, tanı sırasında değil, değişiklik sırasında yapılan bir ölçümdür ve arıza doğduktan sonra elde bulunması, doğduktan sonra aranmasından çok daha değerlidir.

Aday Kümesi Süpürmesi

  • AY29 — Eklenen aday servis-cokmus, birimin çökmesi durumudur ve modelde servis-dinlemiyor ile aynı alanı bozar.
  • AY30 — Çıkarılan aday guvenlik-duvari-dusuruyor, bağlantı denemesinin dördüncü yanıtını tek başına dolduran adaydır.

Dördüncü tablo iki sınamayı aynı sarsıntı altında karşılaştırıyor. Aday eklendiğinde dinleyen listesinin dinlemiyor yanıtı yine yedi aday eliyor ama geriye iki aday bırakıyor; aynı şey bağlantı denemesinin reddedildi yanıtı için de geçerli. İki sınama da aynı ölçüde zayıflıyor, çünkü ikisi de aynı alanı görüyor. Beklenen bir sonuçtur ve modelin iç tutarlılığını doğrular.

Aday çıkarıldığında ise sınamalar farklı davranıyor. Dinleyen listesi yalnız bir aday kaybediyor: dinlemiyor yanıtının elediği aday yediden altıya iniyor, yapısı değişmiyor. Bağlantı denemesinin yanıt sayısı ise dörtten üçe düşüyor; zaman-asimi yanıtı aday listesinde karşılıksız kaldığı için sınamanın ayırt ettiği durum sayısı azalıyor. En kötü kalan dörtte sabit kaldığı hâlde sınamanın taşıdığı ayrım azaldı. Bir sınamanın gücü, aday listesinde karşılığı bulunan yanıtlarının sayısıdır ve bu sayı liste değiştikçe değişir.

Bu, konu boyunca dört kez yapılan süpürmenin ortak sonucudur. Arayüz sınamasında kesin sanılan yanıt kesinliğini yitirdi, rota okumasında aynı şey oldu, ad çözümlemesinde sınama tümüyle değersizleşti, burada ise bağlantı denemesi bir yanıtını kaybetti. Dört durumda da sınama tanımına hiç dokunulmadı. Ölçülen sayı sınamanın değil, sınama ile aday listesinin ortak ürünüdür ve bir tanı yönteminin taşınabilirliği bu yüzden aday listesinin taşınabilirliğine bağlıdır.

Özet

  • Yerel envanterin en önemli sütunu bağlantı noktası numarası değil bağlanma adresidir; yalnız geri döngüden dinleyen bir bağlantı noktası dışarıdan bakıldığında hiç dinlemiyordur ve listede aynı biçimde görünür.
  • Dinleyen listesi iki yanıt verir ve beklenen yanıtta yalnız bir aday eler; dışarıdan yapılan bağlantı denemesi dört yanıt verir ve aynı arızada yedi aday eler.
  • Sekiz arızanın tamamı üzerinden toplandığında dinleyen listesi 14, bağlantı denemesi 42 aday eliyor. Farkın kaynağı çıktı uzunluğu değil, sınamanın ayırt ettiği durum sayısıdır.
  • Bağlantı denemesinin dört yanıtı dört ayrı aday kümesine karşılık gelir: ulaşılamaz dört adayı bir arada bırakır, reddedildi ve zaman aşımı birer aday bırakır, kuruldu ise iki aday bırakır — bağlantının kurulması, kullanılabilir olduğu anlamına gelmez.
  • Süpürme iki sınamayı ayırıyor: aday eklendiğinde ikisi de aynı ölçüde zayıflıyor, aday çıkarıldığında dinleyen listesinin yapısı korunurken bağlantı denemesinin yanıt sayısı dörtten üçe düşüyor.

Sonraki Adım

Bu konu dört sınamayı tek tek ölçtü ve her birinin kaç aday elediğini saydı. Ortaya çıkan tablo tek bir sınamanın yeterli olmadığını gösteriyor: en güçlüsü bile bazı durumlarda dört adayı bir arada bırakıyor, en zayıfı ise başka hiçbir sınamanın ayıramadığı bir adayı ayırıyor. Öyleyse asıl soru tek sınamanın değeri değil, sınamaların hangi sırayla yapılacağıdır. Bir sonraki konu bu soruyu sorar: katmanlı tanı yöntemi sekiz arızanın hepsini çözmek için kaç adım harcıyor, ters sıra kaç adım harcıyor ve her adımda en çok eleyeni seçen bir sıra ne kadar kısaltıyor. Orada görülecek olan şey, en kısa sıranın uygulanabilir bir yordam olmadığıdır: en çok eleyeni seçmek, hangi arızanın gerçek olduğunu önceden bilmeyi gerektirir ve tanı yapan kişinin bilmediği tek şey tam olarak budur.

İ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