各地方港口的区别

Difference in various local ports

当我 运行 $ netstat -ntlp 我得到以下输出:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::80                   :::*                    LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 :::443                  :::*                    LISTEN      -    

为了理解输出,我有几个问题:

  1. 0.0.0.0:*:::*的"Foreign Address"有什么区别?

  2. 为什么一些端口,例如22在tcp和tcp6中都有一个条目?

  3. 对于本地地址,:::127.0.0.10.0.0.0(和localhost)有什么区别?

What is the difference in the "Foreign Address" between 0.0.0.0:* and :::*?

第一种情况是IPv4,第二种情况是IPv6。

Why do some ports, such as 22 have an entry in both tcp and tcp6?

因为服务器正在侦听 IPv4 和 IPv6 上的两个不同套接字。一些服务器尝试对两者使用同一个套接字(并非所有 OS 都支持),一些服务器使用不同的套接字。在 OpenSSH 的情况下:它无论如何都支持监听多个 IP:port,它也起源于 OpenBSD,其中不支持使用单个套接字监听 IPv4 和 IPv6(明确决定,为了安全)。

For the local address, what is the difference between ::: and 127.0.0.1 and 0.0.0.0 (and localhost)? Are these all the same, or why are they referenced differently?

::: 是 IPv6 的任何地址,而 0.0.0.0 是 IPv4 的任何地址 - 使用这些侦听器地址,服务器将接受它拥有的所有 IP 地址上的流量(即所有接口:本地、以太网、wifi、VPN...)。 127.0.0.1 是 IPv4 的本地主机,即只有来自本地机器的连接是可能的。 IPv6 本地主机将为 ::1localhost 的含义取决于 /etc/hosts 中的条目,通常与 127.0.0.1.

相同