Czy podsieci są zawsze ciągłe 1? [duplikować]

25

Rozumiem podstawową przesłankę masek podsieci, takich jak 255.255.255.0. Ale wszystkie przykłady podsieci, które widziałem, to (od lewej do prawej) ciągłe 1s (bity HI). Na przykład 255.255.0.0( /16) tłumaczy następujące oktety:

11111111 . 11111111 . 00000000 . 00000000

Uważam , że te bity muszą być ciągłe, ponieważ sednem podsieci jest uzyskanie identyfikatora hosta i zakresów dostępnych identyfikatorów urządzeń. Ale zastanawiam się, czy możesz mieć maskę podsieci, powiedzmy 255.17.255.0, lub:

11111111 . 00010001 . 11111111 . 00000000
  • Czy to się kiedykolwiek stanie? A może podsieci nie mogą istnieć bez ciągłych 1? Jeśli tak, dlaczego?
  • W przeciwnym razie, jeśli można to zrobić, dlaczego miałbyś (niektóre konkretne przykłady)?
DirtyMikeAndTheBoys
źródło
@MSalters Wiesz, automatyczny komentarz został teraz zmieniony na „Możliwy duplikat…”, więc nie musisz już ręcznie wpisywać komentarza. ;-)
Chris Jester-Young
Krótka odpowiedź: tak, masz rację.
Ośmiornica

Odpowiedzi:

18

Sekcja 3.1 w dokumencie RFC pokazuje dozwolone maski w bezklasowym routingu między domenami. Bity muszą być ciągłe, aby routing działał poprawnie.

Również logiczne myślenie nie miałoby sensu mieć dziwnych losowych masek sieciowych.

Sami Kuhmonen
źródło
28

Tak, najłatwiejszym sposobem na przemyślenie tego jest to, że maski podsieci są zawsze na początku 1. Jeśli wskaźnik rozmiaru podsieci nie ma 1 na początku reprezentacji binarnej, powiedziałbym, że wskaźnik rozmiaru podsieci nie jest właściwą „maską podsieci”, przy zastosowaniu nowoczesnych standardów.

RFC 1219 stwierdza, że ​​wcześniejszy RFC 950 dopuszcza niesąsiadujące bity. W rzeczywistości RFC 950 strona 15 (sekcja 3) wyraźnie ma przykład, który „ilustruje nieciągłe bity podsieci”. Jednak nie ma sposobu na konwersję takich podsieci w notację CIDR. Notacja w stylu CIDR jest tym, czego używał IPv6 (w przynajmniej od RFC 1884 strona 7 , pierwsze zdanie w sekcji 2.4), więc niesąsiadujące bity nigdy nie były szeroko obsługiwane dla sieci IPv6. Metoda RFC 1219 określa, że ​​„bity podsieci (maska ​​= 1) są przypisywane z najbardziej znaczącego działającego bitu w kierunku najmniejszym ”. ( RFC 4632 sekcja 3.1 , wspomniana w odpowiedzi Sami, wskazuje na oficjalny standard omawiający notację CIDR.)

RFC 1878 strona 2 pokazuje standardową notację „maski podsieci” dla wszystkich podsieci IPv4 z wyjątkiem /0.

Zamierzam jednak nieco rozwinąć odpowiedź Sami, analizując „dlaczego” (z konkretnym przykładem, o który pytało pytanie) ...

Niektóre profesjonalne urządzenia Cisco obsługują coś, co nazywa się „maską wieloznaczną”, która odwraca bity. Tak więc normalna podsieć może być reprezentowana przez coś o nazwie 00000000.00000000.00000000.11111111.

W przypadku masek wieloznacznych Cisco nie istniała reguła, że ​​wszystkie zera muszą być pierwsze. Więc możesz użyć 00000000.00000000.00000000.11111110.

W ten sposób powstanie grupa zawierająca wszystkie parzyste adresy IP.

To było naprawdę ważne, aby wiedzieć, ponieważ obejmowało to szkolenie Cisco, więc proces sprawdzania profesjonalnych certyfikatów Cisco może zapytać o coś takiego.

Myślę jednak, że było to w większości bezużyteczne. Zamiast dzielić sieć na pół przy użyciu adresów parzystych lub nieparzystych, można po prostu podzielić sieć na pół przy użyciu adresów o niskim numerze i adresów o wysokim numerze, tworząc normalne podsieci, które są o połowę mniejsze.

Maski wieloznaczne z niesąsiadującymi bitami nie były zbyt przydatne i mogą być trudniejsze w pracy. Celem bitu maski podsieci ustawionej na 1 jest stwierdzenie, że bit pomaga zidentyfikować podsieć, w której znajduje się urządzenie. Nie ma istotnego powodu, aby te bity były rozmieszczone w całym adresie, zamiast po prostu ładnie grupować je na początku adresu . W rezultacie obsługa tego rodzaju masek była dodatkową złożonością bez większych korzyści.

Wydaje mi się, że Cisco ostatecznie zgodziło się, że takie nietradycyjne maski podsieci nie mają sensu, ponieważ ostatecznie zrezygnowały z obsługi „masek wieloznacznych”. Starsze zapory Pix obsługują „maski wieloznaczne”, ale nowsze jednostki ASA używają zamiast tego standardowych „masek podsieci” .

Nie próbowałbym nawet tworzyć sieci z nieciągłymi „bitami podsieci” w masce, ponieważ wiele programów podąża za nowszymi trendami / standardami i odrzuca taki projekt sieci. Nawet gdybym korzystał ze starszego oprogramowania, prawdopodobnie chciałbym, aby moja sieć mogła być łatwo modyfikowana, aby móc korzystać z nowszego oprogramowania bez konieczności przeprojektowywania sieci. Zatem ciągłe „bity podsieci” to jedyna droga.

