Subnet Hesaplama
Yayın tarihi
Okuma süresi
6 dk okuma

IPv6 Adresleri Nasıl Hesaplanır? Adım Adım Subnet Hesabı

IPv6 subnet hesaplamasını elle yapın: ön ek uzunluğundan adres sayısını, ağ adresini, ilk ve son adresi bulun. /64, /48, /56 ve /58 için işlenmiş örnekler.

IPv6'da alt ağ hesabı IPv4'ten kısadır: ağ maskesi yazılmaz, yayın (broadcast) adresi çıkarılmaz. Üç şeyi bilmeniz yeter. Ön ek (prefix) uzunluğu n ise ana makine bitleri 128 − n adettir, blokta 2128−n adres bulunur ve ağ adresi, adresin ilk n bitini koruyup kalanını sıfırlayarak elde edilir. Aşağıda her adımı dört işlenmiş örnekle yapıyor, sonuçları araçlarla doğruluyoruz.

Not

Yazıdaki tüm adresler 2001:db8::/32 belgelendirme aralığındandır (RFC 3849 (yeni sekmede açılır)). Örnek adres, gerçek bir ağı göstermez.

Hesaba başlamadan önce bilmeniz gerekenler

Bir IPv6 adresi 128 bittir ve sekiz hextet (16 bitlik grup) olarak yazılır. Her hextet en çok dört onaltılık basamaktan oluşur ve her basamak 4 bit taşır. "Hextet" topluluk terimidir; RFC 4291 (yeni sekmede açılır) aynı yapıya "16 bitlik parça" der.

Ön ek uzunluğu /n biçiminde yazılır ve adresin soldan kaç bitinin ağı belirlediğini söyler. Kalan 128 − n bit ana makine (host) kısmıdır. Ağ maskesi (255.255.255.0 benzeri) yazılmaz; yalnızca ön ek uzunluğu yazılır (RFC 4291, bölüm 2.3).

BirimBitOnaltılık basamak
Onaltılık basamak (nibble)41
Hextet164
/64 sınırı6416 (4 hextet)
Tüm adres12832 (8 hextet)

Bu tablo hesabın kısayoludur. Ön ek uzunluğu 4'ün katıysa ağ sınırı bir onaltılık basamağa denk gelir ve işlem basamak saymaktan ibaret kalır.

Adım 1: Ana makine bitlerini bulun

Ana makine bitleri 128 − n ile bulunur. /64 için 64, /56 için 72, /48 için 80, /32 için 96 bit kalır. Bu sayı iki şeyi belirler: bloğun büyüklüğünü ve ağ adresinde sıfırlayacağınız bit sayısını.

Adım 2: Adres sayısını hesaplayın

Her ana makine biti 0 ya da 1 olabildiğinden blokta 2128−n adres bulunur.

Ön ekAna makine bitiAdres sayısıİçerdiği /64 sayısı
/329679.228.162.514.264.337.593.543.950.3364.294.967.296
/48801.208.925.819.614.629.174.706.17665.536
/56724.722.366.482.869.645.213.696256
/6068295.147.905.179.352.825.85616
/646418.446.744.073.709.551.6161
/12712yok
/12801yok

Ezber için tek kural yeter: ön ek uzunluğu 1 azaldığında blok iki katına çıkar. /64'ten /63'e geçince 264 adres 265 olur; /60'tan /56'ya inince blok 16 kat büyür.

Adım 3: Ağ adresini maskelemeyle bulun

Ağ adresi, adresin ilk n bitini koruyup kalan bitleri sıfırlayarak bulunur. Eldeki adres bir ana makine adresi bile olsa sonuç değişmez; 2001:db8:abcd:12:3a5b:cafe:1:2/64 adresinin ağı da 2001:db8:abcd:12::/64 olur.

Ön ek uzunluğu 4'ün katıysa elle yöntem dört adımdır:

  1. Adresi tam yazın: her hextet dört basamak olsun, :: ile atlanan sıfır gruplarını açın. IPv6 Adres Genişletme aracı bunu yapar.
  2. Korunacak basamak sayısını bulun: n değerini 4'e bölün. /48 için 12, /56 için 14, /64 için 16 basamak korunur.
  3. Kalan basamakların hepsini 0 yapın.
  4. Sonucu RFC 5952 (yeni sekmede açılır) kurallarıyla kısaltın: hextet başındaki sıfırları atın, en uzun sıfır dizisini bir kez :: ile yazın. IPv6 Adres Sıkıştırma aracı bu adımı yapar.

Adım 4: İlk ve son adresi bulun

İlk adres, ağ adresinin kendisidir: ana makine bitlerinin tamamı sıfırdır. Son adres, ana makine bitlerinin tamamı bir olan adrestir; onaltılık yazımda sıfırladığınız her basamak f olur.

IPv6'da yayın adresi yoktur (RFC 4291, bölüm 2), dolayısıyla son adres IPv4'teki gibi yayın amacıyla ayrılmaz. İlk adres ise ana makinelere verilmez: ana makine bitleri sıfır olan adres, alt ağdaki yönlendiriciler için tanımlı Subnet-Router anycast adresidir (RFC 4291, bölüm 2.6.1).

