Warum können nicht alle Nullen im Host-Teil der IP-Adresse für einen Host verwendet werden?

21

Ich weiß, dass ich, wenn ich ein Netzwerk 83.23.159.0/24habe, 254 verwendbare Host-IP-Adressen habe, weil:

83.23.159.0      (in binary: host portion all zeros) is the subnet address
83.23.159.1-254  are host addresses
83.23.159.255    (in binary: host portion all ones) is the broadcast address

Ich verstehe die Verwendung einer Broadcast-Adresse, aber ich verstehe nicht, wofür die Subnetzadresse jemals verwendet wird. Ich kann keinen Grund dafür erkennen, dass die Zieladresse eines IP-Pakets auf die Subnetzadresse festgelegt wird. Warum benötigt das Subnetz selbst eine Adresse, wenn es niemals der Endpunkt für einen IP-Fluss sein soll? Für mich ist es eine Verschwendung, diese Adresse nicht als Hostadresse verwenden zu dürfen.

Zusammenfassend sind meine Fragen:

  1. Wurde für das Ziel eines IP-Pakets jemals die IP-Adresse des Subnetzes festgelegt?
  2. Wenn ja, in welchen Fällen und warum?
  3. Wenn nein, geben Sie diese Adresse dann frei, damit sie von einem Host verwendet werden kann.
