Wszystko, co chcielibyście wiedzieć o IPv6, ale baliście się zapytać cz. 1

Posted on śro 03 listopad 2010 in Routing

IPv6 puka do bram, czy tego chcemy czy nie. Ostatnia pula /8 została rozdysponowana. Koniec.

Faktem jest, że wielu użytkowników a nawet administratorów podchodzi do tematu jak do jeża. IP w wersji 6 uchodzi (zbyt często) za coś nieco mitycznego a w najlepszym przypadku traktowane jest nadal jako zabawka sieciowych freaków. To czy pewnego pięknego poranka obudzimy się z przysłowiową ręką w nocniku zależy wyłącznie od nas.

Ta seria wpisów - mam nadzieję - rzuci nieco światła na ajpiwisiks. Jak się okaże nie taki diabeł straszny.

Adresacja IPv6

Adresacja IPv6 to pierwsza i najbardziej widoczna zmiana w stosunku do IPv4. W przeciwieństwie do IPv4 adres IP ma długość 128 bitów co daje nam 3,4028236692093846346337460743177e+38 adresów. W porównaniu do tych marnych czterech miliardów w przypadku poprzednika to całkiem sporo ;)

Ze względu na długość adresu zrezygnowano z dotychczasowo stosowanej notacji kropkowo-dziesiętnej na rzecz – jakby nie patrzeć znacznie skracającej zapis – notacji szesnastkowej – grupy czterech cyfr szesnastkowych oddzielonych dwukropkami:

2001:0DB8:1234:5678:9ABC:DEF1:2345:6789

W IPv6 nie stosujemy maski zmiennej długości. Podział adresu jest stały. Typowy adres Unicast dzieli się w ten sposób:


48 bitów
network prefix 16 bitów
subnet id 64 bity
interface id


Pierwsze 64 bity to tzw. routing prefix. Na podstawie tej części pakiet jest routowany. Na uwagę zasługuje 16 bitowy subnet id - oznacza to, że po otrzymaniu globalnego prefiksu możemy wydzielić do 65536 podsieci! Na adresację hostów zostaje nam bagatela 64 bity...

Notacja, głupcze!

OK. Kilka słów o samej notacji. Przyjmijmy, że adres ma następującą postać:
2001:0DB8:0123:0000:0000:9ABC:2345:6789

To co powyżej jest jak najbardziej prawidłowe jednak sieciowiec to zwierze leniwe i lubi sobie ułatwić życie. Poniżej zasady skracania adresów IPv6.

Wszystkie zera wiodące możemy usunąć.
Zapis będzie wyglądał następująco:
2001:DB8:123:0000:0000:9ABC:2345:6789

Grupy zer możemy pominąć i zastąpić je *::*
2001:DB8:123::0000:9ABC:2345:6789

A skracając jeszcze bardziej:
2001:DB8:123::9ABC:2345:6789

Prawda, że wygląda już znacznie ładniej? Na koniec wszystko razem krok po kroku:

2001:0DB8:0123:0000:0000:9ABC:2345:6789 2001:DB8:123:0000:0000:9ABC:2345:6789 2001:DB8:123::0000:9ABC:2345:6789 2001:DB8:123::9ABC:2345:6789

Ale przyjrzyjmy się nieco zmodyfikowanemu przykładowi:
2001:0DB8:0000:0123:9ABC:0000:0000:6789

W pierwszym odruchu moglibyśmy zrobić z niego:
2001:DB8::123:9ABC::6789

No cóż. Taki zapis już prawidłowy nie jest – grupy zer możemy skrócić do dwukropka tylko w jednym miejscu! W zapisie powyżej nie jesteśmy w stanie stwierdzić (a tym bardziej żadne urządzenie) jaki był pierwotny adres. Gdzie znajdowała się jedna grupa zer a gdzie dwie? Zapis stał się niejednoznaczny. Prawidłowo byłoby:
2001:DB8::123:9ABC:0000:0000:6789

lub, co nawet jest lepszym rozwiązaniem
2001:DB8:0000:123:9ABC::6789

Następnym razem przyjrzymy się innym typom adresów i dowiemy się dlaczego nie ma adresu broadcast a jednak jest :)

FIN