在 Linux 上,Firefox 正在侦听 0.0.0.0 上的多个 UDP 端口

Cig*_*Man 7 linux networking firefox

在 Linux 上,Firefox 正在侦听 UDP 端口,通常在端口 30000 或更高端口上。这是什么原因?为什么不只是 localhost,而是 0.0.0.0,即也暴露于网络的接口?

Ora*_*Dog 11

UDP 不是基于连接的,因此两端都必须侦听双向通信。因此,如果 Firefox 希望接收来自与之通信的 UDP 服务的任何响应,则需要将开放端口绑定到可路由接口。

从 Firefox 88 开始,默认启用HTTP/3 ,使用 UDP 与支持它的服务器进行网页浏览。DNS 查找可能涉及来自 Firefox 的远程 UDP 请求(但通常不在 Linux 系统上)。许多 P2P 系统(例如 WebRTC)也使用 UDP。

  • @CigaretteSmokingMan 请注意,您是否认为 Firefox 有“开放监听端口”只是一个语义问题。对于普通的 TCP 连接,Firefox 仍然必须侦听源端口上的回复,但这不会出现在 netstat/ss 中,因为它隐含在协议基于连接的性质中。HTTP/3 基本上执行类似的双向数据包会话,但侦听源端口恰好显示在 netstat/ss 中,因为这是 UDP 的约定(很难隐藏它)。 (5认同)
  • 请注意,从技术上讲,HTTP/3 不使用 UDP,而是使用 QUIC。QUIC 是一个第 3 层协议,就像 UDP 或 TCP 一样。理所当然,它“应该”作为 IP 之上的 L3 协议实现,但出于与现有防火墙、家庭路由器、NAT 盒和其他中间盒的向后兼容性的原因,决定在 UDP 之上实现 QUIC。因此,可以说,它是在另一个第 3 层协议之上实现的第 3 层协议。但开放 UDP 端口确实是一个技术问题,从功能上来说,HTTP/3 使用 QUIC,而不是 UDP。 (4认同)
  • 这可以通过运行`ss -aunp | 进行测试。浏览此 URL 时使用 grep -i firefox`:https://http3check.net/ 。浏览器必须启用 HTTP/3。 (2认同)
  • @CigaretteSmokingMan 这是同样的事情。任何人都可以利用现有 TCP 连接的正确地址和端口来欺骗“回复”数据包,就像他们可以将“回复”UDP 数据包发送到“侦听”端口一样。接收方应丢弃任何此类欺骗数据包,这分别是 TCP 或 QUIC 堆栈完成的主要任务之一。除非这些堆栈中存在严重的安全错误,否则很难成功地将欺骗性回复一直发送到应用程序层。无论您是否在 ss 中看到“侦听”端口,对此影响很小。 (2认同)
  • @CigaretteSmokingMan FWIW,QUIC 回复比 TCP 回复更难欺骗。前者以加密方式验证所有数据包,因此几乎不可能伪造回复。后者纯粹依赖于地址和端口加上 32 位序列号来验证是否应接受答复作为连接的一部分。因此,在没有 TLS 的情况下,中间人很容易将回复注入到 HTTP 连接中。因此,平均而言,看到侦听 UDP 端口表明比通过 TCP 运行具有更好的安全性。 (2认同)
  • 这些层更多是概念性的而不是技术性的。我们称 QUIC 为传输层协议,因为它执行传输层协议的功能;仅仅因为它被封装在另一个传输层协议中并不一定意味着它是一个更高的层。 (2认同)