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

Как проверить тайм-аут 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