İçeriğe geç
academia.sh

Ders 06 / 13

Erişilebilirlik Testleri

Yankı ve yol izleme sınamalarının doğru okunması: uzak adresten yanıt gelmemesi dört ayrı aday nedene uyuyor, üç erişilebilirlik sınaması ve bir bağlantı denemesi birlikte iki aday çiftini hâlâ ayıramıyor ve ayıran şey yapılandırmanın okunması oluyor.

İçindekiler

Önceki ders tanı sırasını ölçtü ve katmanlı sıranın ilk adımlarındaki iki sınamanın zayıf göründüğünü gösterdi: ağ geçidine yankı yalnız 2 aday, uzak adrese yankı 4 aday eliyordu. Bu sınamalar tanının en sık kullanılan araçlarıdır ve zayıflıkları asıl sorun değildir. Asıl sorun yanlış okunmalarıdır.

Yanlış okuma iki yönde işler. Birinci yönde sessizlik fazla şey söyler sanılır: yanıt gelmediğinde “makine kapalı” ya da “ağ yok” sonucuna varılır, oysa aynı sessizliği üreten birden çok neden vardır. İkinci yönde ses fazla şey söyler sanılır: yanıt geldiğinde “erişim tamam” denir, oysa yanıt veren katman ile erişilmek istenen katman aynı değildir. Bu ders iki yanlış okumayı da sayıyla karşılar.

Yankı Sınamasının İkili Yanıtı

Yankı sınaması bir adrese küçük bir istek gönderir ve karşılığında bir yanıt bekler. Kurgu bunu ikili bir yanıta indirger: yanit ya da yanit-yok (SG6). Gecikme, kayıp oranı ve yanıt sırası bu derste ölçülmez; ölçülen şey sessizliğin kaç aday nedene uyduğudur.

İki ayrı yankı sınaması vardır ve ikisi farklı uzaklığa bakar. Ağ geçidi yankısı yerel ağa çıkıp çıkamadığımızı sorar; yanıt için arayüzün açık ve adresin atanmış olması yeter. Uzak yankı hedefe kadar giden yolu sorar; yanıt için ağ geçidinin doğru ve rotanın var olması da gerekir. İkinci sınama birincisinin gerektirdiği her şeyi gerektirir, üstüne iki koşul daha ekler. Bu iç içelik, sessizliğin neden birden çok nedene uyduğunu doğrudan açıklar.

Ad çözümleme bu sınamaların dışında tutulmuştur: yankı adresle yapılır, adla değil. Adla yapılan bir yankı iki mekanizmayı tek yanıtta karıştırır ve sessizliğin nedenini bir aday daha bulanıklaştırır. Protokolün kendisi Bilgisayar Ağları müfredatının konusudur ve burada kurulmaz.

Yol İzleme: Artan Uzaklıkta Yinelenen Sınama

Yol izleme, hedefe giden yolu ara duraklarıyla birlikte gösteren araçların ortak adıdır. Yaptığı iş, aynı erişilebilirlik sorusunu artan uzaklıklarda yinelemektir: önce bir durak ötesi, sonra iki durak ötesi. Kurguda bu, ağ geçidi yankısı ile uzak yankının ardarda koşturulmasına karşılık gelir (SG7); ara durakların kendi davranışları ayrı ayrı modellenmez.

Üçüncü bir erişilebilirlik sınaması, bölünmeye izin verilmeyen büyük paket denemesidir (SG8). Küçük paketler geçerken büyüklerin kaybolduğu bir yol, yankı sınamasına sağlam görünür. Bu ayrım, yankının küçük istek göndermesinden doğar: sınamanın kullandığı paket boyutu, sınamanın göremediği arızayı belirler.

Dördüncü bir sınırı da baştan yazmak gerekir: yankı yanıtının bilerek verilmemesi aday neden kümesinde yoktur (SG9). Bir hedef yankıya yanıt vermeyecek biçimde yapılandırılmış olabilir ve o durumda sessizlik hiçbir arızaya karşılık gelmez. Kapalı dünya varsayımının bedeli budur: liste dışındaki bir neden, listenin içindeki bir nedenle aynı yanıtı verir.

