V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
j0hnj
V2EX  ›  互联网

请教一个奇怪的 TCP 问题

  •  
  •   j0hnj · 2019-03-07 17:09:16 +08:00 · 2544 次点击
    这是一个创建于 2079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    客户端:192.168.180.31
    服务端:192.168.180.4

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

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

    请教一下这是为什么呢?

    这两个连接是否还存在?

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

    非常感谢!

    6 条回复    2019-03-08 15:41:02 +08:00
    ThirdFlame
        1
    ThirdFlame  
       2019-03-07 17:15:07 +08:00
    tcpdump
    j0hnj
        2
    j0hnj  
    OP
       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
        3
    mengyaoss77  
       2019-03-07 17:44:17 +08:00 via Android
    检查一下路由 有没有被 nat
    watzds
        4
    watzds  
       2019-03-07 18:05:56 +08:00 via Android   ❤️ 1
    有可能,服务端断电重启可能出现
    joyme
        5
    joyme  
       2019-03-08 00:37:41 +08:00 via Android   ❤️ 1
    楼上那种情况可能会出现,可以理解为 tcp 断开连接时没有走 4 次挥手,以至于客户端不知道服务器已经掉线了
    j0hnj
        6
    j0hnj  
    OP
       2019-03-08 15:41:02 +08:00
    感谢各位,我测试了一下,如果服务端突然断电、断网的话,客户端对这条连接的状态确实是一无所知的,除非真的去 send 一些数据才能发现连接已经断了。
    另外开启 tcp keepalive 可以定时发送一些 keepalive 包,在重试几次都没收到 ack 之后就会关掉连接,可以避免出现客户端阻塞的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1961 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:24 · PVG 00:24 · LAX 08:24 · JFK 11:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.