Grezzo
quelle
2
ifconfigbeschwert sich nicht, wenn Sie die Host-Adresse eines 24-Net auf 0 oder 255 setzen. Versuchen Sie es einfach.
ott--
2
Ich tat. Es scheint für eine .0 zu funktionieren. Aber es könnte ältere Software kaputt machen. .255 funktioniert auch, wenn Sie keine Protokolle verwenden, die Broadcast erfordern. Ich denke, Sie können es einrichten, wenn Sie die ARP-Tabellen mit permanenten Adressen auf allen Computern manuell konfigurieren, aber yuk!
Hennes
Mögliches Duplikat von Wie funktioniert IPv4-Subnetting?
John Gardeniers
1
Ich bin nicht einverstanden mit diesem John. Ich habe es noch einmal überprüft und es geht nicht auf die spezifische gestellte Frage ein. Welches ist eher ein Randfall.
Hennes
1
Diese Frage wird nun auch auf einer neuen Network Engineering Site gestellt. Diese Antworten (unter http://networkengineering.stackexchange.com/questions/11200/what-is-the-purpose-of-network-address-aka-subnet-address ) enthalten Informationen, die noch nicht in den Beiträgen von Server Fault enthalten sind .
Hennes

Antworten:

12

Wurde für das Ziel eines IP-Pakets jemals die IP-Adresse des Subnetzes festgelegt?

Ja. Es ist eine gültige IP, so dass es verwendet werden kann.

Wenn ja, in welchen Fällen und warum?

Es ist einfach eine der 255 verwendbaren IPs in a / 24

Wenn nein, geben Sie diese Adresse dann frei, damit sie von einem Host verwendet werden kann.

Wenn Sie alte Hardware haben, müssen Sie prüfen, ob die erste oder die letzte Adresse als Netzwerkadresse verwendet wird. (.0 oder .255 für Netzwerke mit Maske FF.FF.FF.00)

Dies macht es zu einer guten Gewohnheit, diese IP zu überspringen. Und Gewohnheiten, die vor langer Zeit gelernt wurden, sind schwer zu ignorieren.

Und Leute, die den Hintergrund nicht kennen, benutzen ihn nicht, "weil andere ihn auch nicht benutzen, es muss also falsch sein, ihn zu benutzen" oder weil sie nicht erkennen, dass "0" eine erste Zahl sein kann.

[Bearbeiten] Grezzo hat es gerade unter Windows XP getestet, wobei die Windows-Netzwerk-GUI diese Einstellung "hilfreich" verhinderte. Windows 7 hat das gleiche Verhalten. Ich habe es dann auf einem Nicht-Windows-Host versucht, auf dem es nur funktioniert. Wenn Sie Windows verwenden, müssen Sie Ihr Netzwerk möglicherweise manuell über IPconfig konfigurieren, um alle Nullen festzulegen.

192.168.1.0_on_win7 192.168.1.0_on_FreeBSD

[Bearbeiten 2]

Je länger ich damit arbeite, desto verwirrter werde ich.

Rfc4632 - Classless Inter-Domain Routing scheint es nicht zu verbieten, erlaubt es aber auch nicht explizit.

In diesem ServerFault-Beitrag wird Folgendes erwähnt: "Aus historischen Gründen behandeln viele Betriebssysteme die erste Adresse als Broadcast. Wenn Sie beispielsweise unter OS X, Linux und Solaris in meinem lokalen (/ 24) Netzwerk xxx0 pingen, erhalten Sie Antworten. Windows lässt Sie nicht pingen Standardmäßig die erste Adresse, aber Sie können sie möglicherweise mithilfe der SetIPUseZeroBroadcast-WMI-Methode aktivieren. Ich frage mich, ob Sie die Verwendung von .0 als Hostadresse in einem All-Windows-Netzwerk vermeiden können. " .

Es ist die gleiche Frage, aber keine Antwort.

Die Netzwerkadresse wird auch in Routingtabellen verwendet. Aber ich verstehe nicht, warum es aus diesem Grund nicht funktionieren würde. Dieselbe Notation in den Routingtabellen würde zum richtigen Netzwerk weiterleiten. Sobald es sich im richtigen Netzwerk befindet, kommt es zu einem PC mit IP 0.

(All dies gilt für 192.168.1 / 24.
Wenn Sie 192.168.0 / 23 verwenden, ist 192.168.1.0 ein gültiger und sicherer Wert in der Mitte des Bereichs.)

[Bearbeiten 3]

Noch ein Link zur selben Frage. Beim Stapelaustausch scheint es ein wenig populär zu sein:

/superuser/379451/why-can-a-network-address-not-be-a-valid-host-address

Und ein Gedanke:

Destination_IP wird wahrscheinlich mit dem Netzwerkmast UND- verknüpft (eine schnelle Operation in der Hardware), bevor sie mit den Einträgen in den Routingtabellen verglichen wird. Aber:

(Eine halbzufällige IP) 192.168.0.42 UND 255.255.255.0 würden 192.168.0.0 ergeben,
aber 192.168.0.0 UND 255.255.255.0 würden auch 192.168.0.0 ergeben


[Bearbeiten 4 - Lange nachdem diese Antwort geschrieben wurde - Ich muss den gesamten Beitrag aufgrund dieser neuen Informationen möglicherweise umschreiben. ]

RFC923 besagt auf Seite 3, dass:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

Zitieren von @ylearn auf unserer Networkengineering-Site

Ich glaube, die erste Dokumentation dazu stammt aus RFC950, das auf RFC943 verweist (das RFC923 oben veraltet hat, aber für spezielle Adressen dieselbe Sprache verwendet):

     It is useful to preserve and extend the interpretation of these
     special addresses in subnetted networks.  This means the values
     of all zeros and all ones in the subnet field should not be
     assigned to actual (physical) subnets.
Hennes
quelle
So zu klären, sagen Sie , dass xxx0 / 24 ist eine gültige IP - Adresse für einen Host? Wenn dem so ist, warum sagt Windows XP dann (wenn ich versuche, meine IP-Adresse mit einer Netzmaske von 255.255.255.0 auf 192.168.1.0 zu setzen) " Die Kombination von IP-Adresse und Subnetzmaske ist ungültig. Alle Bits in der Host-Adresse Teil der IP-Adresse sind auf 0 festgelegt. Bitte geben Sie eine gültige Kombination aus IP-Adresse und Subnetzmaske. "
Grezzo
3
Windows ist falsch. (Oder mit weniger Kraft gesagt: Windows ist zu vorsichtig, um mit jeder Kombination von Systemen zu arbeiten). Ich habe dies gerade auf meinem Windows 7-System ausprobiert und den gleichen Fehler wie Sie erhalten. Ich habe ein sauberes FreeBSD-System installiert und es dort getestet, wo es gerade funktioniert. (Ich werde das der Post hinzufügen)
Hennes
Danke, du warst wirklich hilfreich. Ich wollte nur hinzufügen, dass die GUI in OS X Sie auch nicht dazu bringt, aber ich wette, dass ifconfig dies tun würde. Ich kann nicht verstehen, warum die Antwort von m0ntassar mehr Stimmen hat - es wird nicht einmal versucht, meine Frage zu beantworten. Eine Sache noch; wenn Sie sagen : „ Wenn Sie alte Hardware haben , dann müssen Sie prüfen , ob es die erste oder die letzte Adresse als Netzwerkadresse verwendet. “ Wollen Sie damit sagen Broadcast - Adresse .
Grezzo
Ja, ich meinte die Sendeadresse. Verdammt, wo ist dieser "Kommentar bearbeiten älter als 5 Minuten" -Button.
Hennes
Süß, ich habe gerade versucht, .0 und .255 zu pingen. Beide Male hat meine PS3 geantwortet (alles andere ist drahtlos, ich denke, deshalb ist es zuerst da reingekommen) warum (normalerweise) sollten wir auch nicht für eine echte Hostadresse verwenden.
Grezzo
15

Eine Adresse mit einem Hostanteil von Null bezieht sich auf das Netzwerk selbst und nicht auf einen bestimmten Host.

In der Vergangenheit diente diese Null-Host-Adresse als alternative Broadcast-Adresse, und Geräte reagieren immer noch auf diese Weise.

Daher muss ich anderen Antworten nicht zustimmen: Nein, Null ist keine perfekt verwendbare Hostadresse. Wenn Sie mehr als 254 Adressen benötigen, müssen Sie ein größeres Subnetz erstellen.

Schau mal, mein Linksys Router, dessen Adresse .1auf Pings von reagiert .0. (Die Netzmaske ist 255.255.255.0, also entspricht das letzte Oktett der Hostnummer.)

webserver:~# ping  192.168.1.0
Do you want to ping broadcast? Then -b
webserver:~# ping -b 192.168.1.0
WARNING: pinging broadcast address
PING 192.168.1.0 (192.168.1.0) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.46 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.812 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.819 ms

Wenn ich die .0Adresse einem Host zuweisen würde, könnte ich sie nicht anpingen, ohne dass sich der Router auch mit den Antworten anmeldet. Und wie Sie sehen können, wie einige Tools , die Router-Version von pingtreat 0als Broadcast.

Sie können die Regeln biegen, wenn Sie bereit sind, alle Protokollstacks und andere Software, die von einem solchen Biegen betroffen sind, zu patchen. Ansonsten halte dich an die Regeln.

Ein typisches Beispiel.

Ich habe bei einer Firma gearbeitet, die einen Netzwerkknoten in einem Gehäuse mit 14 Steckplätzen entworfen hat, auf dem zahlreiche unabhängige Betriebssystem-Images auf verschiedenen Kartentypen ausgeführt wurden, die alle über eine Rückwandplatine kommunizierten. Über der Rückwandplatine gab es eine Netzwerkeinrichtung mit einer Konvention, bei der 127.X.0.Yes sich um die interne IP-Adresse des Knotens Y in Steckplatz X handelt, die alle von 1 nummeriert sind.

Grundsätzlich haben wir die Loopback-Adresse für unsere eigenen Zwecke subnettiert. Damit es funktioniert, mussten wir hier und da den Linux-Kernel patchen und IIRC, ein bisschen User-Space.

Da dieses Netzwerk nur innerhalb der Box verwendet wurde und die meisten Programme, die Loopback benötigen, das 127.0.*Netzwerk (und tatsächlich die spezifische Adresse 127.0.0.1) verwenden, das weiterhin normal funktioniert, war alles cool.

Kaz
quelle
7

eigentlich kommt es auf die netzmaske an, zum beispiel für das netzwerk 83.23.159.0/23, 83.23.159.0 ist eine einwandfrei verwendbare ip-adresse

m0ntassar
quelle
3
+1 - 83.23.158.255 wäre auch eine gültige Hostadresse. Die Leute hängen an der Regel Nr. 0 und Nr. 255, ohne die Subnetzmaske zu berücksichtigen.
Joeqwerty
1
Mir ist bekannt, dass eine xxx0-Adresse mit einer Netzmaske von weniger als / 24 gültig ist. Beachten Sie jedoch, dass ich in meiner Frage eine / 24-Netzmaske angegeben habe, sodass Sie meine Frage nicht beantwortet haben. Ich habe nicht über alle 0s oder 255s im letzten Quartett / Byte gesprochen, sondern alle 0s oder 255s im "Host-Teil" der IP-Adresse. Dies berücksichtigt die Netzmaske.
Grezzo
2
@Grezzo kurze Antwort: Nicht-CIDR und Legacy-Zeug bricht mit .0, MS verbietet es einfach komplett. Aber IPv6 steht unmittelbar bevor, warum sollten Sie sich also Sorgen machen? ;)
Sammitch
2
Dies ist keine wirkliche Antwort, da es sich bei der Frage nicht wirklich um die Numerologie der Punktnotation handelt, sondern um den Status / die Bedeutung einer 0-Hostadresse in einem Subnetz beliebiger Breite.
Kaz
2
Ich verstehe nicht, warum diese Antwort so viele Stimmen hat. 83.23.159.0/23 ist "technisch" kein gültiges Netzwerk. 83.23.159.0 mit einer 23er Maske ist eigentlich eine IP mitten im 83.23.158.0/23 Netzwerk. Die Frage lautete nicht "Warum kann ich am Ende der IP keine .0 haben?", Sondern "Warum kann ich die Adresse nicht mit Nullen für den Host-Teil verwenden?". In Ihrem Beispiel wäre die Adresse "Alle Host-Nullen" 83.23.158.0. Wie in anderen Antworten erwähnt, handelt es sich historisch gesehen um eine nicht verwendbare Adresse (die "Netzwerkadresse"), und obwohl dies unter manchen Betriebssystemen funktioniert, ist es nicht ratsam, sie zu versuchen und zu verwenden.
USD Matt
3

