Gość (83.4.*.*)
Wyobraźmy sobie przełom lat 70. i 80. XX wieku. To czas, w którym rodziły się fundamenty dzisiejszego cyfrowego świata. Inżynierowie pracujący nad protokołem IP (Internet Protocol) nie przypuszczali, że sieć rozrośnie się do miliardów urządzeń. W tamtym okresie podjęto wiele decyzji projektowych, które z dzisiejszej perspektywy wydają się marnotrawstwem. Jedną z nich było zarezerwowanie całego bloku adresowego 0.0.0.0/8 (czyli ponad 16 milionów adresów) dla funkcji „ten host w tej sieci”. Gdyby wtedy zdecydowano inaczej, historia Internetu mogłaby wyglądać nieco inaczej, choć rewolucji prawdopodobnie by nie było.
W architekturze IPv4 adresy są podzielone na bloki. Blok zaczynający się od zera (od 0.0.0.1 do 0.255.255.255) został zdefiniowany jako specjalny. Zgodnie z dokumentacją RFC 791 i późniejszymi, adresy te nie mogą być używane jako publiczne adresy docelowe w Internecie. Ich pierwotnym celem było ułatwienie komunikacji urządzeniom, które jeszcze nie znają swojego własnego adresu IP (np. podczas startu systemu i wysyłania zapytania o konfigurację).
W praktyce oznacza to, że ponad 16,7 miliona potencjalnych punktów dostępu do sieci zostało „zamrożonych” na samym starcie.
Aby zrozumieć skalę, musimy spojrzeć na liczby. Cała pula IPv4 to około 4,29 miliarda adresów. Jeden blok typu „Class A” (taki jak 0.0.0.0/8) to dokładnie ~$2^{24}~#$ adresów.
Matematyczne wyliczenie dostępnych adresów w tym bloku:
/8 oznacza, że pierwsze 8 bitów jest stałe (w tym przypadku same zera).Gdyby na przełomie lat 70. i 80. te adresy trafiły do puli publicznej, zyskalibyśmy dodatkowe 16,7 miliona unikalnych identyfikatorów. W skali globalnej to zaledwie 0,39% całkowitej przestrzeni IPv4. Choć liczba ta wydaje się duża, w kontekście tempa wzrostu Internetu w XXI wieku, wystarczyłaby ona na pokrycie światowego zapotrzebowania na adresy przez zaledwie kilka dodatkowych miesięcy przed ich całkowitym wyczerpaniem.
Oficjalne wyczerpanie wolnych bloków IPv4 przez IANA (Internet Assigned Numbers Authority) nastąpiło w 2011 roku. Gdybyśmy dysponowali dodatkowym blokiem 0/8, moment ten zostałby przesunięty o około pół roku do roku, biorąc pod uwagę ówczesne tempo przydzielania adresów dużym dostawcom i korporacjom.
Nie zmieniłoby to jednak konieczności wdrożenia protokołu IPv6. Problem braku adresów był strukturalny, a nie ilościowy w skali kilku milionów. Zmiana przeznaczenia tego zakresu 40 lat temu byłaby jedynie „plastrem” na ranę, która i tak wymagała operacji.
Najciekawszym aspektem tej zmiany nie jest jednak sama liczba adresów, ale stabilność systemów. Wiele wczesnych implementacji stosu TCP/IP traktowało zero jako wartość specjalną (często utożsamianą z błędem lub wartością NULL w programowaniu).
Gdyby zmieniono przeznaczenie tego zakresu, programiści musieliby napisać znacznie bardziej rygorystyczny kod. Do dziś wiele starych routerów i systemów operacyjnych „hardkoduje” blok 0/8 jako nieprawidłowy. Gdyby te adresy były publiczne, mogłoby dochodzić do:
Warto wiedzieć, że temat ten nie jest tylko teoretyczny. Od lat trwają dyskusje w środowisku inżynierów sieciowych (IETF), aby „odmrozić” ten zakres i zacząć go używać jako normalne adresy publiczne. Projekt ten nazywa się często „Unicast 0/8”. Głównym problemem jest jednak to, że miliony urządzeń na świecie (stare drukarki, sterowniki przemysłowe, routery) mają ten zakaz wpisany na sztywno w swoje oprogramowanie (firmware), którego nie da się zaktualizować. Próba użycia tych adresów dzisiaj mogłaby „położyć” fragmenty globalnej sieci.
Gdyby decyzję podjęto na przełomie lat 70. i 80., prawdopodobnie nie odczulibyśmy tego dzisiaj w żaden sposób. Inżynierowie po prostu nauczyliby się żyć z „zerem” jako normalnym adresem, tak jak nauczyliśmy się żyć z adresem 1.1.1.1 (który należy do firmy Cloudflare, a kiedyś też był traktowany po macoszemu).
Największą różnicą byłoby to, że dzisiaj jakaś wielka korporacja (np. IBM, Apple czy MIT – które w tamtych latach otrzymywały całe bloki /8) posiadałaby zakres zaczynający się od zera. Być może zamiast słynnego adresu Google 8.8.8.8, najłatwiejszym do zapamiętania adresem DNS byłoby coś w stylu 0.0.0.1.