Adresy IPv4 mają szerokość 32 bitów, a zatem rozmiar przestrzeni adresowej wynosi 2 32 lub 4 294 967 296. Jest to jednak tylko teoretyczna górna granica. Nie jest to dokładne przedstawienie wszystkich adresów, które mogą być faktycznie używane w publicznym Internecie.
Na potrzeby tego wyzwania zakłada się, że wszystkie adresowanie jest klasowe . W rzeczywistości podział klasowy przestrzeni adresowej został zastąpiony przez CIDR (Classless Inter-Domain Routing i VLSM (Variable Length Subnet Masking) , ale jest to ignorowane w przypadku tego wyzwania.
Zgodnie ze schematem adresów klasowych istnieją 3 klasy:
- Klasa A -
0.0.0.0do127.255.255.255o/8długości maski sieci - Klasa B -
128.0.0.0do191.255.255.255o/16długości maski sieci - Klasa C -
192.0.0.0do223.255.255.255o/24długości maski sieci
Klasy D (multiemisja) i E (zarezerwowane) są również zdefiniowane, ale nie są one używane w przypadku publicznych adresów emisji pojedynczej.
Każda klasa jest podzielona na sieci zgodnie z maską sieci dla tej klasy.
Tak więc 3.0.0.0jest przykładem sieci klasy A. Długość maska w klasie A wynosi 8, a więc pełna przestrzeń adresowa dla tej sieci jest 3.0.0.0do 3.255.255.255. Jednak pierwszy adres ( 3.0.0.0) jest zarezerwowany jako adres sieciowy, a ostatni adres ( 3.255.255.255) jest zarezerwowany jako adres rozgłoszeniowy dla tej sieci. Zatem rzeczywisty zakres adresów użytkowej 3.0.0.1na 3.255.255.254który jest 2 24 - 2 (= 16,777,214) łączne adresów.
Podobnie 200.20.30.0jest przykładem sieci klasy C. Długość maska dla klasy C jest 24, więc pełna przestrzeń adresowa dla tej sieci jest 200.20.30.0do 200.20.30.255. Usunięcie adresów sieciowych i rozgłoszeniowych pozostawia rzeczywisty zakres adresów użytecznych, 200.20.30.1do 200.20.30.254których jest 2 8 - 2 (= 254) adresów ogółem.
Istnieją dalsze ograniczenia zakresów adresów, które mogą być używane do publicznej emisji pojedynczej. Zgodnie z RFC 6890 niedozwolone zakresy to:
0.0.0.0/8- Lokalne sieci10.0.0.0/8- Użytek prywatny100.64.0.0/10- Wspólna przestrzeń adresowa127.0.0.0/8- Loopback169.254.0.0/16- Link lokalny172.16.0.0/12- Użytek prywatny192.0.0.0/24- Przypisania protokołu IETF192.0.2.0/24- Zarezerwowane do użytku w dokumentacji192.88.99.0/24- Anycast 6to4 Relay192.168.0.0/16- Użytek prywatny198.18.0.0/15- Benchmarking198.51.100.0/24- Zarezerwowane do użytku w dokumentacji203.0.113.0/24- Zarezerwowane do użytku w dokumentacji
Należy zauważyć, że powyższa lista wykorzystuje maski sieci VLSR do skutecznego określania zakresu. We wszystkich przypadkach oprócz jednej, podana długość maski ma swoistość jest mniejsza lub równa normalnej klasowej długości maski na początku zakresu. Zatem każdy z tych zakresów VLSR jest równoważny jednej lub większej liczbie klasowych sieci. Na przykład 172.16.0.0/12jest równoważny do sieci klasy B 172.16.0.0do 172.31.0.0lub zakresu adresów 172.16.0.0do 172.31.255.255.
Wyjątkiem od tej reguły jest 100.64.0.0/10zakres VLSR, który jest bardziej szczegółowy niż zawierający 100.0.0.0zakres klasy A. W ten sposób 100.0.0.0będzie traktowane jak inne zakresy klasy A, z tym wyjątkiem, że ma otwór na środku 4 194 304 adresów. Prawidłowe adresy w tym zakresie klasy A będą 100.0.0.0do 100.63.255.255i 100.128.0.0do 100.255.255.254łącznie 2 24 - 2 22 - 2 (= 12 582 910) adresów ogółem.
Celem tego wyzwania jest wyprowadzenie wszystkich adresów IPv4 emisji pojedynczej klasy A, B i C, które mogą być prawidłowo przypisane do publicznego hosta internetowego (tj. Z wyłączeniem tych wyszczególnionych powyżej).
Nie zostaną podane żadne dane wejściowe i nie należy się ich spodziewać.
Dane wyjściowe mogą być w dowolnej formie dogodnej dla Twojego języka, np. Tablica, lista, łańcuch rozdzielany. Adresy muszą być wyprowadzane w standardowym formacie dziesiętnym z kropkami.
Kolejność wyjściowa nie ma znaczenia.
Wbudowane, które konkretnie podają wymagany zakres adresów, są niedozwolone. Podobnie wszelkie metody dynamicznej kontroli tabeli routingu BGP (lub innego protokołu) dla publicznego Internetu są niedozwolone.
Najniższy będzie 1.0.0.1numer, a najwyższy - numer 223.255.255.254.
Wyzwanie to jest podobne do Wydrukuj wszystkie adresy IPv6 , ale ze względu na ograniczenia powinno wymagać implementacji innej niż trywialna.
@echo off, jak również.