TCP连接可以通过多种方式结束。这是我的理解:
rst
:立竿见影。连接完成,并立即关闭。所有进一步的沟通都是一个新的"连接。
fin
:来自一方的好请求。它必须是ack
现在,然后另一方发送一个fin
来表示他们已经完成了谈话。这也必须是ack
现在。这些阶段可以同时发生,但必须传递fin
和伴随它的ack
。
还有其他人吗?我正在查看Wireshark中的tcp流,该流只发送了fin
,psh
和ack
位。这是公认的,并且连接已经结束。有什么其他方法可以关闭TCP连接吗?
如果fin
为ack
,是否可以发送更多数据?如果是,原始的fin
是否需要重新发送(在某个时刻发送fin
重置的一方的状态是否正确)?
答案 0 :(得分:2)
还有其他人吗?
没有
我正在查看Wireshark中的tcp流,它只发送了fin,psh和ack位。这是公认的,并且已经结束了。
没有。它只在一个方向关闭。在两个同行都发送了FIN之前,它还没有结束。
有什么其他方法可以关闭TCP连接吗?
无。
如果鳍被激活,可以发送更多数据吗?
即使没有确认FIN,也无法向FIN发送的方向发送。它可以向另一个方向发送。
如果是,原始鳍是否需要重新发送(在某个时刻发送鳍复位的一侧的状态)?
不可能发生。
答案 1 :(得分:1)
确实只有两种方法可以关闭TCP连接。
FIN机制是关闭TCP连接的常用方法。您必须了解TCP套接字有一个状态机不足。检查此状态机是否在发生的套接字上进行每个操作。套接字上的close称为halfclose。如果你这样做,就像告诉我没有更多的东西可以发送了。套接字下面的状态机实际上是要检查这个,如果你仍然试图发送你将得到错误返回代码。 我正在谈论的状态机在这里用图纸很好地描述;-) http://www.tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm
TCP / IP指南是一本在线书籍,也可以在该书中描述可能发生的RST场景,滑动窗口机制,字节acking,nagle和许多其他东西也是如此。而且不仅仅是TCP,其他协议。