Как проверить таймаут TCP в linux / macos?

11

У меня проблема с сетью на моем MacOS, которую мне нужно устранить. Я знаю, что у сокета TCP есть внутреннее время ожидания, которое закроет соединение, если удаленная сторона не отвечает (но также нет никакого изящного разъединения). Это какая-либо команда / инструмент, который я могу использовать, чтобы проверить точное значение этого времени ожидания?

grigoryvp
источник

Ответы:

15

Вы можете увидеть все системные значения 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. Время в миллисекундах.

оборота fuzzyTew
источник
4

Для Linux вы можете использовать:

$ sysctl -a | grep net.ipv4
NMaslarski
источник
3

Я не уверен, что это то, что вы ищете, но вы можете проверить значение keep-alive с помощью:

$ netstat -o
АТХ
источник
3
netstat не принимает опцию «-o» для меня в Mac OS X 10.6.6
fuzzyTew
1

Может быть не связано, но работает для меня:

Я пытаюсь определить время ожидания 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
хучь
источник