Jeśli zadane zostanie pytanie w teście, z pewnością powiem, że wszystkie 1 muszą znajdować się na początku adresu. Właśnie tego każdy rozsądny tester chciałby, aby większość uczniów uczyła się w dzisiejszych czasach.

TOOGAM
źródło
+1 - Jedynie raz widziałem maski zastępcze używane bez wszystkich 1 na końcu, to maski, które zostały wprowadzone nieprawidłowo.
Mark Henderson
2

RFC 950 mówi w rozdziale 2.2:

 To support subnets, it is necessary to store one more 32-bit
  quantity, called my_ip_mask.  This is a bit-mask with bits set in
  the fields corresponding to the IP network number, and additional
  bits set corresponding to the subnet number field.

 The code then becomes:

   IF bitwise_and(dg.ip_dest, my_ip_mask)
                               = bitwise_and(my_ip_addr, my_ip_mask)
         THEN
             send_dg_locally(dg, dg.ip_dest)
         ELSE
             send_dg_locally(dg,
                    gateway_to(bitwise_and(dg.ip_dest, my_ip_mask)))

dlatego propozycja dotyczyła prostej operacji bitowej, która nie przejmuje się ciągłymi bitami.

W 1985 r. Procesor i pamięć były znacznie bardziej ograniczone, więc wszelkie bardziej złożone operacje po prostu nie pasowałyby do czasu.

Staje się to jeszcze bardziej wyraźne w rozdziale 3:

i że w sieci używane jest 3-bitowe pole podsieci (01011000), to znaczy maska ​​adresu to 255.255.255.88.

Te RFC wydają się jednak przestarzałe. Na przykład w systemie Windows 7 z dodatkiem SP1 nie można ustawić takiej maski podsieci:

Ciągła maska ​​podsieci wymagana w systemie Windows 7

Nawet w systemie Windows XP SP2 nie było to już możliwe:

Maska podsieci Windows XP SP2

Klonowany ReactOS systemu Windows 98 umożliwia jednak ustawienie „dziwnej” maski sieci:

Maska podsieci ReactOS

Thomas Weller
źródło
1

Zgadzam się z odpowiedzią @Sami Kuhmonen:

Sekcja 3.1 w dokumencie RFC pokazuje dozwolone maski w bezklasowym routingu między domenami. Bity muszą być ciągłe, aby routing działał poprawnie. Również logiczne myślenie nie miałoby sensu mieć dziwnych losowych masek sieciowych.

Jednak nawet jeśli nie jest to pożądane lub dozwolone, nadal można zdefiniować maskę podsieci nieciągłych 1. Powód tego:
identyfikator sieci i hosta są obliczane na podstawie adresu IP i maski podsieci przy użyciu operacji binarnych AND i XOR. Cała reszta jest nieistotna.

Testowałem to lata temu na Win 2000, działa. Oba komputery miały maskę 255.160.0.0. Były w sieci LAN bez routera, więc nie mogę powiedzieć o zachowaniu routera (zwykle maskę routera można ustawić tylko w interfejsie internetowym, który ją odrzuci).
Nie można również wprowadzić takiej „niepoprawnej” maski podsieci w odpowiednim polu ustawień sieciowych; GUI nie chce tego wziąć. Ale możesz oszukiwać, zmieniając go bezpośrednio w rejestrze. Następnie uruchom ponownie lub wyłącz + włącz kartę sieciową, aby zmiany stały się aktywne.
Cel tego wszystkiego: uhm, prawdopodobnie żaden.

Tobias Knauss
źródło
Dziękujemy za udostępnienie, ale nie kwalifikuje się to jako samodzielna odpowiedź. Powinien to być komentarz do odpowiedzi Sami Kuhmonen.
agtoever
2
Zbyt długo na komentarz ... Nie oczekuję też, że zostanie oznaczony jako odpowiedź.
Tobias Knauss,
@agtoever: Po edycji i dodaniu większej ilości szczegółów myślę, że kwalifikuje się teraz jako samodzielna odpowiedź, ponieważ zawiera wiele informacji, które nie są częścią innych odpowiedzi.
Tobias Knauss,
„Działa na jednej implementacji” nie jest jednak dobrą odpowiedzią. I to nie tylko „działa na jednym systemie operacyjnym”, nie, najwyraźniej przetestowałeś jeden konkretny komputer z (co ważne) jedną siecią. Oznacza to, że nie sprawdziłeś, czy kod routingu podsieci w systemie Windows 2000 rzeczywiście działa, i właśnie tam potrzebne są identyfikatory sieci. Czy możesz trasować między dwiema nie sąsiadującymi 255.160.0.0sieciami?
MSalters
@MSalters Działa na jednej implementacji nadal oznacza, że ​​działa. Nie twierdziłem, że mówię o wszystkich możliwych konfiguracjach systemu operacyjnego. A jak myślisz, w jaki sposób pakiety przechodzą z jednego komputera na drugi? Komputer musi znać trasę. Dlatego musi obliczyć, czy komputer docelowy znajduje się w tej samej podsieci (wyślij pakiet bezpośrednio), czy daleko (zapytaj skonfigurowaną bramę o trasę). // Nie, nie sądzę, żebym mógł wykonać taki routing, ponieważ te maski podsieci nie były przeznaczone do użycia. Pokazałem przypadek, w którym działał, ale bez innej podsieci. Może to też działa, kto wie ...
Tobias Knauss