Для моделирования сетевых катастроф нашей серверной среды мы ищем способ преднамеренного тайм-аута сокета TCP. Есть ли простые способы для существующих сокетов? Кроме того, небольшая программа для тестирования на С была бы плюсом.
Мы уже пытались отключить сетевые интерфейсы во время чтения буфера TCP и чтения из отключенных подключенных ресурсов (samba).
Наш тестовый сервер - Ubuntu 12.04.4.
/proc/sys/net/ipv4/tcp_keepalive_time
на очень маленькое числоncat -v
чтобы увидеть, что именноncat
делает. Мне потребовалось 2м7,291 секунды на установку Ubuntu 12.04 в ванильном режиме до тайм-аутаПервый ответ правильный, но я обнаружил, как работают эти таймауты, чтобы вы могли наблюдать и тестировать их (не забудьте заблокировать порт!).
Существует 4 наиболее интересных параметра ядра, связанных с таймаутами TCP:
Сейчас есть 2 сценария:
Разъем открывается и пытается передать - тогда (если нет ответа от другой стороны), система повторяет попытки
tcp_retries2
. При значении по умолчанию для пенсий это занимает где-то более 2 минут и время ожидания сокета истекает.Разъем открывается и простаивает - тогда интересны ограничения keepalive. С незанятым сокетом система будет ждать
tcp_keepalive_time
секунды, а после этого попытатьсяtcp_keepalive_probes
раз отправить TCP KEEPALIVE с интервалами вtcp_keepalive_intvl
секунды. И только после этого все сбои сокета истекают.источник
netstat -o