Adım 5: İçindeki /64 sayısını bulun

Ön ek 64'ten kısaysa ya da 64'e eşitse bloktaki /64 sayısı 264−n olur. Ön ek ile /64 sınırı arasındaki bitler alt ağ kimliğini oluşturur: bir /48'de bu 16 bittir (4. hextet'in tamamı), bir /56'da 8 bittir. Ön ek 64'ten uzunsa blok bir /64'ten küçüktür; /127 gibi bu uzunluklar yönlendiriciler arası bağlantı gibi özel durumlar içindir.

Örnek 1: 2001:db8:abcd:12::/64

  • Ana makine bitleri: 128 − 64 = 64.
  • Adres sayısı: 264 = 18.446.744.073.709.551.616.
  • Ağ adresi: 64 ÷ 4 = 16 basamak korunur, yani ilk dört hextet aynen kalır ve son dört hextet sıfırlanır. Tam yazım 2001:0db8:abcd:0012:0000:0000:0000:0000, kısaltılmışı 2001:db8:abcd:12:: olur.
  • İlk adres: 2001:db8:abcd:12:: (ağ adresi; ana makineye verilmez).
  • Son adres: 2001:db8:abcd:12:ffff:ffff:ffff:ffff.
  • İçindeki /64 sayısı: 1; blok zaten bir /64'tür.
  1. hextet'teki 12 onaltılık bir değerdir; onluk karşılığı 18'dir. Bu blok, 2001:db8:abcd::/48 içinde alt ağ kimliği 18 olan /64'tür.

IPv6 Proxy ürün sayfasında her pakette size özel bir /64 subnet verildiği belirtilir (IPv6 Proxy). Yukarıdaki hesaba göre böyle bir subnet 18.446.744.073.709.551.616 adres barındırır; satılan paket adetleri (100 ile 15.000 arası) bu kapasitenin çok küçük bir parçasıdır.

Örnek 2: 2001:db8:abcd:7f3a::1/48

Bu kez ana makine adresi ve ön ek uzunluğu verilmiş, ağ isteniyor.

  • Ana makine bitleri: 128 − 48 = 80.
  • Adres sayısı: 280 = 1.208.925.819.614.629.174.706.176.
  • Ağ adresi: 48 ÷ 4 = 12 basamak korunur; bu, ilk üç hextet (2001:0db8:abcd) demektir. 4. hextet olan 7f3a ve sondaki 1 atılır. Ağ adresi 2001:db8:abcd::/48 olur.
  • İlk adres: 2001:db8:abcd::. Son adres: 2001:db8:abcd:ffff:ffff:ffff:ffff:ffff.
  • İçindeki /64 sayısı: 264−48 = 216 = 65.536. İlk /64 2001:db8:abcd::/64, son /64 2001:db8:abcd:ffff::/64.
  1. hextet bu /48 için alt ağ kimliğidir: 0000 ile ffff arasındaki her değer ayrı bir /64 verir. Girdideki 7f3a, bunlardan birinin, yani 2001:db8:abcd:7f3a::/64 bloğunun kimliğidir.

Örnek 3: 2001:db8:abcd:12ab::1/56

  • Ana makine bitleri: 128 − 56 = 72.
  • Adres sayısı: 272 = 4.722.366.482.869.645.213.696.
  • Ağ adresi: 56 ÷ 4 = 14 basamak korunur: ilk üç hextet ve 4. hextet'in ilk iki basamağı (12). Son iki basamak olan ab sıfırlanır ve ağ adresi 2001:db8:abcd:1200::/56 olur.
  • İlk adres: 2001:db8:abcd:1200::. Son adres: 2001:db8:abcd:12ff:ffff:ffff:ffff:ffff.
  • İçindeki /64 sayısı: 264−56 = 28 = 256. İlk /64 2001:db8:abcd:1200::/64, son /64 2001:db8:abcd:12ff::/64.

Dikkat: 4. hextet'te 12 ile 1200 aynı değer değildir. Sondaki sıfırlar atılamaz; bu yüzden ağ adresini 2001:db8:abcd:12::/56 diye yazamazsınız.

Ön ek 4'ün katı değilse: /58 örneği

Ön ek uzunluğu 4'ün katı değilse ağ sınırı bir onaltılık basamağın ortasına düşer. Bu durumda yalnızca o basamağı bit düzeyinde işlersiniz. Örnek: 2001:db8:abcd:12f7::1/58.

  • Ana makine bitleri: 128 − 58 = 70. Adres sayısı: 270 = 1.180.591.620.717.411.303.424.
  • Sınır: 58 = 3 × 16 + 10. İlk üç hextet tamamen ağa aittir; 4. hextet'in ilk 10 biti ağa, son 6 biti ana makineye aittir.
Metin
                    ağ (10 bit) | ana makine (6 bit)
12f7  = 0001 0010 11|11 0111
ağ    = 0001 0010 11|00 0000 = 12c0
son   = 0001 0010 11|11 1111 = 12ff

