运行$ 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 -
要理解输出,我有几个问题:
0.0.0.0:*
和:::*
之间的“国外地址”有什么区别?
为什么某些端口(例如22
)在tcp和tcp6中都有一个条目?
对于本地地址,:::
与127.0.0.1
和0.0.0.0
(以及localhost
)之间有什么区别?
答案 0 :(得分:0)
0.0.0.0:*和::: *之间的“外国地址”有什么区别?
第一种情况是IPv4,第二种情况是IPv6。
为什么某些端口(例如22)在tcp和tcp6中都有一个条目?
因为服务器正在使用IPv4和IPv6上的两个不同的套接字进行侦听。有些服务器尝试将单个套接字用于两者(并非所有操作系统都支持),有些服务器使用不同的套接字。如果是OpenSSH:无论如何,它都支持侦听多个IP:端口,并且它也起源于OpenBSD,在OpenBSD中,不支持使用单个套接字侦听IPv4和IPv6(为安全起见,明确决定)。
对于本地地址,:::和127.0.0.1和0.0.0.0(和localhost)之间有什么区别?这些都是一样的,还是为什么引用的方式有所不同?
:::
是IPv6的ANY地址,而0.0.0.0
是IPv4的任何地址-使用这些侦听器地址,服务器将接受其拥有的所有IP地址(即所有接口:本地,以太网)上的流量,wifi,VPN ...)。 127.0.0.1
是IPv4的本地主机,即,只能从本地计算机进行连接。 IPv6本地主机将为::1
。 localhost
的含义取决于/etc/hosts
中的条目,通常与127.0.0.1
相同。