Bölüm 33:Adres Kiralama: DHCP
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
Bir önceki durakta hücreden hücreye geçtin ve bağlantın kopmadı. O bağlantının dayandığı adresi sana kimin verdiğini ise erteledim.
Adresi veren bir sunucu var. Verirken yalnızca adresi söylemiyor; ağdan çıkış kapısını da aynı cevaba koyuyor. Peki adresi olmayan bir makine o cevabı nasıl isteyebiliyor?
Adresi elle yazmaktan neden vazgeçildi?
Adres makineye iki yoldan geliyor: ya elle bir yapılandırma dosyasına yazıyorsun, ya da makine ağa katıldığı anda ağdaki bir sunucudan alıyor.
Elle yazmak tek satırlık bir iş de değil. Dört alanı birden doldurman gerekiyor: IP adresi, alt ağ maskesi, default gateway ve DNS sunucusu. Üçünü doğru girip birini yanlış girdiğinde makine yarım çalışıyor — arızası da en can sıkıcı türden, çünkü bazı şeyler yürüyor. DHCP bu dördünü tek cevapta dağıtır.
Dinamik adreslemenin üç tarihsel uygulaması var: RARP, BOOTP ve DHCP. Sonuncusu BOOTP’nin gelişmiş hâli ve paket biçimini ondan devraldı. BOOTP diski olmayan makineler için tasarlanmıştı ve sunucuda her makine için önceden bir kayıt açmayı şart koşuyordu. DHCP o şartı kaldırdı. Yerine yeniden kullanılabilir adres dağıtımını ve ek yapılandırma seçeneklerini koydu. Standardı 1997 yılında yayımlanan RFC 2131’dir ve o belge kendinden önceki tanımı geçersiz kılar.
Dağıtılan adresler bir adres havuzundan gelir. Havuz sunucuda elle tanımlanır ve ağın tamamı kadar geniş olmak zorunda değildir. Örnek bir ev ağı düşün: 192.168.42.0/24 bloğunda makinelere verilebilecek 254 adres var. Havuza .100 ile .199 arasını verirsen 100 adres dağıtılabilir hâle gelir, yani kullanılabilir adreslerin %39,4’ü. Kalanı statik yapılandırmaya kalır.
Bir de zincirin ucu var. Adres dağıtan sunucunun kendi adresi statiktir, çünkü adres dağıtan makinenin adresini kimse dağıtamaz.
Dört mesaj neden dört?
Kiralama dört mesajdır: DHCPDISCOVER, DHCPOFFER, DHCPREQUEST ve DHCPACK. İki taraf da iki kez konuşur.
İlk mesaj bir yayındır, çünkü istemci sunucunun adresini bilmez. Hedef IP adresi 255.255.255.255 olur, hedef MAC adresi FF-FF-FF-FF-FF-FF. En baştaki adres hiçbir makineye verilmez ve anlamı “bu ağdaki herkes”tir.
İstemci kendi adres alanına 0.0.0.0 yazar ve adresini bilmediğini paketin içinde açıkça ilan eder. İstekle cevabı eşleştiren şey bu yüzden adres olamaz. Eşleştirmeyi 4 baytlık rastgele bir işlem kimliği yapar, alanın adı xid.
Taşıma tarafında DHCP, UDP kullanır. İstemciden sunucuya giden mesajlar 67 numaralı porta, sunucudan istemciye dönenler 68 numaralı porta gider. İki ayrı port, cevabın da yayın olarak dönebilmesi içindir.
İkinci mesajda sunucu havuzdan bir adres seçer ve teklif eder. Teklifin içine kendi kimliğini de koyar. Sunucunun verdiği adresi taşıyan alanın adı yiaddr, açılımı “senin adresin” ve genişliği 4 bayt.
Üçüncü mesaj kabuldür ve o da yayındır. Aynı ağda teklif veren başka sunucular varsa reddedildiklerini duymak zorundadır. Dördüncü mesaj geldikten sonra adres kiralanmış olur.
Dört mesajın sırasını ve her birinin ne taşıdığını görelim:
0.0.0.0, hedef alanına 255.255.255.255 yazıyor. İki uç durum aynı pakette: kimliği olmayan biri, adresi olmayan bir alıcıya sesleniyor.- Adresi olmayan makine herkese sesleniyor. İstemci sunucunun adresini bilmiyor, kendi adresi de yok. Kaynak alanına
0.0.0.0, hedef alanına255.255.255.255yazıyor. İki uç durum aynı pakette: kimliği olmayan biri, adresi olmayan bir alıcıya sesleniyor. - Sunucu bir adres teklif ediyor. Havuzdan bir adres seçip
yiaddralanına — açılımı "senin adresin" — yazıyor ve kendi kimliğini de ekliyor. Bu henüz bir kira değil, bir teklif; istemci başka sunuculardan da teklif almış olabilir. - Kabul de yayın gidiyor, ve sebebi var. İstemci hangi teklifi kabul ettiğini yayınla ilan ediyor. Aynı ağdaki öteki sunucuların, ayırdıkları adresi havuza geri koyabilmek için reddedildiklerini **duymaları** gerekiyor. Tekli gönderim bu haberi taşıyamazdı.
- Onay geliyor, kira başlıyor. Dördüncü mesajla adres artık istemcinin. Yanında maske, varsayılan geçit, ad sunucuları ve kira süresi de geliyor — hepsi numaralı seçenekler hâlinde.
İlk iki adım her zaman gerekmez. İstemci önceki adresini hatırlıyor ve onu tekrar kullanmak istiyorsa dörtlünün başını atlayıp doğrudan DHCPREQUEST’ten başlar. İki mesaj kısalır.
Mesajın türü başlıkta durmaz. Tanımlı 8 tür, 53 numaralı seçenekte tek bayt olarak taşınır.
| kod | mesaj | ne yapar |
|---|---|---|
| 1 | DHCPDISCOVER | istemci ağda sunucu arar |
| 2 | DHCPOFFER | sunucu bir adres teklif eder |
| 3 | DHCPREQUEST | istemci teklifi kabul eder |
| 4 | DHCPDECLINE | teklif edilen adres kullanımda çıktı |
| 5 | DHCPACK | kira onaylanır |
| 6 | DHCPNAK | sunucu isteği reddeder |
| 7 | DHCPRELEASE | istemci adresi geri bırakır |
| 8 | DHCPINFORM | adres var, yalnızca ayar isteniyor |
Reddin anlamı dardır. İstemcinin elindeki adres yanlıştır, örneğin başka bir alt ağa taşınmıştır, ya da kirası bitmiştir.
Seçenekler yalnızca tür taşımaz. Her yapılandırma parçası numaralı bir seçenektir, ve istemci istediği numaraları bir liste hâlinde sayar.
| numara | seçenek | taşıdığı |
|---|---|---|
| 1 | alt ağ maskesi | ağın sınırı |
| 3 | yönlendirici | varsayılan geçidin adresi |
| 6 | DNS sunucusu | ad çözecek sunucunun adresi |
| 51 | kira süresi | kiranın ömrü |
| 53 | mesaj türü | dörtlünün hangi adımı |
| 54 | sunucu kimliği | teklifi kimin verdiği |
| 55 | parametre isteği | istemcinin istediği numaralar |
Sıralamanın da bir kuralı var. Cevapta hem maske hem geçit varsa maske önce gelmek zorundadır. Geçit seçeneği tercih sırasına dizilmiş bir yönlendirici listesi taşıyabilir; ev ağında liste tek satırlıktır.
DerinleşmeHer mesajda boş giden 192 bayt neden hâlâ orada?
DHCP mesajının seçeneklerden önceki sabit kısmı 236 bayttır ve bu biçim BOOTP’den devralındı. Alanların çoğu o günün sorunlarına göre ölçüldü, bugünün sorunlarına göre değil.
En görünür artık, istemcinin MAC adresini taşıyan alan. Ona 16 bayt ayrılmıştır, oysa bir Ethernet adresi 6 bayttır. Her mesajda 10 bayt boş gider. Alan geniş tutulmuştu, çünkü BOOTP yazıldığında bağ katmanı adreslerinin hepsi altı sekizli değildi.
İkinci artık daha büyük: sunucu adı alanı 64 bayt, açılış dosyası alanı 128 bayttır. İkisi birlikte 192 bayt tutar ve sabit başlığın %81,4’üdür. İkisi de disksiz açılış içindir; hangi sunucudan hangi dosyanın çekileceğini yazarlar. Evdeki bir telefon için o alanların tamamı baştan sona boştur.
Boyutun bir de tavan hikâyesi var. Sabit kısmın üstüne asgari 312 baytlık seçenek alanı gelince 548 bayt eder. 8 baytlık UDP başlığı ile 20 baytlık IP başlığı da eklenince toplam tam 576 bayta oturur. O sayı keyfi seçilmedi. Bir IP makinesinin kabul etmek zorunda olduğu en küçük datagram odur, yani mesaj en kısıtlı makinede bile parçalanmadan geçecek biçimde ölçülmüştür.
Adres neden kiralık?
Adres kalıcı değildir. Kiralanır. Kira yenilenebilir, cihaz kapanınca adres havuza döner. “Kira” burada bir benzetme de sayılmaz; standardın kendi terimidir.
Kira süresi 51 numaralı seçenekte 32 bitlik bir sayı olarak gelir. Diyelim ki ev yönlendiricin 24 saatlik kira veriyor. İstemci sürenin bitmesini beklemez, iki zamanlayıcı tutar. İlki sürenin %50’sinde, ikincisi %87,5’inde dolar.
İlk zamanlayıcı dolunca istemci yenileme durumuna geçer ve adresi veren sunucuya tek hedefli bir istek yollar. İkincisi dolunca yeniden bağlanma durumuna geçer ve artık herhangi bir sunucuya yayın yapar. İki kademenin sebebi basit: adresi veren sunucu ölmüş olabilir.
Örneğimizde ilk zamanlayıcı 12. saatte, ikincisi 21. saatte dolar. Geriye üç saatlik bir tampon kalır.
Zamanlayıcılar tam bu değerlerde de kurulmaz. Standart, sabit değerin etrafına rastgele bir sapma eklenmesini ister. Sebebi ölçek: aynı anda kiralanan bütün adresler aynı anda yenilenmek isterse sunucu tek seferde boğulur. Sapma bunu dağıtır.
Aynı kaygı açılışta da var. İstemci ilk mesajı göndermeden önce 1 ile 10 saniye arasında rastgele bekler. Elektrik geldiğinde evdeki bütün cihazların aynı saniyede konuşmasını engelleyen şey bu bekleme.
Cevap gelmezse istemci pes etmez. Yeniden gönderim gecikmesi 4 saniyeden başlar, her denemede ikiye katlanır ve 64 saniyede tavan yapar. Beşinci denemeye kadar geçen toplam bekleme 60 saniyedir.
Adresin gerçekten boş olduğunu iki taraf da ayrı ayrı sınar. Sunucu teklif edeceği adresi bir ICMP yankı isteğiyle yoklayabilir, çünkü havuzda boş görünen adres ağda kullanılıyor olabilir. İstemci de teklif edilen adres için bir ARP isteği yayınlar; cevap gelirse adres kullanımdadır ve reddini göndermek zorundadır.
Adres kesinleşince istemcinin son bir işi kalır. Bedava ARP komşuların eski kayıtlarını temizletiyordu; makine yeni adresini duyurmak için tam onu yapar.
Sunucunun da istemciye verdiği iki söz vardır. Kira boyunca adresi başkasına vermez, ve aynı istemciye her seferinde aynı adresi vermeye çalışır. İkincisi bir garanti değil, bir gayrettir.
Evdeki kutu kaç iş yapıyor?
Evdeki kutu tek cihaz gibi görünür. İçinde dört ayrı iş vardır.
Modem, kablo ya da DSL hattını sayısal veriye çevirir. Yönlendirici paketleri ağlar arasında iletir; güvenlik duvarı ve adres çevirisi de onun tarafındadır. Anahtar kablolu portları birbirine bağlar. Access point kablosuz tarafı taşır. Dördünü tek kasada birleştirmek bir üretim tercihidir, protokol zorunluluğu değil.

