netstat 输出中的“0.0.0.0:*”、“[::]:mysql”和“[::]:*”是什么意思?

netstat 输出中的“0.0.0.0:*”、“[::]:mysql”和“[::]:*”是什么意思?
$ sudo netstat -ap | grep postg
tcp        0      0 localhost:postgresql    0.0.0.0:*               LISTEN      1567/postgres       
udp        0      0 localhost:57504         localhost:57504         ESTABLISHED 1567/postgres       
unix  2      [ ACC ]     STREAM     LISTENING     27116    1567/postgres        /var/run/postgresql/.s.PGSQL.5432

$ sudo netstat -ap | grep mysql
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN      23683/mysqld        
tcp6       0      0 [::]:33060              [::]:*                  LISTEN      23683/mysqld        
unix  2      [ ACC ]     STREAM     LISTENING     1169294  23683/mysqld         /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     1169513  23683/mysqld         /var/run/mysqld/mysqlx.sock
unix  2      [ ]         DGRAM                    1169211  23683/mysqld  

0.0.0.0:*[::]:mysql、 和 是什么[::]:*意思?

*指所有端口吗?

0.0.0.0 根据 Tanenbaum 的计算机网络,意思是“这个网络”或“这个主机”。什么时候用于这个网络,什么时候用于这个主机?

谢谢。

答案1

0.0.0.0:*通常出现在偏僻的侦听套接字的一侧,并指示远程地址和端口字段尚未填写...这对于正在侦听传入连接的套接字来说是合乎逻辑的。但它有一个含义:它表明该套接字只接受IPv4连接。

[::]:mysql出现在当地的连接端,并指示套接字正在接受该系统可能拥有的任何地址中的传入 IPv6 连接(也可能是 IPv4),并且端口号已mysql/etc/services...中指定名称,即端口号为 3306。请注意最左边的列也tcp6不仅仅tcp表明该程序正在使用支持 IPv6 的套接字。

[::]:*是支持 IPv6 的等价物0.0.0.0:*,即它通常出现在偏僻的监听套接字一侧,表示套接字正在处理 IPv6 连接,但远程端点地址和端口信息尚未填写。然而,这可能也包括 IPv4。

整个 IPv4 地址空间可以映射为 IPv6 地址空间的子集:例如,如果应用程序使用 IPv6 套接字 API,则1.2.3.4内核可以将 IPv4 地址映射到 IPv6 地址。::ffff:102:304这就是为什么支持 IPv6 的程序可以选择在 TCP/UDP 级别的所有内容中仅在内部使用 IPv6 样式的地址结构,并且除非特别需要,否则无需将 IPv4 视为单独的组。 (我认为程序可以使用套接字选项或其他一些机制来选择加入/退出此映射:某些程序确实为 IPv4 和 IPv6 打开单独的侦听套接字。)

然而,许多支持 IPv6 的实用程序将以更加用户友好的形式显示此类 IPv6 映射的 IPv4 地址,::ffff:1.2.3.4以使嵌入的 IPv4 地址更易于阅读。

相关内容