“[::]”或“0.0.0.0”何时表示该网络以及何时表示该主机?

“[::]”或“0.0.0.0”何时表示该网络以及何时表示该主机?

塔南鲍姆的计算机网络说

IP 地址 0.0.0.0(最低地址)是主机启动时使用。它的意思是“这个网络”或“这个主机”。

[::] 是 IPv4 的 IPv6 版本0.0.0.0

问题:

1)什么时候[::] 表示0.0.0.0这个网络,什么时候表示这个主机?

2) 当表示该主机时,是指该主机上的所有网络接口,还是仅表示该主机上的一个指定网络接口?

3)为什么[::] 允许我从同一局域网内的其他主机访问mysql服务器?这里是指这个网络还是这个主机?为什么 [::]被mysql服务器使用,尽管主机不在“启动时”的情况下?

   $ 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

谢谢。

答案1

netstat您给出的输出中,“0.0.0.0”和“[::]”并不意味着“此主机”,它们意味着相关服务正在侦听“此主机上的所有接口”。因此,这些端口对任何主机开放,包括本地主机。

答案2

请注意 RFC 1122 中的官方 IP 定义是this host on this network。这官方定义。然而,操作系统特定的用途仍然存在。

Linux 的内部使用[::]0.0.0.0更好地被认为是来自其他计算领域的“Null”。根据上下文,“null”可能意味着“什么都没有”、“不知道”、“不关心”或偶尔“错误”。它的含义确实是上下文相关的。

IP 地址可用于表示网络或主机。例如192.168.1.1是主机192.168.1.0/24。它所代表的内容完全取决于软件期望接收的内容。

当它表示该主机时,是指该主机上的所有网络接口,还是仅表示该主机上的一个指定网络接口?

当提到绑定(监听)套接字时,它的意思是“不关心”哪个 IP。但这仅限于当前主机的 IP,因此实际上意味着从当前主机寻址到任何 IP 的任何接口上都将接受连接。

相关内容