Почему Linux не использует временные порты IANA?

30

Согласно Википедии

Управление по присвоению номеров в Интернете (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 не принял стандартный диапазон?

Эван Кэрролл
источник

Ответы:

21

Было время, когда IANA назначала порты только до 1023. См. RFC1700 . Когда-то это было стандартом. Большую часть времени у меня нет проблем с поиском, когда что-то меняется в потоке RFC, но вопрос об изменении портов с 1024 на 49152 с зарегистрированных на назначенные мне не удался.

С точки зрения истории Linux, в 2007 году был задан вопрос о ip_local_port_range по умолчанию. В то время было решено использовать упомянутый вами диапазон Linux из-за страха, что большие номера портов могут вызвать проблемы, и начало диапазона в 49152 может оставить слишком мало номера портов в пуле. Смотрите это и его поток. В то время высказывалось мнение, что начало в 32768 г. соответствовало духу процедур IANA, если не полностью соответствовало требованиям. Читая это, я делаю вывод, что разработчики предполагали, что большинство заданий будет происходить из нижней части диапазона и будет двигаться вверх. На момент написания этой статьи я насчитал немногим более 100 назначенных номеров портов (не считая разных протоколов как отдельных) между 32768 и 49152, так что это довольно неплохо сохранилось за последние пять лет.

Я не знаю, почему диапазон считался слишком маленьким, но я могу представить две причины:

  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не должно использоваться в любом случае.
Эван Кэрролл
1
Вот тема о том, что Linux использует порты вблизи потолка IANA
Эван Кэрролл
@evan RFC 6056 продолжает, что «номера портов, которые могут потребоваться для предоставления конкретной услуги на локальном хосте, НЕ ДОЛЖНЫ включаться в пул номеров портов, доступных для случайной рандомизации портов», и что «администраторы должны идентифицировать службы, которые могут быть предложенным локальным хостом, и СЛЕДУЕТ исключать только соответствующие зарегистрированные порты ", но это не то, что операционная система обычно предоставляет для вас. Единственным практическим механизмом исключения является повышение нижней границы.
JMB