¿Cómo verificar el tiempo de espera de TCP en linux / macos?

11

Tengo un problema de red en mi MacOS que necesito solucionar. Sé que el socket TCP tiene un tiempo de espera interno que cerrará la conexión si la parte remota no responde (pero tampoco hay una desconexión elegante). ¿Hay algún comando / herramienta que pueda usar para verificar el valor exacto de este tiempo de espera?

grigoryvp
fuente

Respuestas:

15

Puede ver todos los valores tcp establecidos por el sistema con

$ sysctl net.inet.tcp

Interpretado de tcp_var.h, tcp_subr.c y tcp_timer.c:

  • net.inet.tcp.keepidle = temporizador inactivo keepalive
  • net.inet.tcp.keepintvl = intervalo para enviar keepalives
  • net.inet.tcp.keepinit = tiempo de espera para establecer syn
  • net.inet.tcp.mssdflt = Tamaño de segmento máximo predeterminado de TCP
  • net.inet.tcp.v6mssdflt = Tamaño de segmento máximo predeterminado de TCP para IPv6
  • net.inet.tcp.minmss = Tamaño mínimo del segmento TCP máximo
  • net.inet.tcp.minmssoverload = Número de segmentos TCP por segundo que pueden estar por debajo del tamaño MINMSS
  • net.inet.tcp.rfc1323 = Habilitar extensiones rfc1323 (TCP de alto rendimiento)
  • net.inet.tcp.rfc1644 = Habilitar extensiones rfc1644 (TTCP)
  • net.inet.tcp.do_tcpdrain = Habilita la rutina tcp_drain para obtener ayuda adicional cuando hay poco mbufs
  • net.inet.tcp.pcbcount = Número de PCB activos
  • net.inet.tcp.icmp_may_rst = Ciertos mensajes inalcanzables de ICMP pueden abortar conexiones en SYN_SENT
  • net.inet.tcp.strict_rfc1948 = Determina si RFC1948 se sigue exactamente
  • net.inet.tcp.isn_reseed_interval = Segundos entre la reposición del secreto ISN
  • net.inet.tcp.background_io_enabled = IO de fondo habilitado
  • net.inet.tcp.rtt_min = valor rtt mínimo permitido
  • net.inet.tcp.randomize_ports = Aleatorizar números de puerto TCP
  • net.inet.tcp.tcbhashsize = Tamaño de la tabla hash del bloque de control TCP
  • net.inet.tcp.msl = Vida útil máxima del segmento
  • net.inet.tcp.always_keepalive = Asume SO_KEEPALIVE en todas las conexiones TCP
  • net.inet.tcp.broken_peer_syn_rxmit_thres = Número de SYN retransmitidos antes de que TCP deshabilite rfc1323 y rfc1644 durante el resto de los intentos
  • net.inet.tcp.pmtud_blackhole_detection = Path MTU Discovery Black Hole Detection
  • net.inet.tcp.pmtud_blackhole_mss = La detección de agujeros negros de descubrimiento de MTU de ruta redujo MSS

Creo que, de forma predeterminada, se enviarán 8 keepalives antes de que se cierre la conexión si se establece SO_KEEPALIVE. Los tiempos están en milisegundos.

fuzzyTew
fuente
4

Para linux puedes usar:

$ sysctl -a | grep net.ipv4
NMaslarski
fuente
3

No estoy seguro de si esto es lo que está buscando, pero puede verificar el valor de mantener vivo con:

$ netstat -o
atx
fuente
3
netstat no acepta la opción '-o' para mí en Mac OS X 10.6.6
fuzzyTew
1

Quizás no relacionado, pero funciona para mí:

Estoy tratando de determinar el tiempo de espera interactivo ssh / tcp para uno de nuestros servidores, así que simplemente:

date; ssh host.domain 'sleep 10000'; date

salida de ejemplo:

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
huch
fuente