Yol izleme çıktısının en sık yanlış okunan yeri, ara durakların sessizliğidir. Bir duraktan yanıt gelmemesi o durağın bozuk olduğunu göstermez; ara duraklar kendilerine yönelmemiş isteklere yanıt vermek zorunda değildir ve çoğu bunu düşük öncelikli bir iş sayar. Yol izlemede anlamlı olan tek satır sonuncusudur: yolun hangi uzaklıktan sonra tamamen sessizleştiği. Ortada duran boş satırlar aday elemez, yalnız satır sayısını artırır. Aynı yanılgının tersi de olur: bütün duraklar yanıt verirken hedefin sessiz kalması, yolun sağlam olduğunu ve arızanın hedefte olduğunu düşündürür, oysa dönüş yönü ayrı bir yoldur ve gidiş yönünün sağlamlığı dönüşü kanıtlamaz.

Kurgunun ikili yanıta indirgemesi bir kolaylık değil, bilinçli bir sınırdır. Gerçek bir yankı sınaması üç istekten kaçının döndüğünü de söyler ve “3’te 3 kayıp” ile “3’te 1 kayıp” tanı bakımından aynı şey değildir: birincisi kalıcı bir arızaya, ikincisi aralıklı bir arızaya işaret eder. Kurgu bu ikinci durumu kapsamaz; aralıklı arıza dördüncü dersin konusudur. Burada tutulacak nokta şudur: kayıp oranını atıp yanıtı ikiye indiren her okuma, aralıklı arızayı ya tamamen sağlam ya tamamen bozuk gösterir.

# ornek dokum , calistirilmis degildir
$ ping -c 3 <ag-gecidi>                  # bir durak otesi
$ ping -c 3 <hedef-adres>                # hedefe kadar
$ tracepath <hedef-adres>                # artan uzaklikta yineleme
$ ping -c 3 -M do -s 1400 <hedef-adres>  # bolunmeye izin vermeyen deneme
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},
}
ADAYLAR = tuple(ARIZA)


def durum(a=None):
    d = dict(SAGLAM)
    if a:
        d.update(ARIZA[a])
    return d


def yol(d):
    return (d["arayuz_acik"] and d["adres_var"]
            and d["ag_gecidi_dogru"] and d["rota_var"])


SINAMA = {                    # ortak tanimin sekizinden bu derste kullanilan bes
    "gecit-yankisi": lambda d: ("yanit" if d["arayuz_acik"] and d["adres_var"]
                                else "yanit-yok"),
    "uzak-yanki": lambda d: "yanit" if yol(d) else "yanit-yok",
    "buyuk-paket": lambda d: ("geciyor" if yol(d) and d["yol_bozulmadan"]
                              else "gecmiyor"),
    "baglanti": lambda d: ("ulasilamaz" if not yol(d)
                           else "zaman-asimi" if not d["guvenlik_duvari_gecirir"]
                           else "reddedildi" if not d["servis_dinliyor"]
                           else "kuruldu"),
    "rota": lambda d: ("tablo-bos" if not d["adres_var"]
                       else "tam" if d["rota_var"] else "varsayilan-yok"),
}
YANKI = ["gecit-yankisi", "uzak-yanki", "buyuk-paket"]     # SG7: yol izleme


def obekler(kume, adaylar=ADAYLAR):
    o = {}
    for a in adaylar:
        o.setdefault(tuple(SINAMA[s](durum(a)) for s in kume), []).append(a)
    return o


print("bir yanit kac aday nedene uyuyor")
for s in YANKI + ["baglanti"]:
    for yanit, uyan in sorted(obekler([s]).items()):
        print(f"  {s:14s} {yanit[0]:12s} {len(uyan)}  {', '.join(sorted(uyan))}")
print()
KAHIN = "ag-gecidi-yanlis"
print("kahin:", KAHIN, "| sinamalar sirayla uygulaniyor")
kalan = ADAYLAR
for s in YANKI + ["baglanti", "rota"]:
    yanit = SINAMA[s](durum(KAHIN))
    yeni = tuple(a for a in kalan if SINAMA[s](durum(a)) == yanit)
    print(f"  {s:14s} {yanit:12s} elenen {len(kalan) - len(yeni)}  kalan {len(yeni)}"
          f"  {', '.join(sorted(yeni))}")
    kalan = yeni
print()
print("sinama kumesi                                  obek  ayrilamayan  en buyuk obek")
for kume in (["gecit-yankisi"], ["uzak-yanki"], ["gecit-yankisi", "uzak-yanki"],
             YANKI, ["baglanti"], YANKI + ["baglanti"]):
    o = obekler(kume)
    ayr = [v for v in o.values() if len(v) > 1]
    print(f"  {'+'.join(kume):45s} {len(o):4d} {len(ayr):12d}"
          f" {max(len(v) for v in o.values()):14d}")
