IPv6 sıkıştırma ve genişletme

Bir IPv6 adresini tek kanonik biçimine kısaltın ya da 32 rakamın tamamına genişletin; hangi sıfırların gittiğini, bir dizinin neden :: olduğunu ve yazımınızın hangi RFC 5952 kuralını çiğnediğini görün. Listeler de çalışır.

RFC 5952 kanonik metni · IPv4 sonlu yazımlar dahil RFC 4291 ayrıştırması · tarayıcınızda çalışır

Okunan biçim: IPv6

8 grup ve sıkıştırmanın attıklarıKarakter: 39 → 17 · 22 karakter daha az
korundubaştaki sıfır, atıldı:: olan dizidiğer sıfırlar, korundu
Örnekler

Tek bir adres ya da her satırda bir adres olan bir liste (en fazla 100). Dönüştürme tarayıcınızda yapılır; hiçbir şey gönderilmez.

3 kural uygulandıRFC 5952

2001:db8::1:0:0:1

2 sıfır grubundan oluşan iki dizi: ilki :: oldu

Kural kural RFC 5952

Baştaki sıfırlar atıldı§4.1Düzeltildi0DB8 → db8, 0001 → 1, 0000 → 0, 0000 → 0
:: olabildiğince uzun§4.2.1Düzeltildi0000:0000 açık yazılmış → ::
Tek grup için :: yok§4.2.2Geçti
En uzun dizi, eşitlikte ilki§4.2.3Geçti2 sıfır grubundan oluşan iki dizi: ilki :: oldu
Küçük harf§4.3Düzeltildi0DB8 → db8
Sıkıştırılmış (RFC 5952)
Genişletilmiş (tam)
URL içinde
Sayı olarak
Ondalık · hex · ikili
Ters DNS adı

IPv6 adresi nasıl sıkıştırılır?

Adresi küçük harfe çevirin, her gruptaki baştaki sıfırları atın, ardından iki veya daha fazla sıfır grubundan oluşan en uzun diziyi :: ile değiştirin; iki dizi eşit uzunluktaysa ilkini.

Böylece yazılımların yazdırması gereken tek kanonik biçim elde edilir (RFC 5952). Programlar girdi olarak diğer tüm geçerli yazımları da kabul etmek zorundadır; yani sıkıştırma adresi asla değiştirmez, yalnızca nasıl yazıldığını değiştirir.

2001:0DB8:0000:0000:0000:FF00:0042:8329 adım adım 2001:db8::ff00:42:8329 biçimine kısaltılıyor.
IPv6 sıkıştırma aracı, RFC 5952'nin attığı sıfırları ve :: olan sıfır dizisini gösteriyorIPv6 sıkıştırma aracı, RFC 5952'nin attığı sıfırları ve :: olan sıfır dizisini gösteriyorYazdığınızBüyük harfler, baştaki sıfırlar ve diğerleri: her geçerli yazım okunur.Atılan sıfırlarBaştaki sıfırların üstü çizili, grup grup.:: olan diziEn uzun sıfır grubu dizisi; eşitlikte ilki.Kalan dizilerDiğer sıfır dizileri 0'larını korur, nedeniyle birlikte.Kural kuralYazımın kaç RFC 5952 kuralını çiğnediği; altındaki kontrol listesi her birini ve neyin değiştiğini adlandırır.
İki eşit sıfır dizisi: RFC 5952 ilkini sıkıştırır, kontrol listesi de yazımın çiğnediği her kuralı adlandırır.

IPv6 sıkıştırma kuralları nelerdir?

RFC 5952 beş kural koyar: baştaki sıfırları atın, :: olabildiğince uzun olsun, tek bir sıfır grubu için asla :: kullanmayın, en uzun diziyi sıkıştırın (eşitlikte ilkini) ve onaltılık harfleri küçük yazın.

Altıncı bir öneri IPv4 taşıyan adreslerle ilgilidir: ::ffff: gibi bir önekten sonra son 32 bit noktalı bir IPv4 adresi olarak yazılır. Araç, yazdığınız metni her kurala göre denetler ve düzelttiklerini adlandırır.

1Baştaki sıfırlar atıldı§4.1

Doğru: 2001:db8::1

Yanlış: 2001:0db8::0001

2:: olabildiğince uzun§4.2.1

Doğru: 2001:db8::2:1

Yanlış: 2001:db8:0:0:0:0:2:1

3Tek grup için :: yok§4.2.2

Doğru: 2001:db8:0:1:1:1:1:1

Yanlış: 2001:db8::1:1:1:1:1

4En uzun dizi, eşitlikte ilki§4.2.3

Doğru: 2001:db8::1:0:0:1

Yanlış: 2001:db8:0:0:1::1

5Küçük harf§4.3

Doğru: 2001:db8::a

Yanlış: 2001:DB8::A

+Noktalı IPv4 sonu§5

Doğru: ::ffff:192.0.2.1

Yanlış: 0:0:0:0:0:ffff:192.0.2.1

Her kural, RFC 5952'nin kendi doğru ve yanlış örnekleriyle.

IPv6 adresi nasıl genişletilir?

