$ 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 的计算机网络,意思是“这个网络”或“这个主机”。什么时候用于这个网络,什么时候用于这个主机?
谢谢。
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 地址更易于阅读。