Ich habe netstat (in Windows) verwendet, um die empfangenen Ports für TCP und UDP anzuzeigen:
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
?
windows
networking
netstat
user612473
quelle
quelle
*:*
ist IPv6, während0.0.0.0:0
IPv4 ist.UDP 0.0.0.0:5355 *:*
Bedeutet das, dass Daten zwischen IPv4 und IPv6 gesendet werden können?*:*
sagt nichts über die IP-Version. Da die lokale Adresse dieses Sockets jedoch nur IPv4 ist, muss die Remoteadresse auch IPv4 sein.Antworten:
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 passenfe80::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.
quelle
*:* refers to ANY IPv6 address
Sie hier sagen, dass es sichany..address
vermutlich um IPv4 oder IPv6 handelt. Also was ist es? Ist*:*
beschränkte sich auf IPv6, oder ist es für IPv4 erlauben?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 "*:*"
vsIPV6 "[::]:*"
quelle
*:*
bei nicht vorhandenen Remote-UDP-Sitzungen angezeigt werden . Ich stimme dir hier zu.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.quelle
0.0.0.0:0
Wert 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 war127.0.0.0:12345
, bedeutet dies, dass nur die IP-Adresse127.0.0.0
mit der Portnummer12345
Daten an diesen Socket senden kann und sonst niemand?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[::]:0
fü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 verwendet0.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.
quelle