Stellen 0.0.0.0:0 und *: * dasselbe dar?


23

Ich habe netstat (in Windows) verwendet, um die empfangenen Ports für TCP und UDP anzuzeigen:

Bildbeschreibung hier eingeben

Ich bemerkte , dass in der Außen Adresse Spalte, UDP - Displays *:*statt 0.0.0.0:0, haben diese beiden Werte die gleiche Sache darstellen? Wenn ja, warum wird UDP *:*anstelle von angezeigt 0.0.0.0:0?


Ich glaube *:*ist IPv6, während 0.0.0.0:0IPv4 ist.
LPChip

Folgendes ist mir auch aufgefallen: UDP 0.0.0.0:5355 *:*Bedeutet das, dass Daten zwischen IPv4 und IPv6 gesendet werden können?
User612473


4
das IPv6-Äquivalent von 0.0.0.0 ist [::]
Marsh-Wiggle

2
@LPChip Sie irren sich. *:*sagt nichts über die IP-Version. Da die lokale Adresse dieses Sockets jedoch nur IPv4 ist, muss die Remoteadresse auch IPv4 sein.
Kasperd

Antworten:


12

Es wurde darauf hingewiesen, dass meine Antwort falsch war. Da ich es nicht löschen kann, werde ich stattdessen das richtige bereitstellen.

Der Ausdruck *:*bedeutet "Beliebige Adresse, Beliebiger Port". Alle UDP-Listener zeigen diese Signatur an. Dies liegt an der Verbindungslosigkeit von UDP.


Ursprüngliche (falsche) Antwort. Ja und nein. *:*bezieht sich auf JEDE IPv6-Adresse. Die Unterscheidung zwischen unbekannter und nicht angegebener Adresse ist in IPv4 vage. Daher verwenden wir 0.0.0.0/0, um jeden Host im Netzwerk darzustellen, in IPv6 gibt es jedoch einen geringfügigen Unterschied.

In den meisten Fällen wird jedoch ::eine zusammenhängende Folge von Nullen dargestellt.

In einer IPv6-Adresse kann eine beliebige Folge von aufeinander folgenden Nullen durch Folgendes ersetzt :: werden:

  • 0.0.0.0/0=> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000 => ::=>*:*
  • fe80:0000:0000:0000:2000:0aff:fea7:0f7c => fe80::2000:0aff:fea7:0f7c

Die Darstellung mit Platzhaltern ermöglicht jedoch eine genauere Steuerung der Adressmuster. Zum Beispiel ::würde nicht passen fe80::2000:0aff:fea7:0f7c, wird aber *:*.

Dieser Unterschied ist für Geräte, die kein Routing durchführen, nicht wirklich von Bedeutung. Wenn jedoch optimale Routen zu aggregierten Adressräumen ausgewählt werden müssen, ermöglicht die Platzhalternotation eine flexiblere Auswahl von Zielnetzwerken.


5
Aber Sie haben in Ihrer Antwort geschrieben, dass *:* refers to ANY IPv6 address Sie hier sagen, dass es sich any..addressvermutlich um IPv4 oder IPv6 handelt. Also was ist es? Ist *:*beschränkte sich auf IPv6, oder ist es für IPv4 erlauben?
Barlop

2
Beide in der Frage genannten Sockets sind nur IPv4-Sockets. Sie können dies an der lokalen Adresse erkennen, die jedem Socket zugewiesen ist. Daher ist die Erwähnung von IPv6 für die Frage nicht relevant.
Kasperd

7
IPv6 ist für diese Frage überhaupt nicht relevant.
Hobbs

8
Diese Antwort ist für die gestellte Frage völlig falsch.
Brad

