$ 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 地址更易于阅读。