Как проверить таймаут TCP в linux / macos?
У меня проблема с сетью на моем MacOS, которую мне нужно устранить. Я знаю, что у сокета TCP есть внутреннее время ожидания, которое закроет соединение, если удаленная сторона не отвечает (но также нет никакого изящного отключения). Это какая-либо команда / инструмент, который я могу использовать, чтобы проверить точное значение этого тайм-аута (ов)?
4 ответа
Вы можете увидеть все системные значения tcp с помощью
$ sysctl net.inet.tcp
Интерпретируется из tcp_var.h, tcp_subr.c и tcp_timer.c:
- net.inet.tcp.keepidle = keepalive таймер простоя
- net.inet.tcp.keepintvl = интервал для отправки активности
- net.inet.tcp.keepinit = время ожидания для установки син
- net.inet.tcp.mssdflt = Максимальный размер сегмента TCP по умолчанию
- net.inet.tcp.v6mssdflt = Максимальный размер сегмента TCP по умолчанию для IPv6
- net.inet.tcp.minmss = минимальный максимальный размер сегмента TCP
- net.inet.tcp.minmssoverload = Количество сегментов TCP в секунду, которые могут быть меньше размера MINMSS
- net.inet.tcp.rfc1323 = Включить расширения rfc1323 (высокопроизводительный TCP)
- net.inet.tcp.rfc1644 = Включить расширения rfc1644 (TTCP)
- net.inet.tcp.do_tcpdrain = Включить подпрограмму tcp_drain для дополнительной помощи, когда мало mbufs
- net.inet.tcp.pcbcount = Количество активных печатных плат
- net.inet.tcp.icmp_may_rst = Некоторые недоступные сообщения ICMP могут прерывать соединения в SYN_SENT
- net.inet.tcp.strict_rfc1948 = Определяет, точно ли соответствует RFC1948
- net.inet.tcp.isn_reseed_interval = Секунды между повторным заполнением секретного кода ISN
- net.inet.tcp.background_io_enabled = Фоновый ввод-вывод включен
- net.inet.tcp.rtt_min = минимальное значение RTT разрешено
- net.inet.tcp.randomize_ports = Рандомизировать номера портов TCP
- net.inet.tcp.tcbhashsize = Размер хеш-таблицы TCP-блока управления
- net.inet.tcp.msl = Максимальное время жизни сегмента
- net.inet.tcp.always_keepalive = Предполагать SO_KEEPALIVE на всех TCP-соединениях
- net.inet.tcp.broken_peer_syn_rxmit_thres = Количество повторно переданных SYN перед тем, как TCP отключит rfc1323 и rfc1644 во время остальных попыток
- net.inet.tcp.pmtud_blackhole_detection = Path MTU Discovery Обнаружение черной дыры
- net.inet.tcp.pmtud_blackhole_mss = Path MTU Discovery Обнаружение черной дыры снижено MSS
Я полагаю, что по умолчанию 8 сообщений активности будут отправлены до того, как соединение будет закрыто, если установлен SO_KEEPALIVE. Время в миллисекундах.
Я не уверен, что это то, что вы ищете, но вы можете проверить значение keep-alive с помощью:
$ netstat -o
Может быть не связано, но работает для меня:
Я пытаюсь определить время ожидания ssh/tcp на одном из наших серверов, поэтому я просто:
date; ssh host.domain 'sleep 10000'; date
пример вывода:
Thu May 24 12:22:39 CEST 2018
packet_write_wait: Connection to 172.29.1.27 port 22: Broken pipe
Thu May 24 14:22:40 CEST 2018