Ana içeriğe geç

Bölüm 33:Adres Kiralama: DHCP

8 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

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:

Dört mesaj, iki yayın
istemciDHCP sunucusuDHCPDISCOVERyayın · 0.0.0.0 → 255.255.255.255DHCPOFFERyiaddr = 192.168.1.42DHCPREQUESTyayın · reddedilenler de duysunDHCPACKkira süresi başladıilk iki adım atlanabiliyor: eski adresini hatırlayan istemci doğrudan üçüncüden başlıyor
Adresi olmayan makine herkese sesleniyor. İstemci sunucunun adresini bilmiyor, kendi adresi de yok. Kaynak alanına 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.
  1. Adresi olmayan makine herkese sesleniyor. İstemci sunucunun adresini bilmiyor, kendi adresi de yok. Kaynak alanına 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.
  2. Sunucu bir adres teklif ediyor. Havuzdan bir adres seçip yiaddr alanı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.
  3. 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ı.
  4. 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.

kodmesajne yapar
1DHCPDISCOVERistemci ağda sunucu arar
2DHCPOFFERsunucu bir adres teklif eder
3DHCPREQUESTistemci teklifi kabul eder
4DHCPDECLINEteklif edilen adres kullanımda çıktı
5DHCPACKkira onaylanır
6DHCPNAKsunucu isteği reddeder
7DHCPRELEASEistemci adresi geri bırakır
8DHCPINFORMadres 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.

numaraseçenektaşıdığı
1alt ağ maskesiağın sınırı
3yönlendiricivarsayılan geçidin adresi
6DNS sunucusuad çözecek sunucunun adresi
51kira süresikiranın ömrü
53mesaj türüdörtlünün hangi adımı
54sunucu kimliğiteklifi kimin verdiği
55parametre isteğiistemcinin 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.

Ev tipi kablosuz yönlendiricinin arka yüzü: açma-kapama düğmesi, güç girişi, WAN yazılı tek port ve onu izleyen 1’den 4’e numaralı dört LAN portu. Dört ayrı işin tek kasada birleştiği yüzey burası.

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