Sockets 正在分析tcp连接的结束
TCP连接可以通过多种方式结束。这是我的理解:Sockets 正在分析tcp连接的结束,sockets,tcp,tcp-ip,Sockets,Tcp,Tcp Ip,TCP连接可以通过多种方式结束。这是我的理解: rst:立即启动。连接完成后,立即关闭。所有进一步的通信都是“新”连接 fin:一方的请求很好。它必须是ack已确认,然后另一方发送fin表示他们已结束通话。这也必须ack确认。这些阶段可以同时发生,但必须传递一个fin和伴随它的ack 还有其他的吗?我正在查看Wireshark中的tcp流,它只发送了fin、psh、和ack位。这已确认,连接已结束。还有什么其他关闭TCP连接的方法 如果fin被acked,是否可以发送更多数据?如果是,是否需要重
rst
:立即启动。连接完成后,立即关闭。所有进一步的通信都是“新”连接
fin
:一方的请求很好。它必须是ack
已确认,然后另一方发送fin
表示他们已结束通话。这也必须ack
确认。这些阶段可以同时发生,但必须传递一个fin
和伴随它的ack
还有其他的吗?我正在查看Wireshark中的tcp流,它只发送了fin
、psh
、和ack
位。这已确认,连接已结束。还有什么其他关闭TCP连接的方法
如果fin
被ack
ed,是否可以发送更多数据?如果是,是否需要重新发送原始的fin
(发送fin
的一方的状态是否在某个点重置)
还有其他的吗
没有
我在看Wireshark中的tcp流,它只发送了fin、psh和ack位。这已确认,连接已结束
不,它只在一个方向关闭。直到两位同行都发送了FIN,这一切才结束
还有什么其他关闭TCP连接的方法
没有
如果fin已确认,是否可以发送更多数据
即使FIN未确认,也无法按照FIN发送的方向发送。它可以发送到另一个方向
如果是,是否需要重新发送原始fin(发送fin的一方的状态是否在某个点重置)
不可能发生。确实只有两种方法可以关闭TCP连接
- FIN 4路握手
- RST
《TCP/IP指南》是一本在线书籍,书中还描述了可能发生的RST场景,以及滑动窗口机制、字节确认、nagle和许多其他内容。不仅仅是TCP协议,还有其他协议。在离开毫无意义的谷歌搜索之前,请仔细阅读这个问题。结束连接的方法比图中的更多(大多数都没有提到重置!),我提到的第二点是结束连接的常用方法。我对连接失效的非标准方式感兴趣。假设存在一种,这就是状态图应该显示的。RFC 793中的真实TCP状态图清楚地表明,没有任何其他方式可以终止TCP连接。@EJP:但是,TCP连接也有其他方式会终止。计算机脱离网络(当您将计算机置于睡眠状态时,它不一定会杀死所有打开的连接)。这些是超时事件。是否有通过超时结束连接的过程?(也就是说,我在几分钟内发送了几次“你在吗”数据包,当我没有收到响应时,我会关闭连接,如果你最终出现,我会发送重置)这是标准吗?@AndrewScott这些都是网络消亡的方式。您的问题是关于TCP连接的。您提到的每一个条件都将产生重置或应用程序超时。句号。这是正确的,但TCP/IP堆栈可能不符合。一些供应商为此臭名昭著。超时或断开连接怎么办?有什么标准的方法来处理它们吗?@Andrewspot通常在TCP连接需要保持时(例如,定期发送一个小数据包)检测TCP连接。@Jason:当检测失败(未确认)时,如何断开连接@Andrewspot TCP keepalive失败将产生重置。如果是您自己的超时,或者是应用程序协议中实现的心跳,那么您只需关闭套接字,它将发送一个FIN等。