Yazılı grupları sayın, :: sekize ulaşmak için gereken sayıda sıfır grubunun yerini tutsun ve her grubu dört haneye tamamlayın: 2001:db8::1 adresinde üç grup var, yani :: beş gruptur.

Genişletilmiş biçim, ters DNS'in rakam rakam (nibble) kullandığı biçimdir; birçok log ve tablonun metin olarak sıralama için ihtiyaç duyduğu biçim de budur. Python buna .exploded, Go ise StringExpanded der.

2001:db8::1 genişletildi: 3 yazılı grup, :: için 5 sıfır grubu, her grup 4 haneye tamamlandı.

Bir IPv6 adresi kaç farklı şekilde yazılabilir?

Birçok şekilde: baştaki sıfırlar, harf büyüklüğü ve :: işaretinin yeri değişebilir; bu yüzden tek bir adresin birçok geçerli yazımı vardır ve RFC 5952, tek bir kanonik biçimi belirlemeden önce 2001:db8:0:0:1:0:0:1 için sekiz yazım sıralar.

Adresleri metin olarak karşılaştırmanın başarısız olmasının nedeni budur: aynı adresin iki yazımı eşleşmez. Bunun yerine onları 128 bitlik sayılar olarak karşılaştırın ya da önce ikisini de sıkıştırın.

2001:db8:0:0:1:0:0:12001:0db8:0:0:1:0:0:12001:db8::1:0:0:12001:db8::0:1:0:0:12001:0db8::1:0:0:12001:db8:0:0:1::12001:db8:0000:0:1::12001:DB8:0:0:1::1
2001:db8::1:0:0:1kanonik · RFC 5952
RFC 5952'den sekiz yazım, tek adres.

Bir IPv6 adresi URL'de, portla veya bölgeyle nasıl yazılır?

Portun bir grupla karıştırılmaması için adresi köşeli parantez içine alın: http://[2001:db8::1]:8443/. %eth0 gibi bir bölge ise tarayıcı URL'sine hiç yazılamaz.

RFC 5952, portlu bir adresin köşeli parantez içine alınmasını söyler ve 2001:db8::1:8443 yazımını önerilmez sayar. Köşeli parantezler URL'de başka hiçbir şey için kullanılmaz. Tarayıcılar adresi ::ffff: sonrasında bile hex olarak yazdırır; bu yüzden [::ffff:192.0.2.1] adresi [::ffff:c000:201] olarak görünür.

Bölgeler tek bir makinedeki bir arayüzü adlandırır, örneğin fe80::1%eth0. RFC 9844 2025'te onları URL'lerden yeniden çıkardı ve tarayıcılar onları reddeder; yine de programlar bir bölge yazmanıza izin vermelidir.

http://şema[2001:db8::1]köşeli parantez içinde IPv6:8443port/statusyol

Bölge (%eth0) · fe80::1%eth0

Bir programın alanına yazılıncaizin verilir
Tarayıcı URL'sindereddedilir
inet_pton()ayrıştıramaz
Küresel adreslerhiçbir zaman sahip olmaz
IPv6 adresli bir URL'nin parçaları ve bölgenin nerede yer alabileceği.

Kodda IPv6 nasıl sıkıştırılır veya genişletilir?

Adresi ayrıştırıp yazdırın: Python'da .compressed, Go'da netip.Addr.String() ve MySQL'de INET6_NTOA(INET6_ATON(…)) kanonik metni, .exploded ve StringExpanded() ise tam biçimi verir.

Python'da str() da sıkıştırılmış biçimi verir ve Python bir %zone sonekini kabul eder. MySQL küçük harfle, en fazla 39 karakter ve her platformda aynı şekilde yazdırır.

› import ipaddress
a = ipaddress.ip_address('2001:0DB8::0001')
a.compressed, a.exploded
('2001:db8::1', '2001:0db8:0000:0000:0000:0000:0000:0001')

Python ipaddress

› a := netip.MustParseAddr("2001:0DB8::0001")
fmt.Println(a.String(), a.StringExpanded())
2001:db8::1 2001:0db8:0000:0000:0000:0000:0000:0001

Go net/netip

› SELECT INET6_NTOA(INET6_ATON('2001:0DB8::0001'));
2001:db8::1

MySQL 8.4

Python, Go ve MySQL'den kanonik kısa biçim ve tam biçim.

Sık sorulan sorular

2001:0db8:0000:0000:0000:ff00:0042:8329 adresinin sıkıştırılmış biçimi nedir?

2001:db8::ff00:42:8329. Harfleri küçültün, her grubun baştaki sıfırlarını atın (0db8, db8 olur; 0042, 42 olur), ardından üç sıfır grubundan oluşan diziyi :: ile değiştirin. Sonuç 39 yerine 22 karakterdir ve RFC 5952'nin kanonik saydığı tek biçimdir. Onu yeniden genişletmek, tam olarak aynı 32 onaltılık rakamı geri verir.

Bir IPv6 adresinde :: iki kez kullanılabilir mi?

