Sind Subnetze immer zusammenhängende Einsen? [Duplikat]


25

Ich verstehe die Grundvoraussetzung hinter Subnetzmasken, wie z 255.255.255.0. Aber alle Subnetz-Beispiele, die ich gesehen habe, waren (von links nach rechts) zusammenhängende Einsen (HI-Bits). Zum Beispiel übersetzt 255.255.0.0( /16) in die folgenden Oktette:

11111111 . 11111111 . 00000000 . 00000000

Ich bin der Meinung, dass diese Bits zusammenhängend sein müssen , da der springende Punkt der Teilnetze darin besteht, die Host-ID und Bereiche der verfügbaren Geräte-IDs abzuleiten. Aber ich frage mich, ob Sie jemals eine Subnetzmaske von etwa 255.17.255.0haben oder:

11111111 . 00010001 . 11111111 . 00000000
  • Würde das jemals passieren? Oder ist es unmöglich, dass Subnetze ohne zusammenhängende Einsen existieren? Wenn ja warum?
  • Andernfalls, wenn dies möglich ist, warum würden Sie (einige konkrete Beispiele)?

@MSalters Damit Sie wissen, wurde der automatische Kommentar in "Mögliches Duplikat von ..." geändert, sodass Sie den Kommentar nicht mehr manuell eingeben müssen. ;-)
Chris Jester-Young

Kurze Antwort: Ja, Sie haben recht.
Octopus

Antworten:


18

Der Abschnitt 3.1 im RFC zeigt die zulässigen Masken im klassenlosen Inter-Domain-Routing. Die Bits müssen zusammenhängend sein, damit das Routing ordnungsgemäß funktioniert.

Auch wenn man logisch denkt, wäre es nicht wirklich sinnvoll, seltsame zufällige Netzwerkmasken zu haben.


28

Ja, die einfache Art, darüber nachzudenken, ist, dass Subnetzmasken immer 1s am Anfang sind. Wenn ein Subnetzgrößenindikator zu Beginn der Binärdarstellung keine 1 hat, würde ich sagen, dass der Subnetzgrößenindikator nach modernen Standards keine richtige „Subnetzmaske“ ist.

RFC 1219 besagt, dass der frühere RFC 950 nicht zusammenhängende Bits zulässt. Tatsächlich gibt es in RFC 950 Seite 15 (Abschnitt 3) ein Beispiel, das „nicht zusammenhängende Subnetzbits veranschaulicht“. Es gibt jedoch keine Möglichkeit, solche Subnetze in die CIDR-Notation umzuwandeln. Die CIDR-Notation wird von IPv6 verwendet (at Spätestens seit RFC 1884 (Seite 7 , erster Satz von Abschnitt 2.4) wurden nicht zusammenhängende Bits für IPv6-Netzwerke nie in großem Umfang unterstützt. Die Methode von RFC 1219 gibt an, dass „Subnetzbits (Maske = 1) vom höchstwertigen Bit zugewiesen werden zum mindesten ". (Der in Samis Antwort erwähnte RFC 4632-Abschnitt 3.1 verweist auf einen offiziellen Standard, der die CIDR-Notation behandelt.)

RFC 1878 Seite 2 zeigt die Standardnotation „Subnetzmaske“ für alle IPv4-Subnetze mit Ausnahme von /0.

Ich werde jedoch ein wenig auf Samis Antwort eingehen und das „Warum“ untersuchen (mit einem konkreten Beispiel, wie es die Frage verlangt hat) ...

Einige professionelle Cisco-Geräte unterstützen eine sogenannte "Wildcard-Maske", die die Bits invertiert. Ein normales Subnetz könnte also durch etwas namens dargestellt werden 00000000.00000000.00000000.11111111.

Bei den Wildcard-Masken von Cisco gab es keine Regel, dass alle Nullen zuerst gesetzt werden mussten. Du könntest es also gebrauchen 00000000.00000000.00000000.11111110.

Das würde dazu führen, dass eine Gruppe erstellt wird, die alle geraden IP-Adressen enthält.

Dies war eigentlich wichtig zu wissen, da die Schulung von Cisco dies abdeckte und der Prüfungsprozess für die professionellen Zertifizierungen von Cisco daher möglicherweise nach so etwas fragt.

Ich denke jedoch, dass es größtenteils nutzlos war. Anstatt ein Netzwerk durch geradzahlige oder ungeradzahlige Adressen in zwei Hälften zu teilen, können Sie ein Netzwerk auch durch Adressen mit niedriger und hoher Nummer in zwei Hälften teilen, indem Sie normale Teilnetze erstellen, die halb so groß sind.

Platzhaltermasken mit nicht zusammenhängenden Bits waren nicht besonders nützlich und könnten schwieriger zu handhaben sein. Der Sinn des auf 1 gesetzten Subnetzmaskenbits besteht darin, zu sagen, dass dieses Bit dazu beiträgt, zu identifizieren, in welchem ​​Subnetz sich ein Gerät befindet. Es gibt keinen zwingenden Grund, diese Bits über die Adresse zu verteilen, anstatt sie einfach am Anfang der Adresse zu gruppieren . Das Ergebnis war, dass die Unterstützung dieser Maskentypen eine zusätzliche Komplexität ohne wesentlichen Nutzen darstellte.

Ich denke, Cisco war sich schließlich einig, dass solche nicht-traditionellen Subnetzmasken keinen Sinn machen, da sie schließlich die Unterstützung für "Wildcard-Masken" aufgeben. Die älteren Pix-Firewalls unterstützen "Wildcard-Masken", aber die neueren ASA-Einheiten verwenden stattdessen standardmäßige "Subnetzmasken" .

Ich würde nicht einmal versuchen, ein Netzwerk mit nicht zusammenhängenden "Subnetzbits" in der Maske zu erstellen, da viele Softwareprodukte den neueren Trends / Standards folgen und ein solches Netzwerkdesign ablehnen würden. Selbst wenn ich ältere Software verwenden würde, möchte ich wahrscheinlich, dass mein Netzwerk einfach geändert werden kann, um neuere Software zu verwenden, ohne dass das Netzwerk neu gestaltet werden muss. Daher sind zusammenhängende „Subnetzbits“ der einzige Weg.

Wenn Ihnen die Frage zu einem Test gestellt wird, kann ich mit Zuversicht sagen, dass alle Einsen am Anfang der Adresse stehen müssen. Das ist es, was jeder vernünftige Tester möchte, dass die Mehrheit der Schüler heutzutage lernt.


+1 - Das einzige Mal, dass ich Wildcard-Masken ohne alle Einsen am Ende gesehen habe, sind Masken, die falsch eingegeben wurden.
Mark Henderson

2

RFC 950 sagt in Kapitel 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)))