Klingt so, als ob hier ein wenig Verwirrung mit der grundlegenden Vernetzung herrscht.

Die "alte Hardware", auf die in einer der Antworten verwiesen wird, würde IP-Subnetz-Null nicht verwenden - die Verwendung der IP-Adresse xxx0 mit einem Netzwerk, das für eine / 24-CIDR- oder 255.255.255.0-Subnetzmaske eingerichtet wurde, ist ein völlig anderes Problem.

IP-Subnetz Null

  • Ältere Hardware verwendet IP Subnet Zero nicht. Dies bedeutet, dass das erste Subnetz in einem Netzwerksystem mit mehreren Subnetzen nicht verwendet wird. In einem / 23- oder 255.255.254.0-Netzwerk werden das Subnetz XXX0 und alle seine Adressen nicht verwendet. Moderne Router haben diese Einschränkung nicht, können aber so konfiguriert werden, dass sie dieses alte Modell verwenden. IE verwendet auf Wunsch kein Subnetz Null.

Verwendbare Host-IP-Adressen in einem Subnetz

  • Grundlegende Vernetzung:
    • Mit / 24 dh Subnetzmaske von 255.255.255.0
    • xxx0 ist als Netzwerkadresse reserviert. Router und Routing-Protokolle (EIGRP, RIP2 usw.) verwenden die Netzwerkadresse, um Netzwerksegmente für das Verschieben von Paketen innerhalb und über Netzwerkgrenzen hinweg zu definieren.
    • xxx255 ist für die Broadcast-Adresse reserviert
    • Es ist üblich, die Adressen .1 oder .254 auf Routern zu verwenden, sodass 253 verwendbare IP-Nummern übrig bleiben.

