Есть одно клиентское приложение, которое часто устанавливает TCP (HTTP) соединения с сервером. Соединение продолжается в течение одного запроса, а затем сервер закрывает соединение, поэтому сокет на сервере переходит в состояние TIME_WAIT на несколько минут. Поскольку клиентское приложение повторяет запросы, количество соединений TIME_WAIT на сервере растет и устанавливается на ~ 150 сокетов, постоянно находящихся в TIME_WAIT.
Иногда новое соединение от клиента выбирает недавно используемый временный исходный порт, который находится в состоянии TIME_WAIT на сервере, и соединение не устанавливается. С 32-кратным эфемерным диапазоном портов и 150 разъемами в TIME_WAIT вероятность этого> 10%. Точный сценарий также описан в разделе 2.3 RFC6056.
У меня нет никакого контроля над сервером, поэтому сокращение задержки TIME_WAIT или изменение поведения не вариант. Также сложно изменить клиентское приложение, чтобы выбрать исходный порт вручную, поскольку я использую стороннюю библиотеку для выполнения HTTP-запросов.
Увеличение эфемерного диапазона портов лишь незначительно уменьшит вероятность столкновения. Есть ли способ изменить временную стратегию выбора порта на клиенте (Linux), чтобы избежать таких коллизий?