Назад | Перейти на главную страницу

Истощение TCP-порта реально?

Насколько быстро нужно выделять эфемерные порты, чтобы попасть в состояние исчерпания портов TCP?

Мне сказали, что для запросов клиентов доступны порты ~ 4k (старая Windows), ~ 16k (более новая Windows) или ~ 28k (RH Linux). Итак, пул номеров портов глобальный или на удаленный IP-адрес?

Если они глобальные, так как порты становятся повторно используемыми только через 240 (Windows) или 60 (RH Linux) секунд, их нужно будет распределять со скоростью ~ 16/66/466 в секунду соответственно?

Это верно?

По вашему опыту, стоит ли мне практически об этом беспокоиться?

DOS атаки отдельно, только с плохо написанными приложениями. Основной способ избежать исчерпания порта TCP - это объединение в пул соединений, например, HTTP keep-alive. Это имеет несколько положительных эффектов:

  1. Меньше подключений в единицу времени.
  2. Первое закрытие соединения обычно выполняется клиентом, а не сервером. Это перемещает состояние TIME_WAIT с сервера на клиент, который использует гораздо меньше сокетов и портов и поэтому может лучше переносить это.

Diito EJP и Sirex. Мониторинг поможет вам лучше понять, где вы находитесь. Вы также можете настроить, как долго сокету разрешено оставаться в состоянии TIME_WAIT. Мне приходилось делать именно это в системе, которая общается с тысячами устройств телеметрии GPRS. Они набирают номер и потребляют порты, как никто другой. Более агрессивный порог TIME_WAIT означает, что наше приложение более стабильно.

В MS Windows есть несколько полезных инструментов для мониторинга использования порта, например TCPView и ProcessExplorer (MS SysInternals). netstat -a может быть медленным при тысячах подключений, поэтому вы можете использовать netstat -an вместо этого (это останавливает разрешение DNS для адресов). Но за Linux не ручаюсь ....