Ders 06 / 18
ARP
IP adresinden donanım adresine çözümleme, istek–yanıt döngüsü, önbellek davranışı, vekil ve ücretsiz kullanım biçimleri ile adres zehirlenmesi.
İçindekiler
Önceki ders bir çerçevenin hedef alanına donanım adresi yazıldığını gösterdi. Oysa
uygulamalar hedefi IP adresiyle belirtir: örnek ağdaki istemci 198.51.100.20 adresine
gitmek ister, geçidinin 192.168.10.193 olduğunu bilir, ancak bu adreslerin hiçbirinin
donanım karşılığını bilmez.
İki adres uzayı arasında bir köprü gerekir. Bu dersin sorusu, o köprünün nasıl kurulduğu ve kurulurken hangi varsayımların yapıldığıdır.
İki Adres Uzayı
IP adresi ile MAC adresi arasında hesaplanabilir bir ilişki yoktur. Biri ağ yöneticisinin veya bir kiralama hizmetinin atadığı mantıksal bir addır; diğeri arayüzün donanımına bağlı fiziksel bir addır. Aynı makine ağdan ağa taşındığında IP adresi değişir, MAC adresi değişmez.
Eşleme hesaplanamadığına göre sorulmalıdır. ARP (Address Resolution Protocol) bu soruyu soran protokoldür. Yöntem doğrudandır: yerel ağın tamamına “şu IP adresi kimde?” diye yayın yapılır ve adresin sahibi yanıt verir.
ARP, IP’nin içinde taşınmaz; Ethernet çerçevesinde 0x0806 tür değeriyle doğrudan
taşınır. Bu, önceki konuda söylenen “bazı protokoller iki katmanı birden ilgilendirir”
saptamasının somut örneğidir: ARP mesajı bir ağ katmanı adresi taşır, ama ağ katmanı
başlığı kullanmaz.
Mesajın Alanları
ARP mesajı 28 bayttır ve dokuz alandan oluşur.
| Alan | Boyut | Örnek değer |
|---|---|---|
| Donanım türü | 2 bayt | 1 (Ethernet) |
| Protokol türü | 2 bayt | 0x0800 (IPv4) |
| Donanım adresi uzunluğu | 1 bayt | 6 |
| Protokol adresi uzunluğu | 1 bayt | 4 |
| İşlem | 2 bayt | 1 istek, 2 yanıt |
| Gönderen donanım adresi | 6 bayt | Soruyu soranın MAC adresi |
| Gönderen protokol adresi | 4 bayt | Soruyu soranın IP adresi |
| Hedef donanım adresi | 6 bayt | İstekte sıfır, yanıtta doludur |
| Hedef protokol adresi | 4 bayt | Sorulan IP adresi |
Uzunluk alanlarının varlığı, protokolün Ethernet ve IPv4 ile sınırlı olmadığını gösterir: biçim, farklı adres genişliklerine sahip teknolojiler için tasarlanmıştır.
Aşağıdaki program, örnek ağdaki istemcinin geçidini sorduğu isteği ve gelen yanıtı kurar.
import ipaddress import struct BICIM = "!HHBBH6s4s6s4s" def mac_paketle(mac: str) -> bytes: return bytes(int(x, 16) for x in mac.split(":")) def mac_yaz(ham: bytes) -> str: return ":".join(f"{b:02x}" for b in ham) def arp_mesaji(islem: int, gonderen_mac: str, gonderen_ip: str, hedef_mac: str, hedef_ip: str) -> bytes: return struct.pack( BICIM, 1, # donanım türü: Ethernet 0x0800, # protokol türü: IPv4 6, # donanım adresi uzunluğu 4, # protokol adresi uzunluğu islem, # 1 = istek, 2 = yanıt mac_paketle(gonderen_mac), ipaddress.ip_address(gonderen_ip).packed, mac_paketle(hedef_mac), ipaddress.ip_address(hedef_ip).packed, ) def arp_yaz(ham: bytes) -> None: a = struct.unpack(BICIM, ham) islem = {1: "istek", 2: "yanıt"}[a[4]] print(f"işlem={islem:5s} gönderen={mac_yaz(a[5])} / {ipaddress.ip_address(a[6])}" f" hedef={mac_yaz(a[7])} / {ipaddress.ip_address(a[8])}") istek = arp_mesaji(1, "00:00:5e:00:53:01", "192.168.10.196", "00:00:00:00:00:00", "192.168.10.193") yanit = arp_mesaji(2, "00:00:5e:00:53:00", "192.168.10.193", "00:00:5e:00:53:01", "192.168.10.196") print("mesaj boyu:", len(istek), "bayt") print(istek.hex()) arp_yaz(istek) print(yanit.hex()) arp_yaz(yanit)
Çıktı:
mesaj boyu: 28 bayt 000108000604000100005e005301c0a80ac4000000000000c0a80ac1 işlem=istek gönderen=00:00:5e:00:53:01 / 192.168.10.196 hedef=00:00:00:00:00:00 / 192.168.10.193 000108000604000200005e005300c0a80ac100005e005301c0a80ac4 işlem=yanıt gönderen=00:00:5e:00:53:00 / 192.168.10.193 hedef=00:00:5e:00:53:01 / 192.168.10.196
İstek mesajındaki hedef donanım adresi alanı sıfırdır — sorunun kendisi budur. Yanıtta bu alan dolar ve gönderen ile hedef rolleri yer değiştirir.
İstek ve Yanıtın Taşınması
Mesajın kendisi kadar, onu taşıyan çerçevenin adresleri de önemlidir:
| ARP isteği | ARP yanıtı | |
|---|---|---|
| Çerçeve kaynak adresi | 00:00:5e:00:53:01 |
00:00:5e:00:53:00 |
| Çerçeve hedef adresi | ff:ff:ff:ff:ff:ff |
00:00:5e:00:53:01 |
| Ulaştığı cihazlar | Yayın alanının tamamı | Yalnız soruyu soran |
İstek yayınla gider, çünkü sorulan adresin hangi cihazda olduğu bilinmemektedir. Yanıt ise tekil adrese gider: yanıtlayan, isteğin içindeki gönderen alanlarından soru sahibinin her iki adresini de öğrenmiştir.
Bu asimetrinin bir yan etkisi vardır: yayın alanındaki her cihaz isteği görür ve isterse gönderenin eşlemesini kendi önbelleğine yazar. Bu davranış, ilerideki bölümde ele alınacak güvenlik sorununun temelidir.
Yerel mi Uzak mı
Bir paket gönderilmeden önce verilen ilk karar, hedefin aynı ağda olup olmadığıdır. Karar, hedef adresin kendi ağ maskesiyle karşılaştırılmasıyla verilir; maske aritmetiği Alt Ağlara Bölme dersinde kurulacaktır. Kararın sonucu, hangi adresin çözümleneceğini belirler:
| Hedef | Aynı ağda mı | ARP ile sorulan adres | Çerçevenin hedef MAC adresi |
|---|---|---|---|
192.168.10.200 |
Evet | 192.168.10.200 |
Hedefin kendi MAC adresi |
198.51.100.20 |
Hayır | 192.168.10.193 (geçit) |
Geçidin MAC adresi |
İkinci satır, ağ mekaniğinin en sık yanlış anlaşılan noktasıdır. Uzak bir hedefe giden pakette IP hedef adresi uzak sunucudur, MAC hedef adresi geçittir. İki adres farklı cihazları gösterir ve bu bir tutarsızlık değildir: IP adresi uçtan uca hedefi, MAC adresi bir sonraki sekmeyi belirtir.
Uzak sunucunun MAC adresi hiçbir zaman sorulmaz. Sorulamaz da: ARP isteği yayınla gider ve yayın yönlendiriciyi geçmez.
ARP Önbelleği
Her çözümleme için yayın yapmak pahalı olacağından, sonuçlar bir önbellekte tutulur. Örnek ağdaki istemcinin önbelleği, geçidiyle konuştuktan ve aynı bölümdeki bir yazıcıya eriştikten sonra şu içeriğe sahiptir:
| IP adresi | MAC adresi | Durum |
|---|---|---|
192.168.10.193 |
00:00:5e:00:53:00 |
Ulaşılabilir |
192.168.10.210 |
00:00:5e:00:53:04 |
Ulaşılabilir |
192.168.10.205 |
— | Eksik (yanıt beklenmekte) |
Girdiler kalıcı değildir. Bir süre kullanılmayan girdi silinir; silinme, bir cihazın ağ kartı değiştiğinde veya adres başka bir cihaza geçtiğinde eşlemenin kendini düzeltmesini sağlar. Girdi silindikten sonraki ilk gönderim yeniden çözümleme başlatır ve o gönderim biraz gecikir.
Önbellek durumunu okumak için kullanılan komutlar ve çıktı biçimleri işletim sistemine göre değişir. Değişmeyen içerik, yukarıdaki tabloda gösterilen üç bilgidir: protokol adresi, donanım adresi ve girdinin durumu.
Ücretsiz ve Vekil Kullanım
Ücretsiz ARP (gratuitous ARP), bir cihazın kendi adresini kimse sormadan duyurmasıdır: hedef protokol adresi kendi adresi olan bir istek yayınlanır. Üç işe yarar. Adres çakışmasını sezdirir — yanıt gelirse aynı adres başka bir cihazdadır. Yedek bir cihaz devralma sırasında adresi üstlendiğini duyurur ve anahtarların tablolarını tazeler. Bir arayüz açıldığında komşuların eski eşlemelerini günceller.
Vekil ARP (proxy ARP), bir yönlendiricinin kendisine ait olmayan bir adres için yanıt vermesidir. Sorulan adres uzaktaysa yönlendirici kendi MAC adresini verir ve trafiği üstlenir. Ağ maskesi hatalı yapılandırılmış istemcileri çalışır durumda tutar; ancak sorunun kendisini gizlediği ve önbelleklerde birbirinin aynı çok sayıda girdi ürettiği için tanıyı zorlaştırır.
ARP Zehirlenmesi
ARP’nin tasarımında kimlik doğrulama yoktur. Yanıtı kimin gönderdiği denetlenmez; hatta istenmemiş bir yanıt bile birçok gerçekleştirimde önbelleğe yazılır. Bunun sonucu ARP zehirlenmesi (ARP poisoning) adı verilen saldırıdır.
Aynı yayın alanındaki bir cihaz, 192.168.10.193 adresinin kendi MAC adresinde olduğunu
bildiren yanıtlar gönderirse, komşularının önbellekleri bozulur ve geçide gitmesi gereken
trafik saldırgana yönlenir. Saldırgan trafiği geçide ileterek bağlantıyı ayakta tutabilir;
bu durumda kullanıcı hiçbir kesinti görmez.
Açığın kaynağı bir gerçekleştirim hatası değil, protokolün tasarım varsayımıdır: aynı yerel ağdaki cihazlar güvenilir kabul edilmiştir. Karşı önlemler bu yüzden ARP’nin dışındadır:
- Yayın alanlarını küçültmek ve güvenilmeyen cihazları ayrı ağlara koymak.
- Anahtar üzerinde ARP denetimi: bir bağlantı noktasından yalnızca o cihaza atanmış adreslerin duyurulmasına izin vermek.
- Kritik eşlemeleri sabitlemek.
- Uçtan uca şifreleme ve kimlik doğrulama kullanmak: trafiği dinleyen bir aracı, içeriği okuyamaz veya değiştiremez.
Son madde, uçtan uca ilkesinin bir uygulamasıdır: ağın içindeki bir katmanın güvenlik sözü veremediği durumda, sözün uçlarda verilmesi gerekir.
IPv6’daki Karşılığı
IPv6, ARP’yi kullanmaz. Karşılık gelen işlev komşu keşfi (neighbor discovery) adıyla ICMPv6’nın içine taşınmıştır ve yayın yerine çok noktaya gönderim kullanır: soru, yalnızca sorulan adresle ilgili çok noktaya gönderim grubuna iletilir. Bu, yayın alanındaki her cihazın her soruyu işlemesini önler. Komşu keşfi ayrıca adres çakışması sınaması ve yönlendirici duyurusu gibi işlevleri de üstlenir; bunlar IPv6 dersinde ele alınacaktır.
Özet
- IP adresi ile MAC adresi arasında hesaplanabilir bir ilişki yoktur; eşleme ARP ile sorulur.
- ARP isteği yayınla gider, yanıt tekil adrese döner; mesaj 28 bayttır ve IP başlığı kullanmaz.
- Hedef aynı ağdaysa hedefin kendi adresi, değilse geçidin adresi çözümlenir; uzak hedefe giden pakette IP hedefi sunucu, MAC hedefi geçittir.
- Çözümleme sonuçları süreli bir önbellekte tutulur; süre dolduğunda eşleme kendini düzeltir.
- Ücretsiz ARP adres duyurusu ve çakışma sınaması için, vekil ARP başka bir ağın adresini üstlenmek için kullanılır.
- ARP’de kimlik doğrulama yoktur; zehirlenmeye karşı önlemler yayın alanını küçültmek, anahtar düzeyinde denetim ve uçtan uca şifrelemedir.
Sonraki Adım
Buraya kadar IP adresleri bir etiket gibi kullanıldı: 192.168.10.196 yazıldı, anlamı
sorgulanmadı. Oysa bu sayının içinde bir yapı vardır — bir bölümü ağı, bir bölümü o ağdaki
düğümü gösterir. Sonraki ders IPv4 adresinin bit yapısını, ağ ile düğüm bölümlerinin
ayrımını ve özel amaçlar için ayrılmış blokları ele alacak.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.