我是 Linux 和 Ubuntu 的新手。我在 Google 上搜索并阅读了一些文章,其中指出所有端口都处于关闭状态,直到用户手动打开它们。这是正确的吗?
那么,简单来说,“监听某个端口”和“某个端口已建立”是什么意思呢?
答案1
我谷歌了一下,读到一些文章说所有端口都是关闭的,直到用户手动打开。这是正确的吗?
取决于您看到的“用户”。用户通常不会说“嘿,请打开端口 X”。系统服务(例如用于打印的 CUPS、UDP/TCP 端口 631)会打开一个端口进行监听。其他示例包括 HTTP 服务器(TCP 端口 80)、DNS 服务器(UDP 端口 53)和 SMTP(邮件)服务器(TCP 端口 25)。
到目前为止,我只提到了端口,但程序还必须指定要开始监听的地址。重要的是要理解程序可以监听本地(IPv4 地址127.0.0.1
、IPv6 地址::1
)或使服务可由以下地址访问的地址网络上的其他设备(使用您的网络地址,例如10.0.1.4
)。还有一个“通配符地址”(0.0.0.0
用于 IPv4,::
用于 IPv6),也可以远程访问。
在程序开始监听端口之前,端口确实是“关闭”的。
该sudo netstat -tulpn
命令可用于显示正在监听的 TCP/UDP 程序。在默认的 Ubuntu 桌面安装中,显示以下内容:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2254/dnsmasq
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1346/cupsd
tcp6 0 0 ::1:631 :::* LISTEN 1346/cupsd
udp 0 0 0.0.0.0:59296 0.0.0.0:* 1152/avahi-daemon:
udp 0 0 127.0.0.1:53 0.0.0.0:* 2254/dnsmasq
udp 0 0 0.0.0.0:68 0.0.0.0:* 1684/dhclient
udp 0 0 0.0.0.0:5353 0.0.0.0:* 1152/avahi-daemon:
udp6 0 0 :::5353 :::* 1152/avahi-daemon:
udp6 0 0 :::53537 :::* 1152/avahi-daemon:
在这里,您可以看到 avahi-daemon 可通过 UDP 端口 59296、5353 和 53537 在网络上访问。后两个是 avahi-daemon 的标准端口,第一个是随机地址,可能使用其他两个端口进行通信。此守护进程用于“网络发现”,并允许您执行“文件共享”等操作。还有一个 DHCP 客户端在端口 UDP 68 上全局监听。
有些服务仅在本地监听,无法通过网络访问。这些服务包括 DNS 缓存服务 dnsmasq(UDP 端口 53)和打印机服务 CUPS(TCP 631)。
那么,简单来说,“监听某个端口”和“某个端口已建立”是什么意思呢?
没有“已建立端口”的概念,只有“已建立连接”。开放用于监听的端口由对该端口中流动的数据感兴趣的程序支持。这些端口通常是静态的,HTTP 在 TCP 端口 80 上运行,DNS 在 UDP 端口 53 上运行。这些标准允许其他网络设备快速找到您的服务。
当两个网络设备都同意互相通信时,就会建立 TCP 连接。
答案2
这句话是不是正确。事实上,默认情况下安装的服务非常少。如果没有服务等待联系/询问(这就是“监听”的意思),则无需关闭该端口。
但默认情况下已安装服务正在运行,并且没有设置防火墙规则来阻止任何人联系该服务。
至于附加问题:“端口”就像电话分机号码,它们指定一个通过这个号码通话的程序,就像电话分机号码指定企业内的一个人或一个部门一样。