Это должно уменьшить конфликт между connect()
и bind()
(появился в Linux 4.2; у Jessie 3.16, а у Stretch 4.9):
commit 07f4c90062f8fc7c8c26f8f95324cbe8fa3145a5
Автор: Эрик Думазет
Дата: вс 24 мая 14:49:35 2015 -0700
tcp / dccp: попытаться не исчерпать ip_local_port_range в connect ()
Давняя проблема на занятых серверах - крошечный доступный порт TCP
диапазон (/ proc / sys / net / ipv4 / ip_local_port_range) и значение по умолчанию
последовательное распределение исходных портов в системном вызове connect ().
Если на хосте много активных сеансов TCP, скорее всего,
очень высокий, что все порты используются хотя бы одним потоком,
и последующие попытки bind (0) завершаются неудачно, или приходится сканировать большую часть
пространство, чтобы найти слот.
В этом патче я изменил начальную точку в __inet_hash_connect ()
так что мы стараемся отдавать предпочтение четным [1] портам, оставляя нечетные порты для bind ()
пользователи.
Мы по-прежнему выполняем последовательный поиск, поэтому нет никакой гарантии, но
если цели connect () сильно отличаются, конечный результат - мы оставляем
доступно больше портов для bind (), и мы распространили их по всему диапазону,
время понижения для connect () и bind () для поиска слота.
Эта стратегия работает хорошо только если / proc / sys / net / ipv4 / ip_local_port_range
является четным, т.е. если начальное / конечное значения имеют разную четность.
Поэтому по умолчанию / proc / sys / net / ipv4 / ip_local_port_range был изменен на
32768 - 60999 (вместо 32768 - 61000)
Здесь нет никаких изменений в аспектах безопасности, только плохое хеширование
это изменение может повлиять на схемы.
[1]: нечетное / четное свойство зависит от четности значений ip_local_port_range
Вы также можете увидеть последующий коммит 1580ab63fc9a03593072cc5656167a75c4f1d173 .