Ders 10 / 18
IPv6
128 bitlik adresin yazım kuralları, adres türleri, otomatik yapılandırma, başlık farkları ve iki sürümün bir arada çalışması.
İçindekiler
Önceki iki ders 32 bitlik adres uzayının kıtlığıyla baş etme yöntemlerini kurdu: özel adresleri özenle bölmek, her bölüme gerektiği kadar vermek. Bu yöntemler kıtlığı yönetir, ortadan kaldırmaz.
Kıtlığın kendisine yönelen çözüm adres uzayını genişletmektir. Bu dersin sorusu, adres genişliğini dört katına çıkarmanın hangi kararları beraberinde getirdiğidir — çünkü adres genişliği, önceki konuda tanıtılan kum saatinin boğazındadır ve ona dokunmak her şeyi etkiler.
128 Bit
IPv6 adresi 128 bittir. Toplam adres sayısı , yani yaklaşık olur. Karşılaştırma için: IPv4’ün adresi, IPv6’nın uzayının ’da biridir.
Genişliğin böyle abartılı seçilmesi, adres sayısını en üst düzeye çıkarmak için değildir. Amaç hiyerarşik dağıtımı rahatlatmaktır: adresler bol olduğunda her düzeye cömert bloklar verilebilir, blokların bitişik kalması sağlanabilir ve önekler özetlenebilir. IPv4’te adresleri sıkıştırma çabası, yönlendirme tablolarının parçalanmasına yol açmıştı.
Bunun görünür sonucu, IPv6 alt ağlarının her zaman /64 olmasıdır. Bir alt ağdaki
düğüm sayısı ne olursa olsun — iki cihaz da olsa — 64 bitlik düğüm bölümü verilir. IPv4
alışkanlığıyla bakıldığında bu savurganlıktır; IPv6 tasarımında ise otomatik yapılandırmanın
ön koşuludur.
Yazım Kuralları
Adres, iki nokta üst üste ile ayrılmış sekiz onaltılık dörtlü olarak yazılır. Üç kısaltma kuralı vardır:
- Her dörtlüdeki baştaki sıfırlar atılabilir:
0db8→db8,0000→0. - Ardışık sıfır dörtlüleri
::ile tek seferde atılabilir. ::bir adreste en çok bir kez kullanılabilir; iki kez kullanılsaydı hangi boşluğun kaç dörtlü olduğu belirsiz kalırdı.
import ipaddress for metin in ("2001:0db8:0010:0003:0000:0000:0000:0001", "fe80:0000:0000:0000:0200:5eff:fe00:5301", "ff02:0000:0000:0000:0000:0000:0000:0001", "0000:0000:0000:0000:0000:0000:0000:0001", "2001:0db8:0000:0000:0001:0000:0000:0001"): a = ipaddress.ip_address(metin) print(f"{metin} -> {a.compressed}")
2001:0db8:0010:0003:0000:0000:0000:0001 -> 2001:db8:10:3::1 fe80:0000:0000:0000:0200:5eff:fe00:5301 -> fe80::200:5eff:fe00:5301 ff02:0000:0000:0000:0000:0000:0000:0001 -> ff02::1 0000:0000:0000:0000:0000:0000:0000:0001 -> ::1 2001:0db8:0000:0000:0001:0000:0000:0001 -> 2001:db8::1:0:0:1
Son satır üçüncü kuralı gösterir: adreste iki ayrı sıfır dizisi vardır, yalnızca uzun
olan sıkıştırılmıştır. Kısa olan 0:0 biçiminde yazılmak zorundadır. Eşit uzunlukta iki
dizi varsa soldaki sıkıştırılır.
Bağlantı noktası numarasıyla birlikte yazıldığında adres köşeli parantez içine alınır:
[2001:db8:10:3::1]:443. Aksi hâlde son iki nokta üst üstenin adrese mi bağlantı noktasına
mı ait olduğu ayırt edilemez.
Adres Türleri
IPv6’da yayın adresi yoktur. Yayının işlevi çok noktaya gönderimle karşılanır; bu, “herkese sor” yerine “ilgilenenlere sor” davranışı sağlar ve gereksiz işlemeyi azaltır.
| Önek | Tür | Kapsam |
|---|---|---|
2000::/3 |
Genel tekil adres | Genel İnternet |
fe80::/10 |
Yerel bağlantı | Yalnız aynı bağlantı |
fc00::/7 |
Benzersiz yerel adres | Kurum içi |
ff00::/8 |
Çok noktaya gönderim | Öneke gömülü |
::1/128 |
Geri döngü | Makinenin kendisi |
::/128 |
Belirsiz adres | Kaynak alanında “adresim yok” |
2001:db8::/32 |
Belgeleme | Yönlendirilmez |
Yerel bağlantı adresi her IPv6 arayüzünde bulunur ve zorunludur; genel adres olmasa bile vardır. Yönlendirici duyuruları ve komşu keşfi bu adresler üzerinden yürür. Adres yalnızca bir bağlantı içinde anlamlı olduğundan, aynı yerel bağlantı adresi farklı arayüzlerde tekrarlanabilir; bu yüzden kullanılırken arayüz belirtilir.
Benzersiz yerel adres, IPv4’teki özel kullanım bloklarının karşılığıdır: kurum içinde kullanılır, genel İnternet’te yönlendirilmez.
Çok noktaya gönderim adreslerinde önek, kapsamı da taşır. ff02::1 bağlantı kapsamındaki
tüm düğümleri, ff02::2 bağlantı kapsamındaki tüm yönlendiricileri gösterir.
İstenen düğüm çok noktaya gönderim adresi (solicited-node multicast), ARP’nin yayın
sorununu çözen düzenektir: ff02::1:ff00:0/104 önekine hedef adresin son 24 biti eklenir.
Komşu keşfi sorusu bu adrese gönderilir ve yalnızca son 24 biti eşleşen az sayıda arayüz
mesajı işler. Yayın alanındaki her cihazın her soruyu işlemesi böylece önlenir.
Otomatik Yapılandırma
IPv6 arayüzleri, sunucu olmadan adres kurabilir. Durumsuz otomatik yapılandırma (stateless address autoconfiguration, SLAAC) dört adımdır:
- Arayüz, kendine bir yerel bağlantı adresi üretir (
fe80::öneki + arayüz tanımlayıcısı). - Yinelenen adres sınaması (duplicate address detection) yapar: ürettiği adresin istenen düğüm grubuna bir komşu isteği gönderir. Yanıt gelirse adres kullanımdadır.
ff02::2adresine bir yönlendirici isteği gönderir. Yönlendirici, bağlantıda kullanılan/64öneki içeren bir yönlendirici duyurusu ile yanıtlar.- Arayüz, duyurulan öneki kendi arayüz tanımlayıcısıyla birleştirerek genel adresini kurar.
Arayüz tanımlayıcısını üretmenin bir yolu EUI-64 dönüşümüdür: 48 bitlik MAC adresinin
ortasına ff:fe eklenir ve evrensel/yerel biti ters çevrilir.
import ipaddress def eui64(mac: str) -> str: b = [int(x, 16) for x in mac.split(":")] b[0] ^= 0x02 # evrensel/yerel biti ters çevrilir ham = bytes(b[:3] + [0xFF, 0xFE] + b[3:]) return ":".join(ham[i:i + 2].hex() for i in range(0, 8, 2)) arayuz = eui64("00:00:5e:00:53:01") print("arayüz tanımlayıcısı:", arayuz) print("yerel bağlantı adresi:", ipaddress.ip_address("fe80::" + arayuz)) print("genel adres :", ipaddress.ip_address("2001:db8:10:3:" + arayuz))
arayüz tanımlayıcısı: 0200:5eff:fe00:5301 yerel bağlantı adresi: fe80::200:5eff:fe00:5301 genel adres : 2001:db8:10:3:200:5eff:fe00:5301
Örnek ağdaki istemcinin MAC adresi 00:00:5e:00:53:01 idi; ilk baytın ikinci biti ters
çevrilerek 02 olmuş, ortaya ff:fe eklenmiştir. /64 alt ağ zorunluluğunun nedeni burada
görülür: arayüz tanımlayıcısı 64 bittir.
EUI-64 dönüşümünün bir mahremiyet sorunu vardır: adres, donanım adresini içerdiği için
makine ağdan ağa taşınsa bile izlenebilir. Bu nedenle uçlar çoğunlukla arayüz tanımlayıcısını
rastgele üretir ve süreli olarak değiştirir. Sunucular ise sabit ve okunabilir tanımlayıcılar
kullanır — 2001:db8:10:4::20 gibi elle atanmış adresler yaygındır.
SLAAC ad sunucusu bilgisi taşımaz. Bu bilgi ya yönlendirici duyurusunun bir seçeneğiyle ya da IPv6 için tanımlanmış durumsuz kiralama protokolüyle verilir.
Başlık Farkları
IPv6 başlığı 40 bayt sabittir; IPv4’ün 20 baytlık başlığından büyüktür, ancak alan sayısı azdır ve değişken uzunluk yoktur.
| Değişiklik | Gerekçe |
|---|---|
| Başlık sağlaması kaldırıldı | Bağlantı katmanı ve taşıma katmanı zaten denetliyor; her sekmede yeniden hesap gereksiz |
| Yönlendiricide parçalama kaldırıldı | Parçalama maliyeti uçlara itildi; ara düğüm paketi atar ve bildirir |
| Başlık uzunluğu sabitlendi | İşleme boru hattı yalınlaşır |
| Seçenekler ek başlıklara taşındı | Zincir hâlinde eklenir, ana başlığı şişirmez |
| En küçük MTU 1280 bayta yükseltildi | Yol MTU keşfi gereksinimi azalır |
Sağlamanın kaldırılması, uçtan uca ilkesinin doğrudan uygulanmasıdır: ara düğümde yapılan denetim doğruluk için gerekli değildi, yalnızca maliyet ekliyordu.
Örnek Ağın IPv6 Planı
Kurum, sağlayıcısından 2001:db8:10::/48 tahsisi almıştır. Bu tahsis 65 536 adet /64 alt
ağ içerir; kurumun beş ağı için fazlasıyla yeterlidir.
import ipaddress tahsis = ipaddress.ip_network("2001:db8:10::/48") plan = { "Misafir kablosuz": "2001:db8:10:1::/64", "Laboratuvar": "2001:db8:10:2::/64", "Yönetim": "2001:db8:10:3::/64", "Sunucu": "2001:db8:10:4::/64", "Bağlantı": "2001:db8:10:ffff::/64", } print("tahsis:", tahsis, "— içindeki /64 sayısı:", 2 ** (64 - tahsis.prefixlen)) for ad, cidr in plan.items(): net = ipaddress.ip_network(cidr) print(f"{ad:18s} {str(net):24s} tahsisin içinde={net.subnet_of(tahsis)}")
tahsis: 2001:db8:10::/48 — içindeki /64 sayısı: 65536 Misafir kablosuz 2001:db8:10:1::/64 tahsisin içinde=True Laboratuvar 2001:db8:10:2::/64 tahsisin içinde=True Yönetim 2001:db8:10:3::/64 tahsisin içinde=True Sunucu 2001:db8:10:4::/64 tahsisin içinde=True Bağlantı 2001:db8:10:ffff::/64 tahsisin içinde=True
İki planın karşıtlığı öğreticidir. IPv4 planında her bit sayıldı, boş adresler tek tek not
edildi, büyüme payı bir kısıt oldu. IPv6 planında düğüm sayısı hiç hesaba girmedi; tek
karar, hangi alt ağ numarasının hangi bölüme verileceğiydi. Alt ağ numaraları okunabilirlik
için seçilmiştir — noktadan noktaya bağlantıya ffff verilmesi, tahsisin sonundan
başlamak gibi bir düzen tercihidir.
İki Sürümün Bir Arada Çalışması
IPv4 ve IPv6 birbiriyle doğrudan konuşmaz: farklı adres genişlikleri, farklı başlıklar, farklı komşu keşfi. Bir arada çalışma için üç yaklaşım vardır.
Çift yığın (dual stack): Uçlar ve yönlendiriciler her iki protokolü de çalıştırır. Bir hedefe hangi sürümle gidileceğine ad çözümlemesinin sonucu karar verir. En yalın yöntemdir; maliyeti her şeyin iki kez yapılandırılması ve iki kez denetlenmesidir.
Tünelleme: IPv6 paketi, IPv4 paketinin yükü olarak taşınır. Aradaki ağ IPv6 bilmiyorsa kullanılır. Tünel başlığı MTU’yu düşürür; önceki konuda ele alınan parçalama ve yol MTU sorunları bu yüzden tünellerde sık görülür.
Çeviri: Bir ara düğüm IPv6 adreslerini IPv4 adreslerine dönüştürür. Uçtan uca saydamlığı bozar ve sonraki derste ele alınacak adres dönüştürme sorunlarını devralır.
Bir uç her iki sürüme de sahipse hangisini seçeceği bir sıralama kuralına bağlıdır; genel eğilim IPv6’yı önce denemek ve başarısız olursa IPv4’e dönmektir. Bu davranış, IPv6 yolunda sessiz bir arıza olduğunda gecikmeyi artırabilir.
Özet
- IPv6 adresi 128 bittir; genişliğin amacı adres sayısını artırmaktan çok hiyerarşik dağıtımı ve önek özetlemeyi rahatlatmaktır.
- Alt ağlar her zaman
/64’tür; 64 bitlik arayüz tanımlayıcısı otomatik yapılandırmanın ön koşuludur. - Yazımda baştaki sıfırlar atılır ve en uzun sıfır dizisi
::ile bir kez sıkıştırılır. - Yayın adresi yoktur; işlevi çok noktaya gönderim ve istenen düğüm grubu ile karşılanır.
- Durumsuz otomatik yapılandırma yerel bağlantı adresi üretme, yinelenen adres sınaması, yönlendirici duyurusu ve önek birleştirme adımlarından oluşur.
- Başlıkta sağlama ve yönlendiricide parçalama kaldırılmıştır; iki sürüm çift yığın, tünelleme veya çeviri ile bir arada çalışır.
Sonraki Adım
Bu derste “yönlendirici paketi atar ve bildirir” ifadesi birkaç kez geçti. Bildirimin kendisi de bir protokoldür ve yalnızca hata haberciliği yapmaz: erişilebilirlik sınaması, yol keşfi ve MTU bildirimi de onun üzerinden yürür. Sonraki ders bu denetim mesajlarını, yaşam süresi alanının nasıl bir yol izleme aracına dönüştüğünü ve mesajların engellenmesinin neden sessiz arızalara yol açtığını ele alacak.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.