【问题标题】:Is TCP Reset (RST) two way?TCP重置(RST)是两种方式吗?
【发布时间】:2014-08-20 23:33:33
【问题描述】:

我有一个使用持久 TCP 连接的客户端-服务器 (Java) 应用程序,但有时服务器在尝试写入套接字时会收到 java.io.IOException: Connection reset by peer 异常,但我在客户端日志中没有看到任何错误。

此 RST 可能是由中间代理/路由器引起的,但如果是这种情况,是否也应该在客户端上看到?

【问题讨论】:

    标签: sockets tcp


    【解决方案1】:

    如果 RST 是由客户端发送的,则可以使用数据包嗅探器(例如 wireshark)在其上看到它。但是,它不会出现在任何用户级套接字中,因为它是由操作系统作为对各种错误输入(例如连接到关闭端口的连接尝试)的响应而发送的。

    如果 RST 是网络发送的,那么它就冒充客户端断开连接。它可以在一个方向上这样做,也可以在两个方向上这样做。在这种情况下,客户端可能什么都看不到,除了当客户端继续向它认为打开的连接发送数据时实际服务器发送的 RST,而服务器认为它是关闭的。

    尝试捕获服务器和客户端上的流量,看看重置来自哪里。

    【讨论】:

    • 谢谢,这是否意味着如果节点之间有路由器并且路由器RST连接,这将只有试图写入的节点才能看到;另一个节点必须读/写才能看到连接终止,即使它是服务器端?
    • TCP RST 消息应该从 tcp 端点发送 - 客户端或服务器。网络(理论上)没有业务发送它们。为了发送一个将被服务器接收到的 TCP RST,网络必须伪装成客户端。要向客户端发送一个,它必须伪装成服务器。但是,如果 RST 仅发送到一侧,则另一台机器将尝试继续 TCP 会话,并从第二台机器接收真正的 RST,该机器已经关闭了连接。
    猜你喜欢
    • 2010-09-20
    • 2020-03-19
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多