print()
print("aday kumesi supurmesi: 'uzak-yanki = yanit-yok' kac adaya uyuyor")
kume = ["arayuz-kapali"]
for a in ADAYLAR:
    if a not in kume:
        kume.append(a)
        uyan = [x for x in kume if SINAMA["uzak-yanki"](durum(x)) == "yanit-yok"]
        print(f"  aday {len(kume)}  eklenen {a:26s} uyan {len(uyan)}")
bir yanit kac aday nedene uyuyor
  gecit-yankisi  yanit        6  ag-gecidi-yanlis, buyuk-paket-dusuyor, cozumleyici-sessiz, guvenlik-duvari-dusuruyor, rota-eksik, servis-dinlemiyor
  gecit-yankisi  yanit-yok    2  adres-yok, arayuz-kapali
  uzak-yanki     yanit        4  buyuk-paket-dusuyor, cozumleyici-sessiz, guvenlik-duvari-dusuruyor, servis-dinlemiyor
  uzak-yanki     yanit-yok    4  adres-yok, ag-gecidi-yanlis, arayuz-kapali, rota-eksik
  buyuk-paket    geciyor      3  cozumleyici-sessiz, guvenlik-duvari-dusuruyor, servis-dinlemiyor
  buyuk-paket    gecmiyor     5  adres-yok, ag-gecidi-yanlis, arayuz-kapali, buyuk-paket-dusuyor, rota-eksik
  baglanti       kuruldu      2  buyuk-paket-dusuyor, cozumleyici-sessiz
  baglanti       reddedildi   1  servis-dinlemiyor
  baglanti       ulasilamaz   4  adres-yok, ag-gecidi-yanlis, arayuz-kapali, rota-eksik
  baglanti       zaman-asimi  1  guvenlik-duvari-dusuruyor

kahin: ag-gecidi-yanlis | sinamalar sirayla uygulaniyor
  gecit-yankisi  yanit        elenen 2  kalan 6  ag-gecidi-yanlis, buyuk-paket-dusuyor, cozumleyici-sessiz, guvenlik-duvari-dusuruyor, rota-eksik, servis-dinlemiyor
  uzak-yanki     yanit-yok    elenen 4  kalan 2  ag-gecidi-yanlis, rota-eksik
  buyuk-paket    gecmiyor     elenen 0  kalan 2  ag-gecidi-yanlis, rota-eksik
  baglanti       ulasilamaz   elenen 0  kalan 2  ag-gecidi-yanlis, rota-eksik
  rota           tam          elenen 1  kalan 1  ag-gecidi-yanlis

sinama kumesi                                  obek  ayrilamayan  en buyuk obek
  gecit-yankisi                                    2            2              6
  uzak-yanki                                       2            2              4
  gecit-yankisi+uzak-yanki                         3            3              4
  gecit-yankisi+uzak-yanki+buyuk-paket             4            3              3
  baglanti                                         4            2              4
  gecit-yankisi+uzak-yanki+buyuk-paket+baglanti    6            2              2

aday kumesi supurmesi: 'uzak-yanki = yanit-yok' kac adaya uyuyor
  aday 2  eklenen adres-yok                  uyan 2
  aday 3  eklenen ag-gecidi-yanlis           uyan 3
  aday 4  eklenen rota-eksik                 uyan 4
  aday 5  eklenen cozumleyici-sessiz         uyan 4
  aday 6  eklenen servis-dinlemiyor          uyan 4
  aday 7  eklenen guvenlik-duvari-dusuruyor  uyan 4
  aday 8  eklenen buyuk-paket-dusuyor        uyan 4

Kâhin, Sınama, Elenen Aday

Üç sayı yan yana durur. Kâhin: gerçek arıza ag-gecidi-yanlis, yani varsayılan ağ geçidi yanlış yazılmış. Sınama: uzak yankı yanit-yok döndürüyor. Elenen aday: bu yanıt sekiz adaydan 4’ünü eliyor ve geriye 4 aday bırakıyor.

Sessizliğin dört adaya uyması, bu dersin birinci sayısıdır. “Uzak adresten yanıt gelmiyor” cümlesi tek başına arayuz-kapali, adres-yok, ag-gecidi-yanlis ve rota-eksik adaylarının hepsiyle uyumludur. Sessizliği “ağ kopuk” diye okumak bu dördünü tek bir nedenmiş gibi toplamaktır; dördünün düzeltmesi ayrıdır ve yanlış seçilen düzeltme çalışmaz.

