如何在Linux / MacOS中检查TCP超时?


11

我的MacOS出现网络问题,需要进行故障排除。我知道TCP套接字具有内部超时,如果远程方没有响应(但也不能正常断开连接),它将关闭连接。我可以使用任何命令/工具来检查此超时的确切值吗?

Answers:


15

您可以使用以下命令查看所有系统设置的tcp值

$ sysctl net.inet.tcp

从tcp_var.h,tcp_subr.c和tcp_timer.c解释:

  • net.inet.tcp.keepidle =保持活动的空闲计时器
  • net.inet.tcp.keepintvl =发送保持活动的间隔
  • net.inet.tcp.keepinit =建立syn的超时
  • net.inet.tcp.mssdflt =默认TCP最大段大小
  • net.inet.tcp.v6mssdflt = IPv6的默认TCP最大段大小
  • 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 = mbufs不足时启用tcp_drain例程以获得更多帮助
  • net.inet.tcp.pcbcount =活动的PCB数
  • 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 =已启用后台IO
  • 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 =在所有TCP连接上假定SO_KEEPALIVE
  • net.inet.tcp.broken_peer_syn_rxmit_thres =在其余尝试期间TCP禁用rfc1323和rfc1644之前重传的SYN数
  • net.inet.tcp.pmtud_blackhole_detection =路径MTU发现黑洞检测
  • net.inet.tcp.pmtud_blackhole_mss =路径MTU发现黑洞检测降低了MSS

我相信,如果设置了SO_KEEPALIVE,默认情况下将在关闭连接之前发送8个keepalive。时间以毫秒为单位。



3

我不确定这是否是您要寻找的东西,但是您可以使用以下方法检查keep-alive值:

$ netstat -o

3
在Mac OS X 10.6.6中,netstat不接受'-o'选项
-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.