Katman karşılıkları da farklıdır. Yönlendirici ağ katmanında, anahtar bağ katmanında, ağ kartı ile tekrarlayıcı fiziksel katmanda çalışır. Ev kutusu üç katmanda birden iş görür. Yıldız topolojinin merkezine bir cihaz konuyordu; evdeki kutu tam o merkezde durur. İlişkilendirme tek bir access point’le kuruluyordu; o access point de aynı kasanın içindedir.
Adres dağıtan sunucu da genelde ayrı bir makine değildir. Yönlendiricinin içinde durur ve yönlendiricinin bağlı olduğu bütün alt ağlara hizmet eder.
Geçit görevini de yönlendirici üstlenir. Default gateway, bir bilgisayarın paketlerini başka bir alt ağa iletmek için kullandığı adrestir. Makinelerin de yönlendirme tablosu vardır ama ağa bağlı tek yönlendirici varsa seçilecek bir şey yoktur, ve ev ağının hâli tam budur.
Tablonun ilk satırı varsayılan yoldur: hedefi eşleşmeyen bütün paketler geçidin adresine iletilir. Windows’ta bu tabloyu route print ile görürsün. Öteki satırların nereden geldiğini yönlendiricinin içine indiğimizde açacağım.
Geçit tanımlanmadığında belirti nettir. Makineler birbirine ulaşır, ağın dışıyla iletişim başarısız olur. Geçide bloğun ilk kullanılabilir adresini vermek zorunlu değil ama yaygın bir alışkanlıktır. Örnek ağımızda geçit 192.168.42.1 adresinde oturur.
IANA üç bloğu özel adres bloğu olarak yerel ağlara ayırmıştır: 10/8, 172.16/12 ve 192.168/16. Bu adresler internette yönlendirilmez. Dışarı çıkarken bu adreslerin nasıl geçerli birer adrese çevrildiğini burada bırakıyorum; çeviri tablosuyla birlikte açacağım.
Hiçbir sunucu cevap vermezse makine boş kalmaz. 169.254.0.0/16 bloğundan kendine bir adres uydurur; bunun adı bağ-yerel adresleme, yaygın adı APIPA. Ekranda o adresi görmek, kiralamanın hiç gerçekleşmediğini söylemenin başka bir yoludur.
Kiranın kimden alındığını kendi makinende görebilirsin. Windows’ta ipconfig /all çıktısı IP adresini, MAC adresini, DNS sunucusunu ve adresi veren sunucuyu birlikte listeler. Yönlendirici tarafında show dhcp lease kiralanmış adreslerin tablosunu döker. Yakalama filtresi yazmayı öğrenmiştin; aynı araç bu dört mesajı hâlâ eski adıyla, bootp diye ayırır.
Özet
Peki, ne öğrendik?
- Adres iki yoldan gelir: ya elle yazılır ya da ağa katılma anında bir sunucudan alınır, ve ikinci yol dört alanı birden doldurur.
- Kiralama dört mesajdır: istemci yayınla arar, sunucu teklif eder, istemci yine yayınla kabul eder, sunucu onaylar.
- Tür seçenekte taşınır: mesajın hangi adım olduğunu 53 numaralı seçenekteki tek bayt söyler, başlıktaki ayrı bir alan değil.
- Adres kiralıktır: istemci ilk zamanlayıcıda kendi sunucusuna, ikincisinde herhangi bir sunucuya dönerek kirayı tazeler.
- Ev kutusu dört iştir: modem, yönlendirici, anahtar ve access point aynı kasada birleşmiştir, ve default gateway olarak yazılan adres o kasanındır.
Artık makinen adresi nereden aldığını ve dışarı çıkarken hangi kapıya yöneleceğini biliyor. Geriye tek bir soru kalıyor. Paketin hedefi elinde; makinen o hedefin bu ağda olmadığına nasıl karar verdi?
34. bölüme devam et: Adresin Anatomisi