Usé netstat (en Windows) para ver los puertos escuchados para TCP y UDP:
Noté que en la columna Dirección extranjera , las pantallas UDP en *:*
lugar de 0.0.0.0:0
, ¿representan estos dos valores la misma cosa? Si es así, ¿por qué se muestra UDP en *:*
lugar de 0.0.0.0:0
?
windows
networking
netstat
usuario612473
fuente
fuente
*:*
es IPv6 mientras que0.0.0.0:0
es IPv4.UDP 0.0.0.0:5355 *:*
¿eso significa que se pueden enviar datos entre IPv4 e IPv6?*:*
no dice nada sobre la versión IP. Sin embargo, dado que la dirección local de ese socket es solo IPv4, entonces la dirección remota también debe ser IPv4.Respuestas:
Se ha señalado que mi respuesta fue un error. Como no puedo eliminarlo, en su lugar proporcionaré el correcto.
La expresión
*:*
significa "Cualquier dirección, cualquier puerto". Todos los oyentes UDP mostrarán esta firma. Esto se debe a la naturaleza sin conexión de UDP.Respuesta original (incorrecta). Si y no.
*:*
se refiere a CUALQUIER dirección IPv6. La distinción entre una dirección desconocida / no especificada es vaga en IPv4, por lo que usamos 0.0.0.0/0 para representar cualquier host en la red, pero en IPv6 hay una sutil diferencia.Sin embargo, en su mayor parte, las personas usan
::
para representar una cadena contigua de ceros.En una dirección IPv6, cualquier secuencia de ceros contiguos se puede reemplazar por
::
lo siguiente: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
Sin embargo, la representación mediante comodines permite un control más preciso de los patrones de dirección. Por ejemplo,
::
no coincidiríafe80::2000:0aff:fea7:0f7c
, pero lo*:*
hará.Esta diferencia no es realmente significativa para ningún dispositivo que no esté realizando enrutamiento, pero cuando llega el momento de seleccionar rutas óptimas para espacios de direcciones agregados, la notación comodín permite una selección más flexible de las redes de destino.
fuente
*:* refers to ANY IPv6 address
Aquí dice, es decir,any..address
presumiblemente IPv4 o IPv6. Entonces cual es? ¿Se*:*
limita a IPv6, o también permite IPv4?Se
/
refiere a la máscara de red de subred, que forma parte de la capa de IP.El se
:
refiere a un puerto que es parte de la capa de transporte.Para TCP tiene sentido que haya un extremo remoto para una conexión.
UDP, dado que no tiene conexión, no tiene ningún sentido que muestre una dirección extranjera.
Mi intuición es que siempre mostraría el comodín para UDP y que potencialmente está ahí para hacer que el análisis de la salida sea un poco más amigable, o para mostrar si está utilizando IPv4 / 6:
IPV4 "*:*"
vsIPV6 "[::]:*"
fuente
*:*
para sesiones remotas UDP no existentes. Estoy de acuerdo contigo aquí.En ambos casos, la información básicamente no tiene sentido, pero indica más o menos lo mismo.
Su primera línea es un socket de escucha TCP. La columna de dirección local indica la dirección y el puerto en el que está aceptando conexiones, y la columna de dirección remota no significa nada porque un socket de escucha aún no tiene un extremo remoto de la conexión. Un socket TCP conectado mostraría la dirección del otro extremo de la conexión en esa columna, pero para un socket de escucha decide mostrar una dirección y un puerto todos cero.
Su segunda línea es un socket UDP. UDP es un protocolo sin conexión, lo que significa que envía y recibe paquetes sin ninguna noción de quién se conectó a quién, si el paquete es parte de una conversación existente o si los datos acaban de llegar de la nada. La columna de dirección local tiene el mismo significado que para TCP, y la columna de dirección remota no tiene sentido porque un socket UDP podría tener un par, muchos pares o ningún par en cualquier momento. (En realidad, POSIX tiene la noción de un "socket UDP conectado", pero eso está un poco lejos).
Ahora la pregunta: ¿por qué se muestran de manera diferente? Parece que no es más que una peculiaridad del código netstat de Windows. Linux (herramientas de red) netstat se muestra
0.0.0.0:*
para el extremo remoto de los sockets de escucha TCP y los sockets UDP (para IPv4; se muestra:::*
para IPv6), que es diferente de cualquier ejemplo en Windows, pero al menos es consistente dentro del mismo programa. Tal vez Windows esté buscando una distinción semántica entre "que se completará más adelante" en el caso de TCP y "abierto a cualquier cosa" en el caso de UDP, pero igual de probable que los dos bits de código fueron escritos por dos personas diferentes sin preocupación particular por la consistencia.fuente
0.0.0.0:0
valor en la columna Dirección extranjera no significa que cualquier dirección IP y número de puerto puede enviar datos a este socket? y si este valor fue, por ejemplo127.0.0.0:12345
, ¿significa que solo la dirección IP127.0.0.0
con el número de puerto12345
puede enviar datos a este socket y nadie más?La diferencia es simplemente de notación.
Netstat en Windows se utiliza
0.0.0.0:0
para representar una idea abstracta de "cualquier dirección remota y puerto" para un oyente TCP local IPv4 y*:*
para un oyente UDP. Para IPv6, la dirección remota se denota por[::]:0
TCP y*:*
UDP.En OS X,
*.*
se usa tanto para TCP como para UDP, ya sea IPv4 o IPv6 (tenga en cuenta que OS X usa puntos para separar la dirección y el puerto). Linux utiliza0.0.0.0:*
para IPv4 y:::*
para IPv6, con los dos primeros puntos que representan la abreviatura de todas las direcciones IPv6 y el tercer punto el separador entre la dirección y el puerto.IIRC de algo que escuché o leí hace mucho tiempo, creo que los emparejamientos UDP pueden aparecer, pero generalmente no porque se rompen al finalizar y las conexiones UDP son generalmente muy cortas, duran milisegundos o menos. Sin embargo, nunca he visto esto, así que podría ser incorrecto.
fuente