İçeriğe geç
academia.sh

Ders 11 / 18

ICMP

Denetim mesajlarının biçimi, yankı sınaması, yaşam süresi alanının yol izlemeye dönüşmesi, yol MTU keşfi ve mesajların engellenmesinin sonuçları.

İçindekiler

Önceki derslerde birkaç kez “yönlendirici paketi atar ve bildirir” denildi: yaşam süresi tükendiğinde, hedef ağa yol bulunamadığında, paket MTU’dan büyük olduğunda. Bu bildirimlerin nasıl yapıldığı henüz açılmadı.

IP’nin kendisi hiçbir geri bildirim vermez; elinden geleni yapan bir teslim hizmetidir. Geri bildirim ayrı bir protokolün işidir. Bu dersin sorusu, o protokolün ne söylediği ve söyleyemediğinde ne olduğudur.

Denetim Mesajlarının Yeri

ICMP (Internet Control Message Protocol), IP paketlerinin taşınması sırasında oluşan durumları bildiren protokoldür. IP başlığındaki protokol alanında 1 değeriyle taşınır — yani IP’nin yükü olarak gider, ancak taşıma katmanı protokolü değildir.

Konumu bir tuhaflık gibi görünür: IP’nin denetim protokolü, IP’nin içinde taşınmaktadır. Gerekçe pratiktir; ICMP mesajının da yönlendirilmesi gerekir ve yönlendirmeyi yapan düzenek zaten IP’dir.

ICMP’nin sınırları açıkça bilinmelidir:

  • Bir ICMP mesajının ulaşacağının güvencesi yoktur; kendisi de kaybolabilir.
  • Bir ICMP mesajı kaybolduğunda ikinci bir mesaj üretilmez; hata bildirimi için hata bildirimi yapılmaz.
  • ICMP mesajları hata düzeltmez; yalnızca haber verir. Ne yapılacağına uç karar verir.

Mesajın Biçimi

Her ICMP mesajı 8 baytlık bir başlıkla başlar:

Alan Boyut İşlev
Tür 1 bayt Mesajın sınıfı
Kod 1 bayt Sınıf içindeki ayrıntı
Sağlama 2 bayt Mesajın tamamı üzerinde
Değişken alan 4 bayt Türe göre anlam kazanır

Hata bildiren mesajlarda gövde, hataya yol açan paketin IP başlığını ve yükünün ilk baytlarını taşır. Bu ayrıntı önemlidir: uç, gelen hata mesajını kendi hangi bağlantısına ait olduğunu ancak bu kopya sayesinde eşleştirebilir. Kopyada taşıma katmanı başlığının ilk baytları da bulunduğundan bağlantı noktası numaraları da okunabilir.

Yankı mesajlarında değişken alan, kimlik ve sıra numarası olarak kullanılır:

import struct


def saglama(veri: bytes) -> int:
    if len(veri) % 2:
        veri += b"\x00"
    toplam = 0
    for i in range(0, len(veri), 2):
        toplam += (veri[i] << 8) + veri[i + 1]
    while toplam >> 16:
        toplam = (toplam & 0xFFFF) + (toplam >> 16)
    return ~toplam & 0xFFFF


def yanki_istegi(kimlik: int, sira: int, yuk: bytes) -> bytes:
    govde = struct.pack("!BBHHH", 8, 0, 0, kimlik, sira) + yuk
    c = saglama(govde)
    return govde[:2] + struct.pack("!H", c) + govde[4:]


mesaj = yanki_istegi(kimlik=0x1234, sira=1, yuk=bytes(range(32)))
print("mesaj boyu :", len(mesaj), "bayt")
print("başlık     :", mesaj[:8].hex())
print("sağlama    :", hex(struct.unpack("!H", mesaj[2:4])[0]))
print("denetim    :", saglama(mesaj))

tur, kod, _, kimlik, sira = struct.unpack("!BBHHH", mesaj[:8])
print(f"tür={tur} kod={kod} kimlik={hex(kimlik)} sıra={sira} yük={len(mesaj) - 8} bayt")
mesaj boyu : 40 bayt
başlık     : 0800f4c912340001
sağlama    : 0xf4c9
denetim    : 0
tür=8 kod=0 kimlik=0x1234 sıra=1 yük=32 bayt

Sağlama yöntemi, kapsülleme dersinde IPv4 başlığı için kurulanla aynıdır; farkı, ICMP’de başlığın yanı sıra yükü de kapsamasıdır. Doğrulama yine sıfır vermelidir.

Mesaj Türleri