Ağ geçidi yankısı sessiz kaldığında durum daha dardır: yalnız 2 aday uyar (arayuz-kapali, adres-yok). Buradan pratik bir okuma çıkar. Yakın sessizlik uzak sessizlikten daha bilgilendiricidir, çünkü daha az koşula bağlıdır. Yol izlemenin gerçek işlevi de budur: sessizliğin hangi uzaklıkta başladığını bularak, uyan aday sayısını daraltmak.

Yanıt Gelmesi Neyi Söylemez

İkinci yanlış okuma daha sinsidir. Yankının yanıt vermesi, dört adayı eler ama geriye 4 aday bırakır: cozumleyici-sessiz, servis-dinlemiyor, guvenlik-duvari-dusuruyor ve buyuk-paket-dusuyor. Yani “makine yanıt veriyor” cümlesi, servise erişilebildiği anlamına gelmez ve dört ayrı arıza bu cümleyle tamamen uyumludur.

Aradaki farkı yaratan şey, sessizlik ile reddin aynı şey olmamasıdır. Bağlantı denemesinin dört yanıtından ikisi tek bir adayı belirler: reddedildi yalnız servis-dinlemiyor adayına, zaman-asimi yalnız guvenlik-duvari-dusuruyor adayına uyar. Reddedilmek bir yanıttır ve yanıt veren taraf, yolun sağlam olduğunu da kanıtlar; sessizlik ise hem yolun hem hedefin durumu hakkında belirsizdir. Tanıda bu yüzden aranan şey sessizliği bir yanıta çevirebilecek sınamadır.

Büyük paket denemesi bu dördünün içinden birini ayırır: buyuk-paket-dusuyor senaryosunda küçük yankı geçer, büyük paket geçmez. Bu, tanıda en çok gözden kaçan imzadır, çünkü iki sınamanın çeliştiği tek yerdir — biri sağlam, öteki bozuk der ve ikisi de doğrudur.

Ardışık tablo bu sıranın nasıl yürüdüğünü gösterir. Kâhin ag-gecidi-yanlis iken ağ geçidi yankısı 2, uzak yankı 4 aday eliyor; ondan sonra büyük paket denemesi 0, bağlantı denemesi de 0 aday eliyor. Bir sınamanın güçlü olması yetmez; daha önce elenmiş adayları yeniden elemek eleme değildir. Bağlantı denemesi önceki derste yedi aday elemişti; burada sıfır eliyor, çünkü kendisinden önce gelen sınamalar aynı ayrımı zaten yapmıştı.

Erişilebilirlik Sınamalarının Duvarı

Son tablo dersin en sert sonucudur. Ağ geçidi yankısı tek başına 8 adayı 2 öbeğe ayırır ve en büyük öbekte 6 aday kalır. Uzak yankı tek başına 2 öbek, en büyük öbek 4. İkisi birlikte 3 öbek üretir ve üç öbeğin üçünde de birden çok aday vardır: bu iki sınama, tek bir adayı bile tek başına belirleyemez.

Büyük paket denemesi eklendiğinde öbek sayısı 4’e çıkar, en büyük öbek 3’e iner; ayrılamayan öbek sayısı hâlâ 3’tür. Bağlantı denemesi de eklendiğinde 6 öbek oluşur ve geriye 2 ayrılamayan çift kalır: arayuz-kapali ile adres-yok, ve ag-gecidi-yanlis ile rota-eksik.

Bu iki çift, kaç erişilebilirlik sınaması yapılırsa yapılsın ayrılmaz. Nedeni yapısaldır: çiftin iki üyesi de aynı yolu aynı yerde kesiyor, dolayısıyla yola bakan her sınama aynı yanıtı veriyor. Ayıran şey yola bakmak değil, yapılandırmayı okumaktır. Tabloda bunu yapan satır sonuncusudur: yönlendirme tablosu sınaması tam yanıtını verip ag-gecidi-yanlis ile rota-eksik arasındaki son adayı eler ve tanı 1 adaya iner.

Buradan kursun ikinci iddiasının ilk yüzü çıkar: sınama sayısını artırmak eleme gücünü artırmaz. Üç erişilebilirlik sınaması, tek bir yapılandırma okumasının yaptığı işi yapmıyor. Sınamaları çoğaltmak yerine türünü değiştirmek gerekiyor.

