краткое изложение проблемы
у нас есть установка, в которой много (от 800 до 2400 в секунду) входящих подключений к Linux-боксу, и у нас есть устройство NAT между клиентом и сервером, поэтому в системе осталось так много сокетов TIME_WAIT. Чтобы преодолеть это, мы установил tcp_tw_recycle на 1, но это привело к падению входящих подключений.Посмотрев в сети, мы нашли ссылки на то, почему происходит отбрасывание фреймов с tcp_tw_recycle и устройством NAT.
разрешение попробовал
Затем мы попытались установить для tcp_tw_reuse значение 1, и все работало нормально без каких-либо проблем с той же настройкой и конфигурацией.
Но в документации говорится, что tcp_tw_recycle и tcp_tw_reuse не следует использовать, когда соединения, проходящие через узлы с поддержкой состояния TCP, такие как брандмауэры, устройства NAT или балансировщики нагрузки, могут видеть пропущенные кадры. Чем больше подключений, тем больше вероятность того, что вы увидите эту проблему.
Запросы
1) можно ли использовать tcp_tw_reuse в таких сценариях? 2) если нет, то какая часть кода Linux препятствует использованию tcp_tw_reuse для такого сценария? 3) вообще какая разница между tcp_tw_recycle и tcp_tw_reuse?
tcp_fin_timeout
, а неtcp_timewait_len
. Но, возможно, это изменилось в версиях ядра? 13.07.2017echo 0 > /proc/sys/net/ipv4/tcp_timestamps
(временно используйте sysctl.conf для постоянных изменений). Подробности об удалении tcp_tw_recycle в версии 4.12: git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/ 12.10.2017