Der Vorschlag handelte also von einer einfachen Bitoperation, die sich nicht um zusammenhängende Bits kümmert.

Im Jahr 1985 waren CPU und Arbeitsspeicher wesentlich eingeschränkter, so dass komplexere Vorgänge einfach nicht in die Zeit passen würden.

In Kapitel 3 wird es noch deutlicher:

und dass im Netzwerk ein 3-Bit-Subnetzfeld verwendet wird (01011000), dh die Adressmaske ist 255.255.255.88.

Diese RFCs scheinen jedoch veraltet zu sein. Unter Windows 7 SP1 ist es beispielsweise nicht möglich, eine solche Subnetzmaske festzulegen:

Unter Windows 7 ist eine zusammenhängende Subnetzmaske erforderlich

Selbst unter Windows XP SP2 war dies nicht mehr möglich:

Subnetzmaske Windows XP SP2

Der Windows 98-Klon ReactOS erlaubt jedoch das Setzen der "seltsamen" Netzmaske:

ReactOS-Subnetzmaske


1

Ich stimme der Antwort von @Sami Kuhmonen zu:

Der Abschnitt 3.1 im RFC zeigt die zulässigen Masken im klassenlosen Inter-Domain-Routing. Die Bits müssen zusammenhängend sein, damit das Routing ordnungsgemäß funktioniert. Auch wenn man logisch denkt, wäre es nicht wirklich sinnvoll, seltsame zufällige Netzwerkmasken zu haben.

Selbst wenn dies nicht erwünscht oder erlaubt ist, ist es dennoch möglich, eine Subnetzmaske mit nicht aufeinanderfolgenden Einsen zu definieren. Der Grund dafür:
Die Netzwerk-ID und die Host-ID werden aus der IP-Adresse und der Subnetzmaske mit den Binäroperationen AND und XOR berechnet. Alles andere ist irrelevant.

Ich habe das vor Jahren auf Win 2000 getestet, es funktioniert. Beide Computer hatten eine 255.160.0.0-Maske. Sie befanden sich in einem LAN ohne Router, daher kann ich das Verhalten des Routers nicht beurteilen (normalerweise können Sie die Router-Maske nur in dessen Web-Oberfläche festlegen, wodurch sie abgelehnt wird).
Sie können eine solche "ungültige" Subnetzmaske auch nicht in das entsprechende Feld der Netzwerkeinstellungen eingeben. die GUI lehnt es ab. Aber Sie können schummeln, indem Sie es direkt in der Registrierung ändern. Starten Sie anschließend die Netzwerkkarte neu oder deaktivieren und aktivieren Sie sie, damit die Änderungen wirksam werden.
Der Zweck von alledem: ähm, wahrscheinlich keiner.


Vielen Dank für das Teilen, dies ist jedoch keine eigenständige Antwort. Es sollte ein Kommentar zu Sami Kuhmonens Antwort sein.
Am

2
Viel zu lang für einen Kommentar ... Ich erwarte auch nicht, dass er als Antwort markiert wird.
Tobias Knauss

@agtoever: Nach der Bearbeitung und Hinzufügung weiterer Details ist es meiner Meinung nach jetzt eine eigenständige Antwort, da es viele Informationen gibt, die nicht Teil anderer Antworten sind.
Tobias Knauss

"Funktioniert mit einer Implementierung" ist jedoch keine gute Antwort. Und es ist nicht nur "funktioniert auf einem Betriebssystem", nein, Sie haben anscheinend einen bestimmten PC mit (wichtig) einem Netzwerk getestet. Das bedeutet, dass Sie nicht überprüft haben, ob der Subnetz-Routing-Code in Windows 2000 tatsächlich funktioniert, und genau dort sind Netzwerk-IDs erforderlich. Könnten Sie zwischen zwei nicht benachbarten 255.160.0.0Netzwerken routen ?
MSalters

@MSalters Funktioniert eine Implementierung, bedeutet dies immer noch, dass sie funktioniert. Ich habe nicht behauptet, für alle möglichen Betriebssystemkonfigurationen zu sprechen. Was denkst du auch darüber, wie die Pakete von einem PC zum anderen gelangen? Der Computer muss die Route kennen. Daher muss berechnet werden, ob sich der Zielcomputer im selben Subnetz befindet (das Paket direkt senden) oder weit entfernt (eine Route vom konfigurierten Gateway abfragen). // Nein, ich glaube nicht, dass ich ein solches Routing durchführen könnte, da diese Subnetzmasken nicht zur Verwendung gedacht waren. Ich habe einen Fall demonstriert, in dem es funktioniert hat, aber ohne ein anderes Subnetz. Vielleicht funktioniert das auch, wer weiß ...
Tobias Knauss
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.