Hayır. :: bir veya daha fazla sıfır grubunun yerini tutar ve yalnızca bir kez kullanılabilir; iki tane olsaydı hangisinin kaç sıfır grubunu temsil ettiği anlaşılamazdı, bu yüzden 2001:db8::1::1 geçersizdir. Bir adreste iki sıfır dizisi varsa daha uzun olanı, eşitlerse ilkini sıkıştırın ve diğerini 0:0 olarak yazın; örneğin 2001:db8::1:0:0:1.

2001:db8:0:1:1:1:1:1 neden 2001:db8::1:1:1:1:1 olarak sıkıştırılmıyor?

Çünkü RFC 5952 tek bir sıfır grubu için :: kullanmayı yasaklar. Bu kısaltma bir karakter kazandırır ve adresi okumayı zorlaştırır; bu yüzden kanonik biçim tek grubu 0 olarak bırakır: 2001:db8:0:1:1:1:1:1. Ayrıştırıcılar 2001:db8::1:1:1:1:1 yazımını yine aynı adres olarak kabul eder, ancak yazılımlar onu asla bu şekilde yazdırmamalıdır.

IPv6 adresleri büyük harfle mi, küçük harfle mi yazılmalı?

Küçük harfle. RFC 5952, kanonik biçim için a'dan f'ye kadar onaltılık harflerin küçük yazılmasını şart koşar; tarayıcılar ve çoğu kitaplık da onları böyle yazdırır. Yazılımlar büyük harfli girdiyi yine de kabul etmelidir, yani 2001:DB8::A ile 2001:db8::a aynı adrestir; yalnızca yazdırılan biçim değişir. Büyük harf, eski belgelerde ve bazı üreticilerin yapılandırma dosyalarında yaygındır.

Bir IPv6 adresindeki :: nasıl genişletilir?

Yazılı grupları sayın, ardından :: sekize ulaşmak için gereken sayıda sıfır grubunun yerini tutsun. 2001:db8::ff00:42:8329 adresinde beş grup yazılı, yani :: üç adet 0000 grubudur. Her grubu dört haneye tamamladığınızda, ters DNS'in ve birçok log aracının kullandığı genişletilmiş biçim olan 2001:0db8:0000:0000:0000:ff00:0042:8329 adresini elde edersiniz.

En uzun IPv6 adresi kaç karakterdir?

Tam hex biçimde 39: dörder rakamlı sekiz grup ve yedi iki nokta üst üste. Noktalı IPv4 sonlu biçim daha uzun olabilir; soket API'sindeki INET6_ADDRSTRLEN arabellek boyutunun 46 bayt olmasının nedeni budur: 0000:0000:0000:0000:0000:ffff:255.255.255.255 ve sonlandırıcı NUL için yeterlidir. Sıkıştırılmış adresler genellikle çok daha kısadır; :: adresi yalnızca iki karakterdir.

::ffff:c000:280 neden ::ffff:192.0.2.128 olur?

Çünkü RFC 5952, bir IPv4 eşlemeli adresin son 32 bitinin noktalı bir IPv4 adresi olarak yazılmasını önerir; o bitlerin anlamı budur. İki yazım da aynı adrestir ve ikisi de geçerli girdidir. İstisna tarayıcılardır: URL Standard her zaman hex biçimini yazdırır, bu yüzden aynı adres adres çubuğunda [::ffff:c000:280] olarak görünür.

Portlu bir IPv6 adresi URL'ye nasıl yazılır?

Adresi köşeli parantez içine alın ve portu ardından yazın: http://[2001:db8::1]:8443/. Köşeli parantez olmadan port bir grup daha gibi görünürdü; RFC 5952'nin 2001:db8::1:8443 yazılmamasını söylemesinin nedeni budur. Köşeli parantezler URL'lerde yalnızca IPv6 değişmezleri için kullanılır. %eth0 gibi bir bölge ise tarayıcı URL'sine hiç yazılamaz; tarayıcılar onu reddeder.

Python'da bir IPv6 adresi nasıl sıkıştırılır?

Adresi ipaddress modülüyle ayrıştırın ve kanonik kısa biçim için .compressed, 32 rakamın tamamı için .exploded değerini okuyun: ipaddress.ip_address('2001:0db8::0001').compressed '2001:db8::1' verir ve str() de aynısını döndürür. Go'da netip.Addr türünün String() ve StringExpanded() yöntemleri aynı işi yapar; MySQL'in INET6_NTOA(INET6_ATON(…)) ifadesi de küçük harfli kanonik metin yazdırır.

Bir IPv6 adres listesini tek seferde sıkıştırabilir miyim?

Evet. Her satıra bir tane olmak üzere en fazla 100 adres yapıştırın; araç, her satırın sıkıştırılmış ve genişletilmiş biçimini ve yazımının çiğnediği RFC 5952 kurallarını gösteren bir tabloya geçer. Adres olmayan satırlar atılmaz, işaretlenir; böylece satırlar girdinizle eşleşmeye devam eder. İki sütundan birini kopyalayın veya bir CSV indirin; hiçbir şey tarayıcınızdan çıkmaz.

Eksik bir şey mi var?Bir özellik ya da yeni bir araç önerin