Ders 04 / 12
IP Adresi Kavramı
Adresin sayısal yapısı, ağ ve konak bölümlerine ayrılmasının yönlendirme tablolarını nasıl küçülttüğü, genel ve özel adres ayrımı.
İçindekiler
Önceki ders, otonom sistemlerin birbirlerine tek tek makineleri değil adres bloklarını duyurduğunu söyledi. Bu, adreslerin rastgele dağıtılmış etiketler olmadığını ima eder; blok halinde konuşulabiliyorsa adreslerin bir yapısı olmalıdır.
Bu ders o yapıyı tanımlar. Sorulacak soru şudur: bir adres neye benzer ve bu biçim seçilirken hangi problem çözülmeye çalışılmıştır?
Adres Bir Sayıdır
IP adresi, ağa bağlı bir arayüzü belirleyen sabit uzunluklu bir sayıdır. IPv4 düzeninde bu sayı 32 bittir.
Alışılmış 192.0.2.10 gösterimi, o 32 bitin sekizer bitlik dört parçaya bölünüp her
parçanın onluk tabanda yazılmasından ibarettir. Gösterim insan içindir; makine tek bir
sayı görür.
import ipaddress adres = ipaddress.ip_address("192.0.2.10") print(adres.version) print(int(adres)) print(format(int(adres), "032b"))
4 3221225994 11000000000000000000001000001010
Bit dizisinin ilk sekizlisi 11000000 ikilik tabanda 192, ikinci sekizlisi 00000000
sıfır, üçüncüsü 00000010 iki, sonuncusu 00001010 ondur. Nokta ayracı bit dizisinde
yoktur; yalnızca yazımda vardır.
Her parçanın sekiz bit olması, alabileceği değerleri 0–255 aralığıyla sınırlar. 192.0.2.300
gibi bir yazım geçersizdir çünkü 300 sekiz bite sığmaz.
Adresin baytlarının ağ üzerinde hangi sırayla yazılacağı ayrıca kararlaştırılmıştır. Bilgisayarlar Nasıl Çalışır kursundaki bayt sırası dersinde bu düzen ağ bayt sırası adıyla geçmişti: başlıklardaki çok baytlı sayılar büyük uçlu yazılır. Farklı bayt sırası kullanan makinelerin aynı adresi aynı biçimde okuyabilmesi bu anlaşmaya dayanır.
32 bit toplam , yani yaklaşık 4,3 milyar farklı değer verir. Bu sayı, düzen
tasarlandığında bol görünmüştür; sonradan yetmemiştir. IPv6 düzeni adresi 128 bite
çıkararak bu sınırı kaldırır ve 2001:db8::1 gibi onaltılık gruplarla yazılır. İki düzen
arasındaki teknik ayrıntılar Ağ Modelleri ve Protokoller kursunun konusudur.
Adres Neyi Adresler
Adresin bir makineyi değil, bir ağ arayüzünü belirlediğine dikkat edilmelidir. Birden çok arayüzü olan bir makinenin birden çok adresi olur; bir yönlendiricinin her bacağı ayrı bir adres taşır.
Adres, önceki derste tanımlanan bağlantı noktasıyla birlikte çalışır. Adres hangi arayüze
gidileceğini, bağlantı noktası o makinedeki hangi programa teslim edileceğini söyler.
ornek.test sunucusuna ulaşmak için ikisi de gerekir.
Hiyerarşi ve Yönlendirmenin Ölçeklenmesi
Adreslerin rastgele dağıtılabileceğini varsayalım. Bu durumda her yönlendiricinin, her hedef adres için hangi yöne gideceğini ayrı ayrı bilmesi gerekirdi. Tablo, kullanımdaki adres sayısı kadar satır taşırdı ve her yeni makine tüm ağlara duyurulurdu.
Çözüm, adresi ikiye bölmektir: soldaki bitler ağı, sağdaki bitler o ağ içindeki konağı belirtir. Bölmenin nerede olduğu, adresin yanında yazılan önek uzunluğuyla belirtilir.
import ipaddress ag = ipaddress.ip_network("192.0.2.0/24") print(ag.network_address) print(ag.netmask) print(ag.num_addresses) print(ipaddress.ip_address("192.0.2.10") in ag) print(ipaddress.ip_address("198.51.100.10") in ag)
192.0.2.0 255.255.255.0 256 True False
/24 yazımı, soldaki 24 bitin ağ bölümü olduğunu söyler. Geriye konak için 8 bit kalır ve
bu blok adres içerir. 192.0.2.10 bu bloğun içindedir; 198.51.100.10
değildir.
255.255.255.0 değeri aynı bilginin maske biçimindeki yazılışıdır: bir olan bitler ağ
bölümünü, sıfır olan bitler konak bölümünü işaretler.
Kazanç şudur: yönlendirici artık 256 adres için tek bir satır tutar. 192.0.2.0/24 bloğuna
giden her paket aynı yöne gider; içindeki tek tek konaklar dışarıdan görünmez. Blok ne
kadar büyükse tablodaki tasarruf o kadar büyüktür.
Bu, bir adres verildiğinde onun hangi ağa ait olduğunun adresin kendisinden okunabilmesi demektir. Adres yalnızca bir kimlik değil, aynı zamanda bir konum bildirimidir. Bir kuruluş adres bloğunu değiştirdiğinde makinelerin adresleri de değişir; adres, makinenin taşınabilir bir özelliği değildir.
Bloklar iç içe geçebilir ve bir yönlendirici birden çok eşleşen satır bulabilir. Bu durumda en uzun önek kazanır: en ayrıntılı bilgiyi veren satır seçilir. Böylece genel bir blok tek satırla özetlenirken, o bloğun içindeki bir bölüm ayrı bir satırla farklı yöne gönderilebilir. Önek hesabının ayrıntısı ve alt ağ tasarımı Ağ Modelleri ve Protokoller kursunda ele alınır.
Genel ve Özel Adresler
Adres alanının bir bölümü, internet üzerinde yönlendirilmemek üzere ayrılmıştır. Bu özel adresler, yalnızca yerel bir ağın içinde anlam taşır.
Üç blok bu amaçla ayrılmıştır:
import ipaddress OZEL_BLOKLAR = [ ipaddress.ip_network("10.0.0.0/8"), ipaddress.ip_network("172.16.0.0/12"), ipaddress.ip_network("192.168.0.0/16"), ] for metin in ["10.0.0.5", "172.16.3.1", "192.168.1.1", "192.0.2.10"]: a = ipaddress.ip_address(metin) ozel = any(a in blok for blok in OZEL_BLOKLAR) print(f"{metin:<14} ozel_blokta={ozel}")
10.0.0.5 ozel_blokta=True 172.16.3.1 ozel_blokta=True 192.168.1.1 ozel_blokta=True 192.0.2.10 ozel_blokta=False
Özel adreslerin tanımlayıcı özelliği benzersiz olmamalarıdır. Sayısız yerel ağda aynı
anda 192.168.1.1 adresli bir makine bulunur ve bu bir çakışma değildir, çünkü bu adres
kendi ağının dışında hiçbir anlam taşımaz. Bir yönlendirici, hedefi özel bir adres olan
paketi internete iletmez.
Bunun doğrudan sonucu, özel adresli bir makinenin dışarıdan doğrudan erişilebilir olmamasıdır. Böyle bir makine dışarıya bağlantı başlatabilir; çıkışta ağ sınırındaki düzenek, paketin kaynak adresini kendi genel adresiyle değiştirir ve dönen yanıtı doğru iç makineye geri çevirir. Bu dönüştürme işlemi Linux Ağ Yönetimi ve Sorun Giderme kursunun adres dönüştürme dersinde ve Ağ Modelleri ve Protokoller kursunda ayrıntılandırılır.
Bu, önceki derste kurulan istemci–sunucu asimetrisiyle örtüşür: istemci olmak için erişilebilir bir adres gerekmez, sunucu olmak için gerekir. Bir sunucunun genel bir adrese ihtiyaç duyması, barındırma konusunun teknik temelidir.
Bir blok daha ayrıdır: 127.0.0.0/8, makinenin kendisini gösteren geri döngü
adreslerini içerir. Bu adrese gönderilen paketler ağ arayüzüne hiç çıkmaz. Önceki dersteki
sunucu 127.0.0.1 üzerinde dinlediği için yalnızca aynı makineden erişilebilirdi.
Bu kursun örneklerinde 192.0.2.0/24 ve 198.51.100.0/24 blokları kullanılır. Bu bloklar
belgeleme için ayrılmıştır; gerçek bir konağı göstermezler ve bu yüzden örneklerde
kullanılmaları güvenlidir.
Adres Nereden Gelir
Bir makine adresini iki yoldan alır. Elle yapılandırma, adresin bir insan tarafından girilmesidir; sunucular gibi adresi değişmemesi gereken makinelerde kullanılır. Otomatik atama, makinenin ağa katıldığında yerel bir hizmetten adres istemesidir; bu adres kiralıktır ve süresi dolduğunda yenilenir.
İkinci yolun sonucu, istemci makinelerin adreslerinin kalıcı olmamasıdır. Aynı makine farklı ağlarda farklı adres alır. Sunucunun adresinin kararlı, istemcinin adresinin geçici olması, bu iki atama yönteminin doğal ayrımıdır.
Genel adres blokları kuruluşlara doğrudan verilmez; önceki derste anılan bölgesel kayıt düzeni içinde tahsis edilir ve erişim sağlayıcılar aracılığıyla dağıtılır. Bir adres bloğu sahiplenilmez, belirli koşullarla tahsis edilir.
Özet
- IP adresi, bir ağ arayüzünü belirleyen sabit uzunluklu bir sayıdır; noktalı gösterim yalnızca yazım kolaylığıdır.
- Adres, ağ ve konak bölümlerine ayrılır; bölme noktası önek uzunluğuyla veya eşdeğer maskeyle belirtilir.
- Hiyerarşi, yönlendiricilerin tek tek konaklar yerine blokları tablolamasını sağlar; çakışan bloklarda en uzun önek seçilir.
- Adres bir konum bildirimidir; kuruluş bloğu değişince makinelerin adresleri de değişir.
- Özel adresler benzersiz değildir ve internete yönlendirilmez; bu tür bir adresli makine bağlantı başlatabilir ama dışarıdan erişilemez.
- Sunucular kararlı ve elle yapılandırılmış adres kullanır; istemciler otomatik atanan geçici adreslerle çalışabilir.
Sonraki Adım
Sunucunun bir adresi olduğu ve o adresin kararlı tutulduğu kuruldu. Buna karşın adres
satırına bir sayı yazmadınız; ornek.test yazdınız. İnsanlar sayıları anımsamaz ve bir
kuruluş sunucusunu taşıdığında adresi değişir, oysa adının değişmemesi beklenir. Sonraki
konu, adlar ile adresler arasındaki bu bağı kurar: adın nasıl yapılandığını, kime ait
olduğunu ve bir adrese nasıl çevrildiğini ele alır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.