0.0.0.0.0 e *: * representam a mesma coisa?


23

Usei o netstat (no Windows) para exibir as portas ouvidas para TCP e UDP:

insira a descrição da imagem aqui

Notei que, na coluna Endereço externo , o UDP é exibido em *:*vez de 0.0.0.0:0, esses dois valores representam a mesma coisa? Se sim, por que o UDP é exibido em *:*vez de 0.0.0.0:0?


Eu acredito que *:*é IPv6 enquanto 0.0.0.0:0é IPv4.
LPChip 01/07/19

Também notei o seguinte UDP 0.0.0.0:5355 *:*:, isso significa que os dados podem ser enviados entre IPv4 e IPv6?
user612473


4
o equivalente de IPv6 0.0.0.0 é [::]
pântano-meneio

2
@LPChip Você está enganado. *:*não diz nada sobre a versão IP. No entanto, como o endereço local desse soquete é apenas IPv4, o endereço remoto também deve ser IPv4.
kasperd

Respostas:


12

Foi apontado que minha resposta estava errada. Como não posso excluí-lo, fornecerei o correto.

A expressão *:*significa "Qualquer endereço, qualquer porta". Todos os ouvintes UDP exibirão esta assinatura. Isso ocorre devido à natureza sem conexão do UDP.


Resposta original (incorreta). Sim e não. *:*refere-se a QUALQUER endereço IPv6. A distinção entre um endereço desconhecido / não especificado é vaga no IPv4; portanto, usamos 0.0.0.0/0 para representar qualquer host na rede, mas no IPv6 há uma diferença sutil.

Na maioria das vezes, no entanto, as pessoas costumam ::representar uma sequência contígua de 0s.

Em um endereço IPv6, qualquer sequência de zeros contíguos pode ser substituída :: por:

  • 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

A representação usando caracteres curinga, no entanto, permite um controle mais preciso dos padrões de endereço. Por exemplo, ::não corresponderia fe80::2000:0aff:fea7:0f7c, mas *:*corresponderia.

Essa diferença não é realmente significativa para qualquer dispositivo que não esteja executando o roteamento, mas quando chega a hora de selecionar rotas ideais para espaços de endereço agregados, a notação curinga permite uma seleção mais flexível das redes de destino.


5
Mas você escreveu em sua resposta que *:* refers to ANY IPv6 address Aqui você diz, any..addressou seja, presumivelmente IPv4 ou IPv6. Então qual é? Está se *:*limitando ao IPv6 ou também permite o IPv4?
#

2
Os dois soquetes mencionados na pergunta são apenas para IPv4. Você pode ver isso no endereço local atribuído a cada soquete. Como tal, mencionar o IPv6 não é relevante para a questão.
kasperd

7
O IPv6 não é relevante para esta questão.
Hbbs

8
Esta resposta está totalmente errada para a pergunta.
Brad

3
Como observa o comentário de kasperd (e também o comentário de hobbs ), o IPv6 não está relacionado à questão. A pergunta é sobre o que vemos na coluna Endereço externo, que corresponde ao que está na mesma linha na coluna Endereço local, que é IPv4. (Embora, com alguns sistemas operacionais, escutando em uma família de endereços / IP-versão pode tipicamente auto-escutar em outra família de endereços.)
TOOGAM

15

O /refere-se à máscara de sub-rede, que faz parte da camada IP.

A :refere-se a uma porta que é parte da camada de transporte.

Para o TCP, faz sentido que exista um fim remoto para uma conexão.

O UDP, por não ter conexão, não faz sentido mostrar um endereço externo.

Meu pressentimento é que ele sempre mostraria o curinga para o UDP e que existe potencialmente para tornar a análise da saída um pouco mais amigável ou para mostrar se você estiver usando o IPv4 / 6:

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