Tür Kod Anlamı Ne zaman üretilir
0 0 Yankı yanıtı Yankı isteğine karşılık
3 0 Ağa ulaşılamıyor Hedef ağa yol yok
3 1 Düğüme ulaşılamıyor Yerel ağda hedef yanıtsız
3 3 Bağlantı noktasına ulaşılamıyor Hedefte dinleyen süreç yok
3 4 Parçalama gerekli, engellenmiş Paket MTU’dan büyük ve DF kurulu
8 0 Yankı isteği Erişilebilirlik sınaması
11 0 Yaşam süresi aşıldı TTL sıfıra indi
11 1 Birleştirme süresi aşıldı Parçalar zamanında toplanamadı
12 0 Başlık hatası Alanlardan biri tutarsız

Tür 3, kod 4 ayrı bir öneme sahiptir: mesaj, kabul edilebilir MTU değerini de taşır ve yol MTU keşfinin dayanağıdır.

Yankı Sınaması

Yankı isteği (echo request) ve yankı yanıtı (echo reply) çifti, bir adresin erişilebilirliğini sınamak için kullanılır. Gönderen bir kimlik ve artan bir sıra numarası koyar; yanıt aynı değerleri geri döndürür. Böylece hangi yanıtın hangi isteğe ait olduğu eşleştirilir ve gidiş–dönüş süresi ölçülür.

Sınamanın ne kanıtladığı ve kanıtlamadığı ayrılmalıdır.

Yanıt geldiyse şunlar doğrudur: iki yönde de yol vardır, hedef arayüz etkindir, IP katmanı çalışmaktadır.

Yanıt gelmediyse şunların hiçbiri kesin değildir. Hedef kapalı olabilir; hedef açık ama yankı isteklerini yanıtlamıyor olabilir; yol üzerindeki bir filtre isteği veya yanıtı atmış olabilir. Yanıtsızlık, hedefin çalışmadığı anlamına gelmez.

Bir bağlantı noktasının hizmet verip vermediği yankı sınamasıyla anlaşılmaz. Yankı, IP düzeyinde bir sınamadır; taşıma katmanı ve uygulama katmanı hakkında bilgi vermez. Yankı yanıtı veren bir sunucunun uygulaması durmuş olabilir.

Yaşam Süresi ve Yol İzleme

IP başlığındaki yaşam süresi (time to live, TTL) alanı, paketin geçebileceği yönlendirici sayısını sınırlar. Her yönlendirici alanı bir azaltır; sıfıra indiğinde paketi atar ve gönderene tür 11 mesajı yollar.

Alanın asıl amacı, yönlendirme döngülerinde paketlerin sonsuza dek dolaşmasını önlemektir. Ancak alan, bambaşka bir amaca da hizmet eder: yol izleme.

Yöntem şudur. Hedefe önce TTL değeri 1 olan bir paket gönderilir; ilk yönlendirici onu atar ve kendini bildirir. Sonra TTL değeri 2 olan bir paket gönderilir; ikinci yönlendirici bildirir. Değer birer birer artırılarak yolun her adımı sırayla ortaya çıkar. Hedefe ulaşıldığında gelen mesaj tür 11 değil, ya yankı yanıtı ya da bağlantı noktasına ulaşılamıyor bildirimidir; bu, dizinin sonunu belirtir.

Örnek ağdaki istemciden 198.51.100.20 adresine giden yolun topolojisi bilindiğine göre, izlemenin hangi adımları üreteceği doğrudan çıkarılabilir:

TTL Yanıt veren Rolü Yanıt türü
1 192.168.10.193 Kurum yönlendiricisi, yönetim arayüzü Tür 11
2 203.0.113.1 Sağlayıcı kenar yönlendiricisi Tür 11
3 198.51.100.1 Hedef ağın kenar yönlendiricisi Tür 11
4 198.51.100.20 Hedef uç Tür 0 veya tür 3 kod 3

Yol izleme sonuçları okunurken üç sınır bilinmelidir. Yolun her adımı yanıt vermek zorunda değildir; yanıt vermeyen bir adım boş görünür ve bu, oradan geçilmediği anlamına gelmez. Gidiş yolu görülür, dönüş yolu görülmez; iki yön farklı olabilir. Ölçülen süreler, ara yönlendiricinin hata mesajı üretme önceliğine bağlıdır ve o noktadaki gerçek gecikmeyi göstermeyebilir.

Yol MTU Keşfi

Çerçeve, Paket, Segment dersinde parçalamadan kaçınmanın yolu tanımlanmıştı: parçalanmasın bayrağını kurmak ve gelen bildirime göre segment boyunu küçültmek. Bildirim, ICMP tür 3 kod 4 mesajıdır.

