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.