0 TCP/UDP 端口在哪里被禁止?

网络工程 传输协议 射频卡
2021-07-14 18:28:25

众所周知,在大多数系统上,不允许将 0 用于 UDP 目标端口或 TCP 源或目标端口。这是 RFC 所要求的,还是只是常见的做法?如果需要,哪些 RFC 需要它?

2个回答

IANA 保留了 TCP 和 UDP 端口 0。请参阅IANA 服务名称和传输协议端口号注册表IANA 是互联网号码分配机构,因此所有互联网号码,包括端口号,都由 IANA 分配。

操作系统为应用程序保留了该端口号,以通过将其用作源端口号来请求临时端口号,但这在这里是题外话。

TL; DR: RFC870

自 1972 年的 RFC433 以来,端口 0 已包含在“网络范围标准功能”范围内,但从未分配过。

1983 年 10 月,首次在 RFC870 中被明确列为“保留”。

这可能不是巧合,这与 BSD 套接字 API 的发布时间大致相同。

  • BSD 的发布被认为是一个符合标准的系统

在研发社区内,政策规定,网络标识符只会授予那些证明他们正在获取标准 Bolt Beranek 和 Newman 网关软件,或者已经实施或正在获取满足外部网关协议要求的网关的申请人。获得 Berkeley BSD 4.2 UNIX 软件可能被认为是后者的证据。

  • BSD 套接字 API 使用端口零来表示操作系统应该分配一个可用端口。
  • 如果 BSD 符合,那么端口 0 就不能使用。

很可能其他系统已经在他们的 API 中使用了这个约定,或者这是在某处达成一致的,但我还没有找到任何文档来证明这一点。