客户端:192.168.180.31
服务端:192.168.180.4
在客户端用 netstat
发现它与服务端有两个连接,一个 CLOSE_WAIT
和一个 ESTABLISHED
:
但是在服务端却一个与客户端有关的连接都看不到:
请教一下这是为什么呢?
这两个连接是否还存在?
还有什么其他命令可以用来调试吗?
非常感谢!
1
ThirdFlame 2019-03-07 17:15:07 +08:00
tcpdump
|
2
j0hnj OP @ThirdFlame #1 分别用
tcpdump -i ens18 -nn -v -A -s0 host 192.168.180.31 和 tcpdump -i eth1 -nn -v -A -s0 host 192.168.180.4 在服务端和客户端抓包,均没有任何数据 |
3
mengyaoss77 2019-03-07 17:44:17 +08:00 via Android
检查一下路由 有没有被 nat
|
4
watzds 2019-03-07 18:05:56 +08:00 via Android 1
有可能,服务端断电重启可能出现
|
5
joyme 2019-03-08 00:37:41 +08:00 via Android 1
楼上那种情况可能会出现,可以理解为 tcp 断开连接时没有走 4 次挥手,以至于客户端不知道服务器已经掉线了
|
6
j0hnj OP 感谢各位,我测试了一下,如果服务端突然断电、断网的话,客户端对这条连接的状态确实是一无所知的,除非真的去 send 一些数据才能发现连接已经断了。
另外开启 tcp keepalive 可以定时发送一些 keepalive 包,在重试几次都没收到 ack 之后就会关掉连接,可以避免出现客户端阻塞的问题。 |