3
Wie in den Kommentaren von Kasperd (und auch in Hobbs 'Kommentar ) erwähnt, hat IPv6 nichts mit der Frage zu tun . Die Frage bezieht sich darauf, was in der Spalte "Fremdadresse" angezeigt wird und was in derselben Zeile (n) in der Spalte "Lokale Adresse" (IPv4) steht. (Bei einigen Betriebssystemen wird beim Abhören einer Adressfamilie / IP-Version normalerweise automatisch eine andere Adressfamilie
abgehört

15

Das /bezieht sich auf das Subnet Netmask, die einen Teil der IP - Schicht.

Der :bezieht sich auf einen Port, der Teil der Transportschicht ist.

Für TCP ist es sinnvoll, dass es für eine Verbindung ein Remote-Ende gibt.

Da UDP verbindungslos ist, macht es keinen Sinn, eine fremde Adresse anzuzeigen.

Mein Bauchgefühl ist, dass es immer den Platzhalter für UDP anzeigt und möglicherweise dazu da ist, das Parsen der Ausgabe ein wenig benutzerfreundlicher zu gestalten oder zu zeigen, ob Sie IPv4 / 6 verwenden:

IPV4 "*:*" vs IPV6 "[::]:*"


Ich habe das nur einigen Freunden gesagt. Sie könnten Listening-PORTS anzeigen, aber die Anzeige tatsächlicher Remote-Sitzungen, wenn es keine gibt, ist wahrscheinlich der Grund, warum sie wie *:*bei nicht vorhandenen Remote-UDP-Sitzungen angezeigt werden . Ich stimme dir hier zu.
NotAdmin Dave

6

In beiden Fällen ist die Information im Grunde genommen bedeutungslos, zeigt jedoch mehr oder weniger dasselbe an.

Ihre erste Zeile ist ein TCP-Listen-Socket. Die lokale Adressenspalte gibt die Adresse und den Port an, an dem Verbindungen akzeptiert werden, und die Remote-Adressenspalte bedeutet nichts, da ein Listen-Socket noch kein Remote-Ende der Verbindung hat. Ein verbundener TCP-Socket würde die Adresse des anderen Endes der Verbindung in dieser Spalte anzeigen, aber für einen Listen-Socket wird entschieden, eine Nulladresse und einen Port anzuzeigen.

Ihre zweite Zeile ist ein UDP-Socket. UDP ist ein verbindungsloses Protokoll, das heißt, es sendet und empfängt Pakete, ohne zu wissen, wer mit wem verbunden ist, ob das Paket Teil einer bestehenden Konversation ist oder ob die Daten gerade aus heiterem Himmel eingegangen sind. Die lokale Adressenspalte hat die gleiche Bedeutung wie für TCP, und die entfernte Adressenspalte ist bedeutungslos, da ein UDP-Socket zu jedem Zeitpunkt einen Peer, mehrere Peers oder keine Peers haben kann. (Eigentlich hat POSIX den Begriff "verbundener UDP-Socket", aber das wird ein bisschen weit entfernt).

Nun die Frage: Warum zeigen sie sich anders? Es scheint nichts weiter als eine Eigenart des Windows-Netstat-Codes zu sein. Linux (net-tools) netstat wird 0.0.0.0:*für das Remote-Ende von TCP-Listen-Sockets und UDP-Sockets (für IPv4; :::*für IPv6) angezeigt. Dies unterscheidet sich von beiden Beispielen unter Windows, ist jedoch zumindest innerhalb desselben Programms konsistent. Vielleicht strebt Windows eine semantische Unterscheidung zwischen "später auszufüllen" bei TCP und "für alles offen" bei UDP an, aber genauso wahrscheinlich wurden die beiden Codebits von zwei verschiedenen Personen mit der Nummer 0 geschrieben besonderes Augenmerk auf Konsistenz.


+1 für den Beginn des 4. Absatzes. 0.0.0.0 enthält einige Dokumentationen: Eine Adresse mit allen Nullen ist die "nicht angegebene" Adresse (gemäß IPv6-Adressierungs-RFC 4291, Abschnitt 2.5.2 ), die häufig für unbekannte Adressen gilt. RFC 1700 Seite 4 erwähnt "Kann nur als Quelladresse verwendet werden" und RFC 1122 # Seite-29 Abschnitt "a" beschreibt die Verwendung weiter. ( meine Antwort zu ::: erwähnt 0.0.0.0)
TOOGAM

Hat nicht der 0.0.0.0:0Wert in der Fremd Adresse Spalte bedeutet , dass jede IP - Adresse und Port - Nummer können die Daten an diese Buchse schicken? und wenn dieser Wert zum Beispiel war 127.0.0.0:12345, bedeutet dies, dass nur die IP-Adresse 127.0.0.0mit der Portnummer 12345Daten an diesen Socket senden kann und sonst niemand?
Tom

6

Der Unterschied ist einfach notational.

Netstat in Windows wird verwendet 0.0.0.0:0, um eine abstrakte Idee von "jeder Remoteadresse und jedem Port" für einen lokalen IPv4-TCP-Listener und *:*einen UDP-Listener darzustellen . Bei IPv6 wird die Remoteadresse [::]:0für TCP und *:*für UDP angegeben.

Wird in OS X *.*sowohl für TCP als auch für UDP verwendet, unabhängig davon, ob IPv4 oder IPv6 (beachten Sie, dass OS X Punkte verwendet, um Adresse und Port zu trennen). Linux verwendet 0.0.0.0:*für IPv4 und :::*IPv6, wobei die ersten beiden Doppelpunkte die Abkürzung für alle IPv6-Adressen darstellen und der dritte Doppelpunkt das Trennzeichen zwischen der Adresse und dem Port.

IIRC von etwas, das ich vor langer Zeit gehört oder gelesen habe, ich denke, UDP-Pairings können auftauchen, aber normalerweise nicht, weil sie nach Abschluss abgerissen werden und UDP-Verbindungen normalerweise sehr kurz sind und Millisekunden oder weniger dauern. Ich habe das selbst noch nie gesehen, es könnte also falsch sein.

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.