请教一个奇怪的 TCP 问题

2019-03-07 17:09:16 +08:00
 j0hnj

客户端:192.168.180.31
服务端:192.168.180.4

在客户端用 netstat 发现它与服务端有两个连接,一个 CLOSE_WAIT 和一个 ESTABLISHED:

但是在服务端却一个与客户端有关的连接都看不到:

请教一下这是为什么呢?

这两个连接是否还存在?

还有什么其他命令可以用来调试吗?

非常感谢!

2442 次点击
所在节点    互联网
6 条回复
ThirdFlame
2019-03-07 17:15:07 +08:00
tcpdump
j0hnj
2019-03-07 17:24:08 +08:00
@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
在服务端和客户端抓包,均没有任何数据
mengyaoss77
2019-03-07 17:44:17 +08:00
检查一下路由 有没有被 nat
watzds
2019-03-07 18:05:56 +08:00
有可能,服务端断电重启可能出现
joyme
2019-03-08 00:37:41 +08:00
楼上那种情况可能会出现,可以理解为 tcp 断开连接时没有走 4 次挥手,以至于客户端不知道服务器已经掉线了
j0hnj
2019-03-08 15:41:02 +08:00
感谢各位,我测试了一下,如果服务端突然断电、断网的话,客户端对这条连接的状态确实是一无所知的,除非真的去 send 一些数据才能发现连接已经断了。
另外开启 tcp keepalive 可以定时发送一些 keepalive 包,在重试几次都没收到 ack 之后就会关掉连接,可以避免出现客户端阻塞的问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/542212

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX