Ana içeriğe geç

Bölüm 23:Adres Çözümleme: ARP

7 dakikalık okumaGüncelleme:

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
  1. Giriş
  2. Adres Çubuğundan İsteğe
  3. Paket Anahtarlamalı Yol
  4. İsimden Adrese
  5. Önbellek, Tazelik ve Güven
  6. Port Numarası ve Soket
  7. Bağlantısız Taşıma: UDP
  8. Üç Adımlı El Sıkışma
  9. Simetrik Şifreleme
  10. Açık Anahtarlı Kriptografi
  11. TLS El Sıkışması
  12. Sertifika Zinciri
  13. HTTP Mesajının Anatomisi
  14. Durum, Çerez ve Oturum
  15. HTTP/2'den HTTP/3'e
  16. İçerik Dağıtım Ağları
  17. Diğer Uygulama Protokolleri
  18. Katmanlı Mimari
  19. Kapsülleme ve Başlıklar
  20. Paket Yakalama ve Çözümleme
  21. Ağ Arayüz Kartı
  22. Fiziksel Adresleme
  23. Hata Sezme ve CRC
  24. Adres Çözümleme: ARP
  25. Anahtarlama ve Ortam Erişimi
  26. Ağ Topolojileri
  27. Sanal Yerel Ağlar
  28. Kablosuz Erişim: 802.11
  29. Radyo Kanalı ve Kapasite
  30. Kablosuz Ağ Güvenliği
  31. Hücresel Ağlar
  32. Spektrum ve Kuşaklar
  33. Hareketlilik ve Aktarma
  34. Adres Kiralama: DHCP
  35. Adresin Anatomisi
  36. Adres Tükenmesi ve IPv6
  37. Yönlendirici Mimarisi
  38. Kuyruk Yönetimi
  39. Cihaz Yapılandırma
  40. Yönlendirme Protokolleri
  41. Kontrol Düzlemi ve SDN
  42. Ağ İzleme ve Yönetimi
  43. Alanlar Arası Yönlendirme
  44. Adres Çevirisi
  45. Ara Kutular
  46. Tünelleme ve IPsec
  47. Güvenlik Duvarları
  48. Operatör ve Metro Ağları
  49. Bitten Sinyale
  50. Çoklama Teknikleri
  51. İletim Ortamları
  52. Kablo Sonlandırma
  53. Fiber Optik İletim
  54. Bakır Erişim Ağı: DSL
  55. Pasif Optik Ağlar
  56. Kablo Erişim Ağları
  57. Denizaltı Kabloları
  58. Veri Merkezi Ağları
  59. Kapsülleme Çözme
  60. Güvenilir Aktarım
  61. Tıkanıklık Denetimi
  62. Trafik Çözümleme
  63. Gecikme Bütçesi
  64. 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 bayt

Alanları 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-2A

Ethernet’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     dinamik

Listedeki 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