Do 0.0.0.0:0 e *: * representam a mesma coisa?

23

Eu usei netstat (no Windows) para ver as portas ouvidas para TCP e UDP:

Percebi que na coluna Endereço externo , o UDP exibe *:* em vez de 0.0.0.0:0 , esses dois valores representam a mesma coisa? Em caso afirmativo, por que o UDP exibe *:* em vez de 0.0.0.0:0 ?

    
por user612473 01.07.2016 / 16:14

4 respostas

12

Foi apontado que minha resposta estava errada. Desde que eu não posso apagá-lo, vou fornecer o correto.

A expressão *:* significa "Qualquer endereço, qualquer porta". Todos os ouvintes do UDP exibirão essa assinatura. Isso se deve à 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 é vago no IPv4, por isso usamos 0.0.0.0/0 para representar qualquer host na rede, mas no IPv6 há uma diferença sutil.

Na maioria das vezes, as pessoas usam :: para 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 :: então:

  • 0.0.0.0/0 = > 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000 = > :: = > %código%
  • *:* = > %código%

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

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

    
por 01.07.2016 / 16:51
15

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

O : refere-se a uma porta que faz parte da Camada de Transporte.

Para TCP, faz sentido que exista uma extremidade remota para uma conexão.

UDP, como não tem conexão, não faz sentido mostrar um endereço externo.

Meu instinto é que ele sempre mostrará o caractere curinga para o UDP e que ele está lá potencialmente para tornar a saída da análise um pouco mais amigável, ou para mostrar se você está usando o IPv4 / 6:

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

    
por 02.07.2016 / 01:06
6

Em ambos os 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 na qual ele está aceitando conexões, e a coluna de endereço remoto não significa nada, porque um soquete de escuta ainda não tem extremidade remota da conexão. Um soquete TCP conectado mostraria o endereço da outra extremidade da conexão naquela coluna, mas para um soquete de escuta, ele decide exibir um endereço e uma porta totalmente zero.

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

Agora, a pergunta: por que eles são exibidos de maneira diferente? Parece nada mais do que uma peculiaridade do código netstat do Windows. Linux (net-tools) netstat exibe 0.0.0.0:* para o terminal remoto de soquetes de escuta TCP e soquetes UDP (para IPv4; exibe :::* para IPv6), que é diferente de qualquer exemplo no Windows, mas pelo menos é consistente dentro do mesmo programa. Talvez o Windows esteja indo para uma distinção semântica entre "a ser preenchido mais tarde" no caso do TCP e "aberto para qualquer coisa" no caso do UDP, mas tão provável quanto os dois bits de código foram escritos por duas pessoas diferentes sem preocupação particular pela consistência.

    
por 02.07.2016 / 07:14
6

A diferença é simplesmente notacional.

O Netstat no Windows usa 0.0.0.0:0 para representar uma ideia abstrata de "qualquer endereço e porta remotos" para um ouvinte TCP IPv4 local e *:* para um ouvinte UDP. Para IPv6, o endereço remoto é indicado por [::]:0 para TCP e *:* para 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 :::* para 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.

IIRC de algo que ouvi ou li há muito tempo, acho que os pares de UDP podem aparecer, mas geralmente não aparecem porque são demolidos após a conclusão e conexões UDP são geralmente muito curtas, com duração de milissegundos ou menos. Eu mesmo nunca vi isso, por isso poderia estar incorreto.

    
por 02.07.2016 / 02:25