Wie überprüfe ich das TCP-Timeout unter Linux / Macos?

11

Ich habe ein Netzwerkproblem auf meinem MacOS, das ich beheben muss. Ich weiß, dass der TCP-Socket ein internes Timeout hat, das die Verbindung schließt, wenn die Gegenstelle nicht antwortet (aber auch keine ordnungsgemäße Trennung). Ist es ein Befehl / Werkzeug, mit dem ich den genauen Wert dieser Zeitüberschreitung (en) überprüfen kann?

grigoryvp
quelle

Antworten:

15

Sie können alle vom System festgelegten TCP-Werte mit anzeigen

$ sysctl net.inet.tcp

Interpretiert aus tcp_var.h, tcp_subr.c und tcp_timer.c:

  • net.inet.tcp.keepidle = Keepalive-Leerlauf-Timer
  • net.inet.tcp.keepintvl = Intervall zum Senden von Keepalives
  • net.inet.tcp.keepinit = Zeitüberschreitung beim Einrichten von syn
  • net.inet.tcp.mssdflt = Standardmäßige maximale TCP-Segmentgröße
  • net.inet.tcp.v6mssdflt = Standardmäßige maximale TCP-Segmentgröße für IPv6
  • net.inet.tcp.minmss = Minimale maximale TCP-Segmentgröße
  • net.inet.tcp.minmssoverload = Anzahl der TCP-Segmente pro Sekunde, die unter der MINMSS-Größe liegen dürfen
  • net.inet.tcp.rfc1323 = Aktivieren Sie die Erweiterungen für rfc1323 (Hochleistungs-TCP)
  • net.inet.tcp.rfc1644 = TTCP-Erweiterungen (rfc1644) aktivieren
  • net.inet.tcp.do_tcpdrain = Aktivieren Sie die Routine tcp_drain, um zusätzliche Hilfe zu erhalten, wenn nur wenig MBufs vorhanden sind
  • net.inet.tcp.pcbcount = Anzahl der aktiven Leiterplatten
  • net.inet.tcp.icmp_may_rst = Bestimmte nicht erreichbare ICMP-Nachrichten können Verbindungen in SYN_SENT abbrechen
  • net.inet.tcp.strict_rfc1948 = Legt fest, ob RFC1948 genau befolgt wird
  • net.inet.tcp.isn_reseed_interval = Sekunden zwischen dem erneuten Säen des ISN-Geheimnisses
  • net.inet.tcp.background_io_enabled = Hintergrund-E / A aktiviert
  • net.inet.tcp.rtt_min = min rtt Wert erlaubt
  • net.inet.tcp.randomize_ports = Randomize TCP-Portnummern
  • net.inet.tcp.tcbhashsize = Größe der TCP-Steuerblock-Hashtabelle
  • net.inet.tcp.msl = Maximale Segmentlebensdauer
  • net.inet.tcp.always_keepalive = Angenommen, SO_KEEPALIVE für alle TCP-Verbindungen
  • net.inet.tcp.broken_peer_syn_rxmit_thres = Anzahl der erneut übertragenen SYNs, bevor TCP rfc1323 und rfc1644 während der restlichen Versuche deaktiviert
  • net.inet.tcp.pmtud_blackhole_detection = Pfad MTU Discovery Black Hole Detection
  • net.inet.tcp.pmtud_blackhole_mss = Pfad MTU Discovery Black Hole Detection senkte MSS

Ich glaube, dass standardmäßig 8 Keepalives gesendet werden, bevor die Verbindung geschlossen wird, wenn SO_KEEPALIVE gesetzt ist. Die Zeiten sind in Millisekunden angegeben.

fuzzyTew
quelle
4

Für Linux können Sie verwenden:

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

Ich bin mir nicht sicher, ob dies das ist, wonach Sie suchen, aber Sie können den Keep-Alive-Wert überprüfen mit:

$ netstat -o
atx
quelle
3
netstat akzeptiert die Option '-o' für mich unter Mac OS X 10.6.6 nicht
fuzzyTew
1

Vielleicht nicht verwandt, funktioniert aber für mich:

Ich versuche, das interaktive Zeitlimit für ssh / tcp für einen unserer Server zu ermitteln.

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

Beispielausgabe:

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
quelle