为什么 Linux 不使用 IANA 临时端口范围?

为什么 Linux 不使用 IANA 临时端口范围?

根据维基百科

互联网号码分配机构 (IANA) 建议动态或专用端口的范围为 49152 到 65535。许多 Linux 内核使用端口范围 32768 到 61000。

尽管似乎与 IANA 建议的范围存在一些历史偏差,但 Windows Vista、Windows 7、Windows Server 2008、FreeBSD 4.6+ 和许多其他操作系统都同意这个范围,而 Linux 仍然脱颖而出,这似乎很尴尬。

但仔细研究一下,你瞧:

$ cat /proc/sys/net/ipv4/ip_local_port_range 
32768   61000

为什么Linux没有采用标准范围?

答案1

曾经有一段时间,IANA 只分配最多 1023 个端口。请参阅RFC1700。一度这是一个标准。大多数时候,我可以毫不费力地发现 RFC 流中的情况何时发生变化,但对于将端口从 1024 更改为 49152 从注册到分配的问题,我却遇到了困难。

就 Linux 历史而言,2007 年有人提出了关于默认 ip_local_port_range 的问题。当时决定使用您提到的 Linux 范围,因为担心高端口号可能会导致问题,并且从 49152 开始的范围可能会留下太少的端口号。池中的端口号。看及其线程。当时表达的想法是,从 32768 开始,即使不完全符合 IANA 程序的精神,也是符合的。在阅读本文时,我推断开发人员假设大多数分配将从范围的底部开始并向上移动。在撰写本文时,我统计了 32768 到 49152 之间分配的端口号(不包括单独的不同协议)略多于 100 个,因此在过去五年中这一情况一直保持得很好。

我不知道为什么范围被认为太小,但我可以想象两个原因:

  1. 端口号是随机的以阻止某些攻击。池中的地址越多,这种防御的效果就越好。
  2. 高活动服务器可能会遇到端口号耗尽的问题。虽然端口可能是短暂的,但它们的使用不是即时的。特别是,套接字在 TCP 关闭后可以持续几分钟。

博客文章谈到了第二点,并在您希望 Linux 系统使用不同范围的本地端口时提出了一个答案。 (使用 /etc/sysctl.d 定义您喜欢的范围。如果出现特定冲突,还有一个 ip_local_reserved_ports 条目可能有用。这些条目与您引用的 /proc/sys 条目相匹配。)

总之。 Linux默认值不符合当前的 IANA 规范,但任何特定的 Linux 系统都可以(如果其所有者愿意)。

相关内容