Sowohl die Netzwerkadresse als auch die Broadcast-Adresse sind reserviert und können (nach aktuellen und früheren Netzwerkstandards) keinem Gerät zugewiesen werden. Die Verwendung von xxx0 für eine Hostadresse auf einem / 24-System ist falsch. Selbst wenn Linux Sie verwenden lässt, bedeutet dies nicht, dass es richtig ist, sondern nur, dass Linux denkt, dass Sie wissen, was Sie tun.

Wenn Ihr System zulässt, dass Sie einem Host xxx0 als IP4-Adresse zuweisen, und es scheint, dass dies funktioniert. Möglicherweise empfängt ein bestimmter Host ALLEN Datenverkehr, der auf ein beliebiges Gerät in diesem Netzwerk gerichtet ist, sodass dessen Netzwerk möglicherweise nicht optimal funktioniert.

TheSteven
quelle
1
Sie haben gesagt, " xxx0 ist als Netzwerkadresse reserviert (als globale Adresse oder als Zeiger auf das gesamte Subnetz) ", aber nicht erklärt, wofür es tatsächlich verwendet wird, und daher nicht erklärt, warum es nicht für einen Host verwendet werden kann
Grezzo
2
Mein Beitrag wurde aktualisiert. Das Fazit ist, dass die Zuweisung der Netzwerkadresse zu einem Gerät gegen die Spezifikationen verstößt und Sie möglicherweise in einem kleinen Stub-Netzwerk davonkommen, das Risiko einzugehen, dass Ihr Router ein Software-Update erhält (oder wenn Sie den Router wechseln) ), dass das Gerät oder Ihr gesamtes Netzwerk möglicherweise nicht mehr ordnungsgemäß funktioniert.
TheSteven
3

