Esses sockets estão escutando no endereço não especificado do IPv6, que é ::
. Esta é a abreviação de 0000:0000:0000:0000:0000:0000:0000:0000
(vários blocos de 0 podem ser compactados em ::
, consulte RFC 5952 ). Isso é semelhante ao endereço não especificado do IPv4 0.0.0.0
. Isso significa que o serviço está escutando em todos os endereços do host.
Normalmente, escutar em um soquete IPv6 significa que o soquete aceita apenas conexões de entrada de clientes IPv6, e o software precisaria abrir um segundo soquete para escutar os clientes IPv4.
Há um caso especial: escutar o endereço não especificado do IPv6 e ter o sinalizador IPV6_V6ONLY
definido como 0 (falso). Em muitos sistemas, incluindo o Linux, esse é o padrão. Nesse caso, o soquete aceitará os clientes IPv4 e IPv6 em um único soquete. Esse recurso facilita para os desenvolvedores de software dar suporte ao IPv6: eles podem criar softwares que apenas atendem a ambos os protocolos usando um único soquete.
A desvantagem disso é que não é fácil ver quais soquetes escutam os dois protocolos e quais sockets só escutam no IPv6. Também é confuso que :
seja usado no endereço IPv6 e também como o separador entre o endereço e a porta. Dessa forma, você obtém o confuso :::
bit.
Sistemas baseados em BSD tendem a mostrar as mesmas informações de uma maneira diferente. Lá, seu exemplo seria exibido como, por exemplo:
tcp46 0 0 *.30179 *.* LISTEN
tcp46 0 0 *.www *.* LISTEN
tcp46 0 0 *.10001 *.* LISTEN
tcp46 0 0 *.telnet *.* LISTEN
Um servidor que usa dois sockets separados para IPv4 e IPv6 aparece como:
tcp4 0 0 *.ssh *.* LISTEN
tcp6 0 0 *.ssh *.* LISTEN
e
udp4 0 0 *.ntp *.*
udp6 0 0 *.ntp *.*
Pessoalmente, gosto que mostre explicitamente quais protocolos estão sendo ouvidos (por exemplo, tcp4
/ tcp6
/ tcp46
) e usando o caractere *
para o endereço não especificado.
Acabei de notar que as versões recentes do Ubuntu usam essa notação:
tcp 0 0 *:ssh *:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 [::]:https [::]:* LISTEN
O que já é muito mais claro. Infelizmente, ele não mostra a diferença entre um soquete que ouve apenas no IPv6 (como o ssh
socket) e um soquete que escuta tanto no IPv4 quanto no IPv6 (como o https
socket).