---
title: IPv6
source: 'https://academia.sh/tr/kurslar/ag-modelleri/ipv6'
course: 'Ağ Modelleri ve Protokoller'
language: tr
updated: '2026-08-17T18:07:09+00:00'
license: 'CC BY-SA 4.0'
---

# 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ı.

Ö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ı $2^{128}$, yani yaklaşık $3{,}4 \times 10^{38}$
olur. Karşılaştırma için: IPv4'ün $2^{32}$ adresi, IPv6'nın uzayının $2^{96}$'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:

1. Her dörtlüdeki baştaki sıfırlar atılabilir: `0db8` → `db8`, `0000` → `0`.
2. Ardışık sıfır dörtlüleri `::` ile tek seferde atılabilir.
3. `::` bir adreste **en çok bir kez** kullanılabilir; iki kez kullanılsaydı hangi
   boşluğun kaç dörtlü olduğu belirsiz kalırdı.

```python
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:

1. Arayüz, kendine bir **yerel bağlantı adresi** üretir (`fe80::` öneki + arayüz
   tanımlayıcısı).
2. **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.
3. `ff02::2` adresine 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.
4. 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.

```python
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.

```python
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.