RFC 1122 ("Anforderungen für Internet-Hosts - Kommunikationsschichten") verbietet Folgendes:

IP-Adressen dürfen für keines der Felder <Hostnummer>, <Netzwerknummer> oder <Subnetznummer> den Wert 0 oder -1 haben

Bryan
quelle
1
So weit es geht. Wenn Sie jedoch, wie empfohlen, zu Abschnitt 3.3.6 gehen, erhalten Sie die vollständige Erklärung.
Michael Hampton
@MichaelHampton Weil BSD 4.2 0 als Broadcast verwendet?
Grezzo
3
@Grezzo So ziemlich. Sie stecken fest, weil die 80er einfach nicht sterben werden.
Michael Hampton
0

Tatsächlich ist die Antwort die Grundlage der Teilnetze. Die IP-Adresse "Alle Nullen" Ihres Subnetzes in Kombination mit der Netzwerk-ID wird verwendet, um zu berechnen, wohin das Paket gesendet werden muss.

In Ihrem Beispiel haben Sie ein Subnetz von 255.255.255.0. Jedes Gerät, das das TCP / IP-Protokoll kennt, verwendet die Netzmaske in Kombination mit der IP-Adresse, um zu berechnen, ob das Paket für das lokale Netzwerk bestimmt ist (durch Ausführen einer logischen UND-Operation) oder über das Gateway / den Router gesendet werden muss.

Ich denke, der Grund, warum IP nicht verwendet werden kann, ist, dass es bereits verwendet wird, um die Netzwerkgrenzen zusammen mit der Netzmaske von Entwurf zu "definieren".

Goez
quelle
Sie sagen: " Jedes Gerät, das das TCP / IP-Protokoll kennt, verwendet die Netzmaske in Kombination mit der IP-Adresse, um zu berechnen, ob das Paket für das lokale Netzwerk bestimmt ist (durch Ausführen einer logischen UND-Operation) ", aber ANDing 83.23.159.0 with 255.255 .255.0 und ANDing 83.23.159.1 mit 255.255.255.0 führen zu demselben Ergebnis (83.23.159.0). Verwenden Sie diese Berechnung, um herauszufinden, ob sie für das Netzwerk oder den Router bestimmt ist, auch wenn ein Host die .0-Adresse hat
Grezzo
0

Ich wurde gebeten, meine Antwort von NetworkEngineering erneut zu senden , daher werde ich dies mit einigen Änderungen für diese Site tun.

