Ich weiß, dass ich, wenn ich ein Netzwerk 83.23.159.0/24
habe, 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:
- Wurde für das Ziel eines IP-Pakets jemals die IP-Adresse des Subnetzes festgelegt?
- Wenn ja, in welchen Fällen und warum?
- Wenn nein, geben Sie diese Adresse dann frei, damit sie von einem Host verwendet werden kann.
ifconfig
beschwert sich nicht, wenn Sie die Host-Adresse eines 24-Net auf 0 oder 255 setzen. Versuchen Sie es einfach.Antworten:
Ja. Es ist eine gültige IP, so dass es verwendet werden kann.
Es ist einfach eine der 255 verwendbaren IPs in a / 24
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.
[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:
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):
quelle
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
.1
auf Pings von reagiert.0
. (Die Netzmaske ist255.255.255.0
, also entspricht das letzte Oktett der Hostnummer.)Wenn ich die
.0
Adresse 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 vonping
treat0
als 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.Y
es 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 Adresse127.0.0.1
) verwenden, das weiterhin normal funktioniert, war alles cool.quelle
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
quelle
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
Verwendbare Host-IP-Adressen in einem Subnetz
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.
quelle
RFC 1122 ("Anforderungen für Internet-Hosts - Kommunikationsschichten") verbietet Folgendes:
quelle
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".
quelle
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:
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:
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:
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:
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.
quelle