Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets TCP重置(RST)是双向的吗?_Sockets_Tcp - Fatal编程技术网

Sockets TCP重置(RST)是双向的吗?

Sockets TCP重置(RST)是双向的吗?,sockets,tcp,Sockets,Tcp,我有一个使用持久TCP连接的客户机-服务器(Java)应用程序,但有时服务器在尝试对套接字进行写入时会收到Java.io.IOException:Connection reset by peer异常,但是我在客户机日志中没有看到任何错误 此RST可能是由中间代理/路由器引起的,但如果是这种情况,是否也应该在客户端上看到此RST?如果RST是由客户端发送的,则可以使用数据包嗅探器(如)在其上看到此RST。但是,它不会出现在任何用户级套接字中,因为它是由操作系统发送的,作为对各种错误输入的响应(例如

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


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

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

如果RST是由网络发送的,那么它就假装是客户端来切断连接。它可以在一个方向上这样做,也可以在两个方向上都这样做。在这种情况下,客户机可能看不到任何东西,只有当客户机继续向其认为打开的连接发送数据,而服务器认为该连接已关闭时,实际服务器发送的RST除外


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

谢谢,这是否意味着如果节点之间有路由器,路由器会重新连接,则只有尝试写入的节点才能看到这一点;另一个节点必须读/写才能看到连接终止,即使它是服务器端?TCP RST消息应该从TCP端点(客户端或服务器)发送。网络(理论上)没有理由发送它们。要发送将由服务器接收的TCP RST,网络必须假装是客户端。要发送一个到客户端,它必须假装是服务器。但是,如果RST仅发送到一侧,则另一台计算机将尝试继续TCP会话,并从已关闭连接的第二台计算机接收真正的RST。