In RFC919 wird auf die allgemeine Akzeptanz der Netzwerkadresse verwiesen:

However, as a notational convention, we refer to
networks (as opposed to hosts) by using addresses with zero fields.
For example, 36.0.0.0 means "network number 36"

Dies ist eine Konvention, die unser Verständnis verdeutlichen sollte, wenn jemand "10.1.2.0" als Netzwerk und nicht als Host im Netzwerk erwähnt.

Von dort wurde die Verwendung von "0" in einer IP-Adresse in RFC923 definiert und in aufeinander folgenden RFCs übertragen:

Special Addresses:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

In diesem Beispiel wird ein bestimmter Host im aktuellen Netzwerk (0.0.0.37) bereitgestellt, indem in den Netzwerkteilen der Adresse Nullen verwendet werden. Der umgekehrte Fall wird jedoch nicht klargestellt (Nullen im Hostteil der Adresse). Wie auch immer, da es "0" als "dies" definiert hat.

In RFC1060 wurde die Adresse "0.0.0.0" eindeutig als "dieser Host in diesem Netzwerk" dokumentiert:

     (a)   {0, 0}

        This host on this network.  Can only be used as a source
        address (see note later).

Da alle Nullen für den Host-Teil der Adresse "diesen Host" bedeuteten, folgt logischerweise, dass er als Host-Adresse unbrauchbar ist.

Zurück zur direkten Beantwortung Ihrer Fragen:

  1. Wurde für das Ziel eines IP-Pakets jemals die IP-Adresse des Subnetzes festgelegt?
  2. Wenn ja, in welchen Fällen und warum?
  3. Wenn nein, geben Sie diese Adresse dann frei, damit sie von einem Host verwendet werden kann.

Nach dem, was ich in den RFCs finde, sollte dies nicht verwendet werden. Ich gebe zu, dass es nicht so klar definiert ist, wie ich es gerne hätte, aber das ist in vielen Standards allzu häufig. Wenn die Standards in einem Punkt etwas weniger konkret sind, scheint sich die Branche mit einer allgemein akzeptierten Interpretation "abzufinden".

Ferner kann basierend auf dem Inhalt der RFCs-Software geschrieben werden, dass angenommen wird, dass diese Adresse verwendet wird, um das Netzwerk und nicht einen bestimmten Host zu adressieren. Oder noch wörtlicher als eine Art "Loopback" (dh dieser Host im angegebenen Netzwerk).

Warum lassen einige Betriebssysteme die Verwendung eindeutig zu? Ich würde mir viele Dinge vorstellen, die auf die Zeit / Ressourcen des Entwicklers zurückzuführen sind, oder niemand hat wirklich daran gedacht, die Gültigkeitsprüfung hinzuzufügen. Die Logik muss etwas komplizierter sein als "wenn sie mit 0 endet", da ein größeres Subnetz (a / 23 oder größer) eine gültige IP-Adresse von .255 und .0 enthält (dh 10.1.2.0/23 enthält beide gültige IP-Adressen) Adresse von 10.1.2.255 und 10.1.3.0). Obwohl einige Organisationen auch die Verwendung dieser gültigen Adressen in größeren Subnetzen vermeiden, um ungewöhnliche Probleme mit Software zu vermeiden, die moderne Subnetze nicht korrekt unterstützt.

Wenn Sie diese eine IP-Adresse freigeben möchten, kommt es lediglich auf das Kosten-Nutzen-Verhältnis an. Es würde viel Zeit und Mühe kosten, diese Änderung vorzunehmen, um eine IP-Adresse pro Subnetz zurückzugewinnen. In wie vielen Fällen, in denen Sie zusätzliche IP-Adressen benötigen, ist nur eine Adresse ausreichend? Es ist viel einfacher, ein zweites Subnetz hinzuzufügen oder das aktuelle Subnetz zu vergrößern, wodurch Sie möglicherweise viele Adressen anstelle von nur einer verwenden können, ohne größere Änderungen an vorhandener Software / Hardware vorzunehmen.

YLearn
quelle