Comment vérifier le délai d'expiration TCP sous Linux / MacOS?

11

J'ai un problème de réseau sur mon MacOS que je dois résoudre. Je sais que le socket TCP a un délai d'expiration interne qui fermera la connexion si la partie distante ne répond pas (mais pas de déconnexion gracieuse non plus). Est-ce une commande / un outil que je peux utiliser pour vérifier la valeur exacte de ce délai?

grigoryvp
la source

Réponses:

15

Vous pouvez voir toutes les valeurs tcp définies par le système avec

$ sysctl net.inet.tcp

Interprété à partir de tcp_var.h, tcp_subr.c et tcp_timer.c:

  • net.inet.tcp.keepidle = temporisateur d'inactivité keepalive
  • net.inet.tcp.keepintvl = intervalle pour envoyer des keepalives
  • net.inet.tcp.keepinit = délai d'expiration pour l'établissement de syn
  • net.inet.tcp.mssdflt = Taille maximale du segment TCP par défaut
  • net.inet.tcp.v6mssdflt = Taille maximale du segment TCP par défaut pour IPv6
  • net.inet.tcp.minmss = Taille maximale minimale du segment TCP
  • net.inet.tcp.minmssoverload = Nombre de segments TCP par seconde autorisés à être sous la taille MINMSS
  • net.inet.tcp.rfc1323 = Activer les extensions rfc1323 (TCP hautes performances)
  • net.inet.tcp.rfc1644 = Activer les extensions rfc1644 (TTCP)
  • net.inet.tcp.do_tcpdrain = Activer la routine tcp_drain pour une aide supplémentaire en cas de manque de mbufs
  • net.inet.tcp.pcbcount = Nombre de PCB actifs
  • net.inet.tcp.icmp_may_rst = Certains messages ICMP inaccessibles peuvent abandonner les connexions dans SYN_SENT
  • net.inet.tcp.strict_rfc1948 = Détermine si RFC1948 est suivi exactement
  • net.inet.tcp.isn_reseed_interval = Secondes entre le réamorçage du secret ISN
  • net.inet.tcp.background_io_enabled = IO d'arrière-plan activé
  • net.inet.tcp.rtt_min = valeur rtt min autorisée
  • net.inet.tcp.randomize_ports = Randomiser les numéros de port TCP
  • net.inet.tcp.tcbhashsize = Taille de la table de hachage du bloc de contrôle TCP
  • net.inet.tcp.msl = Durée de vie maximale du segment
  • net.inet.tcp.always_keepalive = Supposons que SO_KEEPALIVE sur toutes les connexions TCP
  • net.inet.tcp.broken_peer_syn_rxmit_thres = Nombre de SYN retransmis avant que TCP ne désactive rfc1323 et rfc1644 pendant le reste des tentatives
  • net.inet.tcp.pmtud_blackhole_detection = Détection de trou noir de découverte MTU de chemin
  • net.inet.tcp.pmtud_blackhole_mss = Chemin MTU Discovery Black Hole Detection abaissé MSS

Je pense que par défaut, 8 keepalives seront envoyés avant la fermeture de la connexion si SO_KEEPALIVE est défini. Les temps sont en millisecondes.

fuzzyTew
la source
4

Pour linux, vous pouvez utiliser:

$ sysctl -a | grep net.ipv4
NMaslarski
la source
3

Je ne sais pas si c'est ce que vous recherchez, mais vous pouvez vérifier la valeur de conservation avec:

$ netstat -o
atx
la source
3
netstat n'accepte pas l'option '-o' pour moi dans Mac OS X 10.6.6
fuzzyTew
1

Peut-être sans rapport, mais fonctionne pour moi:

J'essaie de déterminer le délai d'attente interactif ssh / tcp pour l'un de nos serveurs, donc je viens de:

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

exemple de sortie:

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
la source