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


30

根据维基百科

Internet分配号码授权机构(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没有采用标准范围?

Answers:


21

曾经有一段时间IANA只分配最多1023个端口。请参阅RFC1700。曾经这是一个标准。在大多数情况下,我都不会发现RFC流中何时发生变化的麻烦,但是对于将端口从1024更改为49152的问题,从注册更改为分配的问题,我的想法很短。

就Linux历史而言,有人在2007年提出了一个关于默认ip_local_port_range的问题。当时,由于担心端口数量过多可能会导致问题,并且决定将范围设置为49152,所以您决定使用您提到的Linux范围池中的端口号。看到这个和它的线程。当时表达的想法是,从32768开始即使不完全符合IANA程序的精神。在阅读此内容时,我推断出开发人员认为大多数分配将发生在范围的底部并向上移动。在撰写本文时,我计算了32768和49152之间分配的100个以上的端口号(不将不同的协议视为单独的),因此在过去五年中一直保持良好的势头。

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

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

这篇博客文章涉及数字2,并提出了一个答案,如果您希望Linux系统使用其他范围的本地端口。(使用/etc/sysctl.d定义您喜欢的范围。如果遇到特定的冲突,还有一个ip_local_reserved_ports条目可能会有用。这些与您引用的/ proc / sys条目匹配。)

综上所述。Linux的默认设置与当前的IANA规范不匹配,但如果所有者希望,则任何特定的Linux系统都可以。


1
根据RFC 6056的规定“如第2.1节所述,动态端口的范围为49152-65535。但是,临时端口选择算法应使用整个范围1024-65535。” -听起来ip_local_port_range无论如何都不应使用的值。
埃文·卡罗尔


@evan RFC 6056继续说:“在本地主机上提供特定服务可能需要的端口号不应包含在可用于临时端口随机化的端口号池中”,并且“管理员应识别可能由本地主机提供,并且应仅排除相应的注册端口”,但这不是操作系统通常为您提供的功能。唯一实际的排除机制是提高下限。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.