Назад |
Перейти на главную страницу
Как проверить тайм-аут TCP в linux / macos?
У меня возникла проблема с сетью на моей MacOS, которую мне нужно устранить. Я знаю, что сокет TCP имеет внутренний тайм-аут, который закроет соединение, если удаленная сторона не отвечает (но без изящного отключения). Могу ли я использовать какую-либо команду / инструмент для проверки точного значения этого таймаута (ов)?
Вы можете увидеть все системные значения 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 для дополнительной помощи при низком уровне буферов
- 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 = Обнаружение MTU пути Обнаружение черной дыры
- net.inet.tcp.pmtud_blackhole_mss = Обнаружение MTU пути Обнаружение черных дыр снижено MSS
Я считаю, что по умолчанию перед закрытием соединения будет отправлено 8 сообщений поддержки активности, если установлено SO_KEEPALIVE. Время в миллисекундах.
Для Linux вы можете использовать:
$ sysctl -a | grep net.ipv4
Я не уверен, что это то, что вы ищете, но вы можете проверить значение 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