Döngü şöyle işler. Gönderen, kendi bağlantısının MTU değerine göre paket üretir. Yol üzerindeki bir bağlantının MTU değeri daha küçükse, o yönlendirici paketi atar ve kabul edebileceği MTU değerini bildirir. Gönderen, bu değere göre segment boyunu düşürür ve yeniden gönderir. Süreç, paketler geçmeye başlayana kadar sürer.

Yöntemin zayıf noktası, ICMP mesajının kendisine bağımlı olmasıdır. Mesaj yol üzerinde engellenirse gönderen hiçbir şey öğrenemez: paketleri atılmaya devam eder, ancak nedeni bilmez. Bu duruma kara delik (black hole) denir ve tipik belirtisi şudur — küçük istekler çalışır, büyük veri aktarımı takılır. Yankı sınaması başarılıdır, bağlantı kurulur, ilk birkaç bayt gider, sonra akış durur.

Tanısı, MTU’nun elle küçültülmesiyle konur: segment boyu sınırlandığında aktarım düzeliyorsa sorun yol MTU keşfindedir.

ICMP’yi Engellemenin Bedeli

ICMP mesajları, ağ hakkında bilgi verdiği için sık sık toptan engellenir. Bu, birkaç somut arıza üretir:

  • Tür 3 kod 4 engellenirse yol MTU keşfi çalışmaz; kara delik oluşur.
  • Tür 3 kod 3 engellenirse kapalı bir bağlantı noktasına yapılan bağlantı denemesi anında reddedilmek yerine zaman aşımına uğrar; bekleme süreleri uzar.
  • Tür 11 engellenirse yol izleme çalışmaz ve yönlendirme döngüleri görünmez olur.
  • Tür 8 ve 0 engellenirse erişilebilirlik sınaması yapılamaz; tanı kör noktalarla yürütülür.

Ölçülü yaklaşım, toptan engelleme yerine tür bazlı seçim yapmaktır: hata bildirimleri geçirilir, dışarıdan gelen yankı isteklerine verilen yanıt gerekiyorsa sınırlandırılır. Herhangi bir seçimde tür 3 kod 4 geçirilmelidir; onsuz aktarımlar sessizce bozulur.

ICMPv6’nın Genişletilmiş Rolü

IPv6’da ICMP’nin kapsamı belirgin biçimde genişler. ARP dersinde belirtildiği gibi komşu keşfi ICMPv6 içindedir; ayrıca yönlendirici isteği ve duyurusu, yinelenen adres sınaması ve çok noktaya gönderim grubu yönetimi de bu protokol üzerinden yürür.

Bunun doğrudan bir sonucu vardır: ICMPv6 toptan engellenirse IPv6 çalışmaz. IPv4’te ICMP’yi kapatmak tanıyı zorlaştırır; IPv6’da temel işlevleri durdurur. Adres kurulamaz, komşular çözümlenemez, yönlendirici bulunamaz.

Özet

  • ICMP, IP’nin yükü olarak taşınan denetim protokolüdür; hata düzeltmez, yalnızca bildirir ve kendi ulaşımının güvencesi yoktur.
  • Hata mesajları, hataya yol açan paketin başlığını taşır; uç, mesajı bu kopya sayesinde kendi bağlantısıyla eşleştirir.
  • Yankı sınaması IP düzeyinde erişilebilirliği gösterir; yanıtsızlık hedefin çalışmadığı anlamına gelmez ve bir hizmetin varlığını kanıtlamaz.
  • Yaşam süresi alanı, artırılarak gönderilen paketlerle yolun adımlarını sırayla ortaya çıkarır; gidiş yolu görülür, dönüş yolu görülmez.
  • Yol MTU keşfi tür 3 kod 4 mesajına bağımlıdır; mesaj engellenirse küçük isteklerin çalıştığı, büyük aktarımların takıldığı kara delik oluşur.
  • ICMPv6, komşu keşfi ve yönlendirici duyurusunu da üstlenir; toptan engellenmesi IPv6’yı çalışmaz hâle getirir.

Sonraki Adım

Buraya kadar örnek ağdaki her adresin elle atandığı varsayıldı. Yüz cihazlık misafir ağında bu varsayım sürdürülemez: her cihaza adres, maske, geçit ve ad sunucusu bilgisini tek tek girmek olanaksızdır. Sonraki ders adreslerin kiralanma sürecini, kiralamanın dört adımını ve alt ağ planının bu sürece nasıl döküleceğini ele alacak.

İ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