Bu araçların bu kadar çok kullanılmasının nedeni de aynı tabloda gizlidir: ucuzdurlar. Bir yankı sınaması saniyeler sürer, tek satır komuttur, hedefte değişiklik yapmaz ve başarısızlığı zararsızdır. Ucuzluk, bir aracı ilk seçenek yapar; eleme gücü ise onu tanıyı bitiren araç yapar ve ikisi aynı ölçü değildir. Ölçüde her sınama bir adım sayıldı (SG5), yani saniyeler değil kararlar sayıldı. Saniye cinsinden ölçülseydi yankı sınamaları daha da avantajlı görünürdü ve tam da bu görüntü, tanının tıkandığı yerde onlarca kez yankı yinelemeye yol açar. Aynı sınamanın yinelenmesi hiçbir yeni aday elemez; ilk koşumdan sonra elde edilen bilgi sabittir.

Aday Kümesi Süpürmesi

Süpürme, sessizliğin uyduğu aday sayısının kümeye ne kadar bağlı olduğunu gösterir. Küme arayuz-kapali ile başlayıp sekize kadar büyütüldüğünde uzak-yanki = yanit-yok yanıtına uyan aday sayısı 1, 2, 3, 4 diye artar ve dörtte durur: sonradan eklenen dört aday üst katmandadır ve uzak yankıya yanıt üretirler.

Tablo tersten de okunur. Listeden bir aday çıkarmak, satırları yukarı doğru izlemekle aynı şeydir: rota-eksik listeden çıkarıldığında sessizliğe uyan aday 4’ten 3’e, ag-gecidi-yanlis de çıkarıldığında 2’ye iner. Çıkarma her zaman kazanç gibi görünür, çünkü sessizlik daralır; oysa çıkarılan aday gerçek arızaysa tanı sıfır adayla biter ve bu, tablonun hiçbir yerinde görünmez.

Sonuç iki yönlüdür. Aday listesi kısaysa sessizlik daha bilgilendirici görünür — üç adaylı bir listede “yanıt yok” iki adaya uyar — ama bu bilgi, listenin dışında kalan nedenler pahasına elde edilmiştir. Aday listesi uzadıkça sessizliğin ayırt etme gücü belli bir noktadan sonra artmaz da azalmaz da: eklenen adaylar farklı bir yanıt verdiği sürece sessizliğin karşılığı sabit kalır. Bir sınamanın gücünü belirleyen şey aday sayısı değil, adayların hangi yanıta düştüğüdür.

Özet

  • Uzak adresten yanıt gelmemesi 4 ayrı aday nedene uyar; ağ geçidinden yanıt gelmemesi 2 adaya uyar. Yakın sessizlik daha az koşula bağlı olduğu için daha bilgilendiricidir.
  • Yankının yanıt vermesi de 4 adayı ayakta bırakır; “makine yanıt veriyor” cümlesi servise erişilebildiğini söylemez.
  • Yol izleme, aynı erişilebilirlik sorusunun artan uzaklıkta yinelenmesidir; büyük paket denemesi, küçük yankının göremediği tek arızayı ayırır.
  • Üç erişilebilirlik sınaması birlikte tek bir adayı bile belirleyemez; bağlantı denemesi de eklendiğinde geriye 2 ayrılamayan çift kalır ve onları ancak yapılandırmayı okumak ayırır.
  • Daha önce elenmiş adayı yeniden elemek eleme değildir: bağlantı denemesi bu sırada 0 aday eler; aynı sınamanın yinelenmesi de yeni aday elemez.
  • Reddedilmek bir yanıttır ve tek adayı belirler; sessizlik hem yol hem hedef hakkında belirsizdir.

Sonraki Adım

Erişilebilirlik sınamaları duvara toslayınca akla gelen sonraki adım genellikle aynıdır: trafiğin kendisine bakmak. Paket yakalama, yanıtların özetini değil, hattan geçen her çerçeveyi gösterir ve bu yüzden “en ayrıntılı” araç sayılır. Sonraki ders bu beklentiyi ölçer: yakalamanın ürettiği satır sayısını ve elediği aday neden sayısını yan yana koyar, satır başına düşen eleme gücünü bağlantı denemesininkiyle karşılaştırır. Yakalamanın bir tanı aracı olduğu, başkasının trafiğini ele geçirme yordamı olmadığı da orada sınırıyla birlikte yazılır.

İ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