Eu só estava dizendo isso para alguns amigos. Você pode exibir PORTS de escuta, mas exibir sessões remotas reais quando não houver uma provavelmente é a razão pela qual ela é exibida como *:*para sessões UDP remotas inexistentes. Estou de acordo com você aqui.
NotAdmin Dave

6

Nos dois casos, a informação é basicamente sem sentido, mas indica mais ou menos a mesma coisa.

Sua primeira linha é um soquete de escuta TCP. A coluna de endereço local indica o endereço e a porta em que está aceitando conexões, e a coluna de endereço remoto não significa nada porque um soquete de escuta ainda não possui uma extremidade remota da conexão. Um soquete TCP conectado mostraria o endereço da outra extremidade da conexão nessa coluna, mas para um soquete de escuta, ele decide exibir um endereço e uma porta totalmente zero.

Sua segunda linha é um soquete UDP. UDP é um protocolo sem conexão, o que significa que ele envia e recebe pacotes sem a noção de quem está conectado a quem, se o pacote faz parte de uma conversa existente ou se os dados chegaram do nada. A coluna de endereço local tem o mesmo significado que para o TCP, e a coluna de endereço remoto não faz sentido porque um soquete UDP pode ter um ponto, muitos pontos ou nenhum ponto a qualquer momento. (Na verdade, o POSIX tem a noção de um "soquete UDP conectado", mas isso está indo um pouco longe).

Agora a pergunta: por que eles são exibidos de maneira diferente? Parece ser nada mais que uma peculiaridade do código netstat do Windows. O netstat do Linux (net-tools) é exibido 0.0.0.0:*na extremidade remota dos soquetes de escuta TCP e UDP (para IPv4; é exibido :::*para IPv6), que é diferente de qualquer exemplo no Windows, mas pelo menos é consistente no mesmo programa. Talvez o Windows esteja buscando uma distinção semântica entre "a ser preenchido mais tarde" no caso do TCP e "aberto a qualquer coisa" no caso do UDP, mas, com a mesma probabilidade, os dois bits de código foram escritos por duas pessoas diferentes sem preocupação particular com a consistência.


+1 para o início do quarto parágrafo. 0.0.0.0 possui alguma documentação: Um endereço de todos os zeros é o endereço "não especificado" (de acordo com o IPv6 Addressing RFC 4291 sec 2.5.2 ), geralmente aplicado a endereços desconhecidos. A página 4 da RFC 1700 menciona "Só pode ser usado como endereço de origem" e a seção "a" da RFC 1122 # página-29 "descreve" o uso adicional. ( minha resposta sobre ::: menciona 0.0.0.0)
TOOGAM

O 0.0.0.0:0valor na coluna Endereço externo significa que qualquer endereço IP e número de porta podem enviar dados para esse soquete? e se esse valor fosse, por exemplo 127.0.0.0:12345, isso significa que apenas o endereço IP 127.0.0.0com o número da porta 12345pode enviar dados para esse soquete e mais ninguém?
Tom

6

A diferença é simplesmente notacional.

O Netstat no Windows usa 0.0.0.0:0para representar uma idéia abstrata de "qualquer endereço e porta remotos" para um ouvinte local IPv4 TCP e *:*para um ouvinte UDP. Para IPv6, o endereço remoto é indicado por [::]:0para TCP e *:*UDP.

No OS X, *.*é usado para TCP e UDP, seja IPv4 ou IPv6 (observe que o OS X usa pontos para separar endereço e porta). O Linux usa 0.0.0.0:*para IPv4 e :::*IPv6, com os dois primeiros dois pontos representando a abreviação de todos os endereços IPv6 e os terceiros dois pontos o separador entre o endereço e a porta.

Segundo o IIRC de algo que ouvi ou li há muito tempo, acho que os emparelhamentos UDP podem aparecer, mas geralmente não aparecem porque são destruídos após a conclusão e as conexões UDP geralmente são muito curtas, com duração de milissegundos ou menos. Eu nunca vi isso, no entanto, para que pudesse estar incorreto.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.