Aynı sonuca maskeyle de ulaşırsınız. /58 maskesi ffff:ffff:ffff:ffc0:: değeridir; 4. hextet için 12f7 ile ffc0 bit düzeyinde VE işlemine girince 12c0 çıkar. Ağ adresi 2001:db8:abcd:12c0::/58, son adres 2001:db8:abcd:12ff:ffff:ffff:ffff:ffff olur. Blokta 264−58 = 26 = 64 adet /64 vardır; ilki 2001:db8:abcd:12c0::/64, sonuncusu 2001:db8:abcd:12ff::/64 bloğudur.

Sık yapılan hatalar

  1. 2n − 2 hesabı yapmak. IPv4'te ağ ve yayın adresi düşüldüğü için kullanılabilir adres sayısı iki eksiktir. IPv6'da yayın adresi yoktur; blok 2128−n adres sayılır.
  2. "/64, 64 adres demektir" demek. 64, ağ bitlerinin sayısıdır. Adres sayısını ana makine bitleri belirler ve /64 için 264 eder.
  3. /48 içinde 256 tane /64 olduğunu söylemek. 256, bir /56'daki /64 sayısıdır. Bir /48'de 65.536 tane vardır.
  4. Ön ek büyüdükçe bloğun büyüdüğünü sanmak. Sıralama /32 > /48 > /64 biçimindedir; uzunluk arttıkça blok küçülür.
  5. Bir hextet'in sonundaki sıfırı atmak. Yalnızca baştaki sıfırlar atılır. 2001:db8:abcd:12::/56 yazımında ana makine bitleri sıfır değildir; sıkı kipli araçlar bunu ağ adresi olarak reddeder.
  6. :: işaretini iki kez kullanmak. 2001:db8::abcd::12 geçersizdir, çünkü her :: için kaç grubun atlandığı belirsiz kalır (RFC 4291 (yeni sekmede açılır), bölüm 2.2).
  7. Ağ maskesi yazmak. 2001:db8::/ffff:ffff:: gibi bir yazım geçersizdir; yalnızca /32 yazılır.

Sonucu araçla doğrulayın

Önce elle hesaplayın, sonra sonucu karşılaştırın. IPv6 Subnet Hesaplama aracı ağ adresini, ilk ve son adresi ve alt ağ sayısını verir. IPv6 CIDR Hesaplama bloğu çözümler ve bir adresin bloğun içinde olup olmadığını sorgular. Bloğu /56 ya da /64 gibi parçalara bölmek için IPv6 Prefix Hesaplama aracını kullanın. Üçü de tarayıcıda çalışır.

İpucu

Sonuçlar tutmuyorsa iki adresi de önce genişletin ve hextet'leri tek tek karşılaştırın. Hata çoğunlukla kısaltılmış yazımın gizlediği sıfırlardadır.

Python standart kütüphanesi bağımsız bir ikinci kontrol sağlar:

Python
import ipaddress

# Örnek adres (belgelendirme aralığı). strict=False, ana makine bitlerini sıfırlar.
ag = ipaddress.ip_network("2001:db8:abcd:12f7::1/58", strict=False)

print(ag)                          # 2001:db8:abcd:12c0::/58
print(ag[0])                       # 2001:db8:abcd:12c0::
print(ag[-1])                      # 2001:db8:abcd:12ff:ffff:ffff:ffff:ffff
print(ag.num_addresses)            # 1180591620717411303424
print(2 ** (64 - ag.prefixlen))    # 64

Hesabı öğrendikten sonraki soru, blokları nasıl dağıtacağınızdır. Bir /48 bloğunun nasıl bölüneceğini planlama yazısında bulabilirsiniz. Adres türleri ve yazım kuralları için IPv6 adresleme sayfasına bakın.

Sık sorulan sorular

IPv6 alt ağında kullanılabilir adres sayısı 2^n − 2 ile mi bulunur?

Hayır. IPv6'da yayın (broadcast) adresi yoktur, bu yüzden IPv4'teki "ağ ve yayın adresini düş" işlemi uygulanmaz. Bloğun tamamı 2^(128−n) adres sayılır; yalnızca ana makine bitleri sıfır olan ağ adresi (Subnet-Router anycast) ana makinelere verilmez.

Bir /48 içinde kaç tane /64 vardır?

65.536 tane (2^16). 4. hextet'in tamamı alt ağ kimliği olduğundan 2001:db8:abcd::/64 ile 2001:db8:abcd:ffff::/64 arasında 65.536 ardışık /64 yer alır. 256 sayısı /56 bloğu için geçerlidir.

IPv6'da ağ maskesi yazılır mı?

Hayır, yalnızca ön ek uzunluğu (/64 gibi) yazılır. Maske kavramı hesapta işe yarar, örneğin /58 için ffff:ffff:ffff:ffc0:: değeri ağ adresini bulmakta kullanılır; ama adres yazımında yer almaz.

Ön ek uzunluğu 4'ün katı değilse ağ adresini nasıl bulurum?

Sınıra denk gelen onaltılık basamağı ikiliye çevirin, ağa ait bitleri koruyun, ana makine bitlerini sıfırlayın ve değeri tekrar onaltılığa çevirin. Örneğin /58 için 12f7 değeri 12c0 olur.