netstat 中的非对称 ESTABLISHED 会话

netstat 中的非对称 ESTABLISHED 会话

在第一台主机上,

root@xxx:~# netstat -natup | grep xxx
tcp        0      0 10.2.5.3:40740      xxx:10051   ESTABLISHED 1482/zabbix_proxy:

我们可以看到已经与远程主机建立了连接。

root@xxx:~# ps -eo uid,pid,etime | grep 1482
      106  1482 18-17:10:17

连接已建立大约 18 天。当我通过 SSH 连接到远程主机并运行时:

root@xxx:~# netstat -natup | grep 10.2.5.3

绝对没有任何条目!

这怎么可能?

答案1

如果第一台主机没有发起流量,则连接将永远保持在“ESTABLISHED”状态,直到本地进程关闭连接或远程主机关闭连接。

现在想象一下主机之间的网络中断;来自远程主机的数据包无法到达第一台主机。在此中断期间,远程主机尝试向第一台主机发送某些内容;由于没有从第一台主机收到 ACK 数据包,因此超时。一段时间后,连接超时,远程主机关闭连接。然而,第一台主机完全不知道另一台主机上发生了什么,因此连接仍处于“ESTABLISHED”状态。

如果远程主机遇到电源故障并重新启动,也会发生同样的情况;没有机会首先终止现有的网络连接。

为了防止这种情况,需要在套接字级别打开 tcp keepalive。这会导致主机之间定期交换保活数据包,以便即使没有正常流量也可以检测到网络中断。

答案2

首先,该etime字段指示进程何时启动。这并不一定意味着当时已将连接绑定到它。

接下来,也许正在使用某种网络地址转换?如果是这样,请grep输入远程主机上的端口号:netstat -natup|grep 40740以查看返回的内容。

相关内容