Bölüm 23:Adres Çözümleme: ARP
Ağlar'a “Sen”i Katmak yazısının parçası: adres çubuğuna yazdığın tek bir isteğin peşinden bakırla fiberin fiziğine kadar inen uzun bir teknik yolculuk.
Tüm bölümler
- Giriş
- Adres Çubuğundan İsteğe
- Paket Anahtarlamalı Yol
- İsimden Adrese
- Önbellek, Tazelik ve Güven
- Port Numarası ve Soket
- Bağlantısız Taşıma: UDP
- Üç Adımlı El Sıkışma
- Simetrik Şifreleme
- Açık Anahtarlı Kriptografi
- TLS El Sıkışması
- Sertifika Zinciri
- HTTP Mesajının Anatomisi
- Durum, Çerez ve Oturum
- HTTP/2'den HTTP/3'e
- İçerik Dağıtım Ağları
- Diğer Uygulama Protokolleri
- Katmanlı Mimari
- Kapsülleme ve Başlıklar
- Paket Yakalama ve Çözümleme
- Ağ Arayüz Kartı
- Fiziksel Adresleme
- Hata Sezme ve CRC
- Adres Çözümleme: ARP
- Anahtarlama ve Ortam Erişimi
- Ağ Topolojileri
- Sanal Yerel Ağlar
- Kablosuz Erişim: 802.11
- Radyo Kanalı ve Kapasite
- Kablosuz Ağ Güvenliği
- Hücresel Ağlar
- Spektrum ve Kuşaklar
- Hareketlilik ve Aktarma
- Adres Kiralama: DHCP
- Adresin Anatomisi
- Adres Tükenmesi ve IPv6
- Yönlendirici Mimarisi
- Kuyruk Yönetimi
- Cihaz Yapılandırma
- Yönlendirme Protokolleri
- Kontrol Düzlemi ve SDN
- Ağ İzleme ve Yönetimi
- Alanlar Arası Yönlendirme
- Adres Çevirisi
- Ara Kutular
- Tünelleme ve IPsec
- Güvenlik Duvarları
- Operatör ve Metro Ağları
- Bitten Sinyale
- Çoklama Teknikleri
- İletim Ortamları
- Kablo Sonlandırma
- Fiber Optik İletim
- Bakır Erişim Ağı: DSL
- Pasif Optik Ağlar
- Kablo Erişim Ağları
- Denizaltı Kabloları
- Veri Merkezi Ağları
- Kapsülleme Çözme
- Güvenilir Aktarım
- Tıkanıklık Denetimi
- Trafik Çözümleme
- Gecikme Bütçesi
- Son Söz
Çerçevenin sonuna dört baytlık FCS’yi koyduk; başındaki iki adres alanı da tanımlıydı. Elinde ise yalnızca bir IP adresi var ve aradaki eşlemeyi kimse önceden yapmadı.
Geriye tek bir iş kalıyor: sormak. Ağda sormak ise harfi harfine bağırmak demek. Peki bağırınca kim cevap veriyor?
Soru sorulmadan önce bir karar veriliyor
Makinen çerçeveyi yazmadan önce sessiz bir hesap yapıyor. Hedef IP adresini ve kendi adresini alt ağ maskesinden geçiriyor. İki sonuç aynıysa hedef aynı ağda oturuyor; farklıysa hedef uzakta kalıyor.
Somut bir örnek üstünde yürüyelim. Adresin 192.0.2.10 ve maskesi 255.255.255.0 olsun. Hedef 192.0.2.40 ise maskeden geçen iki sonuç da aynı çıkıyor; komşusun. Hedef 198.51.100.5 olsaydı sonuçlar ayrışacak ve soru o makine için hiç sorulmayacaktı.
Uzak hedefte ARP hedefin kendisi için sorulmuyor, default gateway (varsayılan geçit) için soruluyor — yani makinenin, kendi ağında olmayan her şeyi teslim ettiği çıkış kapısı için. Çerçevenin hedef MAC adresi yönlendiricinin arayüzü oluyor. Paketin içindeki hedef IP adresi ise olduğu gibi kalıyor. İki adres, iki ayrı katmanın işi; birbirlerinin yerine geçemezler.
Karar verildikten sonra ilk bakılan yer makinenin kendi ARP tablosu. Tablonun her satırı bir IP adresini bir MAC adresine eşliyor. Yeni açılmış bir makinede bu tablo boştur. Dolduran şey kullanımın kendisi: makine kiminle konuştuysa onun satırı orada durur. Kimse elle yapılandırmıyor.
Mahalle bakkalını düşün. Müşterisinin adını bilir ama kimin hangi kapıda oturduğunu ancak bir kez sorup deftere yazarak öğrenir. Defter ARP tablosu, ad IP adresi, kapı numarası MAC adresi. Benzetme şurada biter: bakkalın defteri sokağın dışına çıkmaz, ARP de kendi alt ağının dışını çözemez.
Yetkili sunucuya kadar giden ad çözme zincirini izlemiştin; burada aynı iş bir kat aşağıda, adresten karta doğru yapılıyor. Ağa yeni katılan bir makine bunu ilk saniyede yaşıyor: DNS sorgusunu taşıyacak çerçeve için yönlendiricinin MAC adresi gerekiyor. İstek, sen farkına varmadan bir soruya bağlı bekliyor.
Neden yayınla soruluyor?
Tabloda kayıt yoksa makine soruyu ağa yayınlıyor. Çerçevenin hedef MAC alanına FF-FF-FF-FF-FF-FF yazılıyor. Sebep sade: sorunun kime gideceği bilinmiyor.
Yayını yerel ağdaki bütün düğümler alıyor. Standart, hedefi tümü bir olan her çerçeveyi her istasyonun alıp işlemesini şart koşuyor. Hedef olmayan cihazlar, örneğin yönlendirici, mesajı dikkate almadan atıyor. Ama atmadan önce almış ve işlemiş oluyorlar.
Ölçek tam burada gizleniyor. Belgeleme için ayrılmış 192.0.2.0/24 bloğunu örnek alalım; içinde 254 kullanılabilir adres var. Tek bir ARP isteği, soranın dışındaki 253 komşunun kartını uyandırıyor. Ağ kartının gelen çerçeveyi halka tampona alıp çekirdeğe taşımasının bir bedeli vardı. O bedel burada 253 kez ödeniyor.
Cevap veren tek bir makine oluyor: istekteki IP adresinin sahibi. Cevap da yayınla dönmüyor, tek bir çerçeveyle geliyor. Asimetri kasıtlı; cevabı yalnızca soranın duyması yeter.
Öğrenme çift yönlü işliyor. Cevabı alan makine eşlemeyi belleğine yazıyor ve bir daha sormuyor. Cevabı veren de soranın adresini kendi tablosuna ekliyor, çünkü ARP paketi soranın kendi IP ve MAC adresini de taşıyor. Soru sorarken kendini de tanıtıyorsun.
Birbirinin yayın çerçevelerini alan düğümlerin tamamına broadcast domain (yayın alanı) deniyor. Yayın yerine çoklu yayın kullanmak daha iyi bir fikirdi; ilk biti bir olan adresler çoklu yayındı ve IPv6’nın adres çözümlemesi tam olarak oraya yaslanıyor. Bu bağırışın nereye kadar gittiğini kasten açık bırakıyorum; sınırını bir sonraki durakta çizeceğiz.
Bir yana: RARP ters yönü çözüyor, MAC adresinden IP adresini öğreniyor. Vekil ARP ise yönlendiricinin başkası adına cevap vermesi; işi yürütüyor ama ağdaki trafiği artırıyor.
Paketin içinde tam olarak ne var?
ARP’ın tanımı 1982 tarihli RFC 826. Yaptığı işin adı adres çözümleme: elindeki IP adresine karşılık gelen MAC adresini bulmak. Belgedeki paket biçimi dokuz alandan oluşuyor: donanım türü, protokol türü, iki adres uzunluğu, işlem kodu ve dört adres alanı.
Uzunluk alanları ilk bakışta fazlalık gibi duruyor. Fazlalık sayılmazlar. MAC adresi 6 bayt, IPv4 adresi 4 bayt ve ARP bu iki uzunluğu ayrı alanlarda ilan ediyor. Yani ARP IPv4’e gömülü bir protokol değil; hangi adres ailesini çözdüğünü paketin kendisi söylüyor.
ar$hrd 2 bayt donanım türü
ar$pro 2 bayt protokol türü
ar$hln 1 bayt donanım adres uzunluğu -> 6
ar$pln 1 bayt protokol adres uzunluğu -> 4
ar$op 2 bayt işlem kodu -> istek 1, cevap 2
ar$sha 6 bayt gönderenin MAC adresi
ar$spa 4 bayt gönderenin IP adresi
ar$tha 6 bayt hedefin MAC adresi
ar$tpa 4 bayt hedefin IP adresi
--------------------------------------------
toplam 28 baytAlanları gerçek değerlerle doldurunca resim netleşiyor. Belgeleme için ayrılmış adresleri kullanayım. Örnek kart adresleri de uydurma sayılmaz; RFC 7042 belgeleme için 00-00-5E-00-53-00 ile 00-00-5E-00-53-FF arasını ayırmış. Soran makine 192.0.2.10, kartının adresi 00-00-5E-00-53-2A, aradığı adres ise 192.0.2.40 olsun. İstekte kendi adres ikilisini gönderen alanlarına yazıyor ve aradığı adresi hedef IP alanına koyuyor. Hedefin MAC adres alanını ise boş bırakıyor. Zaten bilseydi sormazdı.
Cevap da aynı dokuz alanı taşıyor, yalnızca roller yer değiştiriyor. Adresin sahibi kendi kartının adresini gönderen alanına yazıyor ve çerçeveyi doğrudan soranın kartına yolluyor.
istek (op 1) gönderen 192.0.2.10 / 00-00-5E-00-53-2A
hedef 192.0.2.40 / boş
çerçeve hedef MAC FF-FF-FF-FF-FF-FF
cevap (op 2) gönderen 192.0.2.40 / 00-00-5E-00-53-3C
hedef 192.0.2.10 / 00-00-5E-00-53-2A
çerçeve hedef MAC 00-00-5E-00-53-2AEthernet’in veri alanı en az 46 bayt olduğu için araya 18 bayt dolgu giriyor. Bir ARP isteği tel üstünde bu yüzden 64 baytlık asgari çerçeve olarak gidiyor. Sorduğun soru, kablodaki en küçük çerçeve.
Çerçevenin tür alanı 0x0806. Alıcı bu değere bakıp yükü ARP modülüne veriyor. Kapsülleme merdiveninde bu tür alanını zaten görmüş ve değerini not etmiştin. ARP paketi bir bağ katmanı çerçevesinin içinde taşınıyor ama ağ katmanı adreslerini içeriyor; iki katmanın tam sınırına oturuyor.
Gelen paketi alan makine sırayla üç şey soruyor: bu donanım türünü tanıyor muyum, bu protokolü konuşuyor muyum, hedef protokol adresi ben miyim. İşlem koduna en sonda bakılıyor. Üstelik gönderenin adres çifti tabloda zaten varsa, kod okunmadan önce güncelleniyor. Yani kimse sormadan gelen bir cevap da tabloyu tazeliyor.
Tablo ne kadar hatırlıyor?
Kayıtların bir ömrü var. Tipik değer 20 dakika; süre dolunca eşleme unutuluyor. Windows dinamik bir kaydı bellekte 2 dakika tutuyor, o süre içinde yeniden konuşulursa ömür 10 dakikaya çıkıyor. Aynı protokolde ömür on kata kadar fark ediyor. Bu bir ihlal sayılmıyor, çünkü RFC 826 tablo yaşlandırmayı ve zaman aşımını zorunlu kılmıyor.
ARP tablosu bu yüzden alt ağdaki her makineyi içermez. Kimisi tabloya hiç girmemiştir, kimisinin süresi dolmuştur. Bir makine ağdan koptuğunda kaydı kendiliğinden siliniyor. Eşlemeyi elle sabitlemek de mümkün; arp -s bir satırı statik yapıyor.
Şimdi adresini yeni alan bir makineye bak. RFC 5227, bir adresi kullanmadan önce 3 yoklama paketi göndermeyi kurala bağlıyor. Yoklamada gönderen IP alanı sıfır bırakılıyor; amaç, henüz sahiplenilmemiş bir adresle komşuların önbelleğini kirletmemek. Çakışma çıkmazsa makine 2 ilan paketi yolluyor. İlan, gönderen ve hedef IP alanı aynı olan bir ARP isteği. Bedava ARP dediğimiz şey bu. Adresini savunan makine iki savunma arasında en az 10 saniye bekliyor; iki çakışan makinenin ağı doldurmasını engelleyen sınır bu.
Aynı kural kötüye de kullanılıyor. Sahte bir cevap komşunun satırını sessizce değiştiriyor ve trafik saldırganın kartına akıyor; adı ARP zehirlemesi. Resolver’ın önbelleğine sahte kayıt yerleştiren ve orayı yaşam süresi boyunca elinde tutan bir saldırı vardı. Buradaki numara aynı fikrin bir kat aşağıdaki hâli. Ortaya çıkan sonuç, adını Diffie-Hellman anlatırken koyduğumuz ortadaki adam saldırısı — bu kez yerel ağın içinde. Anahtar üstündeki dinamik ARP denetimi, MAC adresi ile IP eşleşmelerini karşılaştırıp bunu kesiyor.
Bunların hepsini kendi makinende görebilirsin. Windows’ta tablo arp -a ile geliyor, Cisco yönlendiricide karşılığı show arp oluyor. Çıktının biçimi de öğretici. Her satırda bir IP adresi, karşısında bir MAC adresi ve kaydın türü duruyor.
Arayüz: 192.0.2.10 --- 0x5
Internet Adresi Fiziksel Adres Tür
192.0.2.1 00-00-5e-00-53-01 dinamik
192.0.2.40 00-00-5e-00-53-3c dinamikListedeki ilk satır neredeyse her makinede aynı işi görüyor: geçidin kaydı. Dinamik kayıtlar zamanla silinir, statik olanlar sen silene kadar durur. En hızlı deney de burada: bir satırı arp -d ile düşür, sonra o adrese tek bir paket yolla. Tablo kendini yeniden dolduruyor ve aradaki soruyu kimse sana sormuyor.
Gösterim filtresiyle trafiği ayıklamayı öğrenmiştin; arp.opcode == 1 istekleri, arp.opcode == 2 cevapları getiriyor. Aynı adresi iki farklı kartın sahiplendiği anı ise arp.duplicate-address-detected yakalıyor.
Peki kimse cevap vermezse? Gönderen isteği tekrarlıyor, sonunda paketleri düşürüyor. Sessizlik görünür bir hataya dönüşüyor: yönlendirici kaynağa ICMP Hedef Bilgisayara Ulaşılamıyor mesajı gönderiyor.
Özet
Peki, ne öğrendik?
- ARP tek bir soruyu çözüyor: elindeki IP adresinin hangi MAC adresine ait olduğunu bulur, ve bunu yalnızca kendi alt ağının içinde yapabilir.
- Soru yayınla gidiyor, cevap tekil dönüyor: isteği bütün komşular alıp işler, cevabı ise yalnızca adresin sahibi verir.
- Öğrenilen eşleme saklanıyor: tablo kullanıldıkça dolar, kayıtların ömrü dolunca silinir, ve bu süreyi RFC 826 zorunlu kılmaz.
- Gelen her mesaj göndereni tazeliyor: bedava ARP de bu kurala yaslanır, ARP zehirlemesi de.
Soruyu sordun, cevabı aldın, eşlemeyi tabloya yazdın. İsteğin hâlâ sırada bekliyor. Bağırdın ve herkes duydu; peki “herkes” tam olarak kim?
24. bölüme devam et: Anahtarlama ve Ortam Erişimi