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.0
do127.255.255.255
o/8
długości maski sieci - Klasa B -
128.0.0.0
do191.255.255.255
o/16
długości maski sieci - Klasa C -
192.0.0.0
do223.255.255.255
o/24
dł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.0
jest 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.0
do 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.1
na 3.255.255.254
który jest 2 24 - 2 (= 16,777,214) łączne adresów.
Podobnie 200.20.30.0
jest 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.0
do 200.20.30.255
. Usunięcie adresów sieciowych i rozgłoszeniowych pozostawia rzeczywisty zakres adresów użytecznych, 200.20.30.1
do 200.20.30.254
któ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/12
jest równoważny do sieci klasy B 172.16.0.0
do 172.31.0.0
lub zakresu adresów 172.16.0.0
do 172.31.255.255
.
Wyjątkiem od tej reguły jest 100.64.0.0/10
zakres VLSR, który jest bardziej szczegółowy niż zawierający 100.0.0.0
zakres klasy A. W ten sposób 100.0.0.0
bę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.0
do 100.63.255.255
i 100.128.0.0
do 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.1
numer, 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.
źródło
@echo off
, jak również.