Jakie masz pytanie?

lub

Dlaczego w adresie IPv6 nie można użyć podwójnego dwukropka dwukrotnie, na przykład w zapisie 2001:db8::c:d::?

zasady zapisu IPv6 skracanie adresów IP jednoznaczność adresów sieciowych
avatar

Gość (83.4.*.*)



Odpowiedź:

Adresowanie IPv6 na pierwszy rzut oka może wydawać się skomplikowane, zwłaszcza gdy porównamy je do starego, dobrego IPv4. Zamiast czterech liczb oddzielonych kropkami, mamy tu 128-bitowe ciągi znaków zapisane w systemie szesnastkowym. Aby ułatwić nam życie, wprowadzono zasady skracania tych długich adresów, a jedną z najpopularniejszych jest właśnie podwójny dwukropek (::). Dlaczego jednak istnieje surowy zakaz używania go więcej niż raz w jednym adresie? Odpowiedź jest prostsza, niż mogłoby się wydawać, i sprowadza się do jednej kluczowej kwestii: jednoznaczności.

Jak działa podwójny dwukropek?

Zanim przejdziemy do zakazów, przypomnijmy sobie, po co w ogóle stosujemy ::. Pełny adres IPv6 składa się z ośmiu 16-bitowych sekcji (hextetów). Często zdarza się, że wiele z tych sekcji to same zera. Zamiast pisać 2001:0db8:0000:0000:0000:0000:0000:0001, możemy użyć podwójnego dwukropka, aby zastąpić ciąg zer, co daje nam eleganckie 2001:db8::1.

System operacyjny lub router, widząc taki zapis, wie dokładnie, co zrobić. Liczy, ile sekcji zostało podanych jawnie, a brakującą liczbę uzupełnia zerami, aż uzyska wymagane osiem grup. W powyższym przykładzie mamy dwie widoczne grupy, więc :: zastępuje dokładnie sześć grup zer.

Problem matematycznej niejednoznaczności

Wyobraźmy sobie teraz sytuację, w której dopuszczamy użycie podwójnego dwukropka dwukrotnie, tak jak w przykładzie z pytania: 2001:db8::c:d::.

Standardowy adres IPv6 musi mieć 8 sekcji. W naszym błędnym zapisie widzimy cztery sekcje: 2001, db8, c oraz d. Oznacza to, że brakuje nam jeszcze czterech sekcji, które zostały ukryte pod dwoma symbolami ::. I tu pojawia się problem – komputer nie jest jasnowidzem i nie wie, jak rozdzielić te brakujące zera pomiędzy dwa puste miejsca.

Oto możliwe interpretacje takiego zapisu:

  1. 2001:db8:0:0:c:d:0:0 (po dwa bloki zer w każdym miejscu)
  2. 2001:db8:0:c:d:0:0:0 (jeden blok zer w pierwszym miejscu, trzy w drugim)
  3. 2001:db8:0:0:0:c:d:0 (trzy bloki zer w pierwszym miejscu, jeden w drugim)

Każda z tych kombinacji prowadzi do zupełnie innego adresu IP. Gdyby protokół pozwalał na taką dowolność, pakiety danych krążyłyby po sieci bez celu, nie wiedząc, do którego urządzenia mają trafić. Aby uniknąć tego chaosu, organizacja IETF (Internet Engineering Task Force) w dokumencie RFC 4291 jasno określiła: podwójny dwukropek może wystąpić w adresie tylko raz.

Ciekawostka: Ile adresów IPv6 mamy do dyspozycji?

Przejście z IPv4 na IPv6 było konieczne ze względu na wyczerpującą się pulę adresów. IPv4 oferował około 4,3 miliarda kombinacji. IPv6 natomiast oferuje ich... 340 undecylionów (to liczba z 36 zerami!). To tak ogromna ilość, że teoretycznie moglibyśmy przypisać miliony adresów do każdego ziarnka piasku na Ziemi.

Jak poprawnie skracać adresy IPv6?

Jeśli masz adres, w którym zera występują w dwóch różnych miejscach (oddzielone innymi cyframi), musisz zdecydować, które z nich zastąpić podwójnym dwukropkiem. Zazwyczaj wybiera się najdłuższy ciąg zer, aby adres był jak najkrótszy.

Przykład:
Mamy adres: 2001:db8:0:0:abcd:0:0:0

  • Możemy go zapisać jako: 2001:db8::abcd:0:0:0
  • Albo lepiej (krócej): 2001:db8:0:0:abcd::

W drugim przypadku zaoszczędziliśmy więcej znaków, co jest zgodne z dobrymi praktykami sieciowymi. Pamiętaj też, że pojedyncze zera w sekcji można zapisać po prostu jako 0 – nie trzeba pisać 0000.

Podsumowanie zasad skracania

Aby Twój adres IPv6 był zawsze poprawny i czytelny dla urządzeń sieciowych, trzymaj się tych trzech prostych zasad:

  1. Usuwaj wiodące zera w każdej sekcji (np. :0db8: zamień na :db8:).
  2. Używaj :: tylko raz, zastępując nim najdłuższy możliwy ciąg zerowych sekcji.
  3. Jeśli ciągi zer są równej długości, wybierz ten pierwszy od lewej strony (to standardowa rekomendacja, choć obie formy będą technicznie poprawne).

Dzięki tym zasadom adresy IPv6, mimo swojej długości, stają się znacznie łatwiejsze do zarządzania i – co najważniejsze – są zawsze interpretowane w ten sam sposób przez każde urządzenie na świecie.

Podziel się z innymi: