解析tcp连接的结束

时间:2015-07-30 20:48:19

标签: sockets tcp tcp-ip

TCP连接可以通过多种方式结束。这是我的理解:

rst:立竿见影。连接完成,并立即关闭。所有进一步的沟通都是一个新的"连接。

fin:来自一方的好请求。它必须是ack现在,然后另一方发送一个fin来表示他们已经完成了谈话。这也必须是ack现在。这些阶段可以同时发生,但必须传递fin和伴随它的ack

还有其他人吗?我正在查看Wireshark中的tcp流,该流只发送了finpshack位。这是公认的,并且连接已经结束。有什么其他方法可以关闭TCP连接吗?

如果finack,是否可以发送更多数据?如果是,原始的fin是否需要重新发送(在某个时刻发送fin重置的一方的状态是否正确)?

2 个答案:

答案 0 :(得分:2)

  

还有其他人吗?

没有

  

我正在查看Wireshark中的tcp流,它只发送了fin,psh和ack位。这是公认的,并且已经结束了。

没有。它只在一个方向关闭。在两个同行都发送了FIN之前,它还没有结束。

  

有什么其他方法可以关闭TCP连接吗?

无。

  

如果鳍被激活,可以发送更多数据吗?

即使没有确认FIN,也无法向FIN发送的方向发送。它可以向另一个方向发送。

  

如果是,原始鳍是否需要重新发送(在某个时刻发送鳍复位的一侧的状态)?

不可能发生。

答案 1 :(得分:1)

确实只有两种方法可以关闭TCP连接。

  • FIN 4方式握手
  • RST

FIN机制是关闭TCP连接的常用方法。您必须了解TCP套接字有一个状态机不足。检查此状态机是否在发生的套接字上进行每个操作。套接字上的close称为halfclose。如果你这样做,就像告诉我没有更多的东西可以发送了。套接字下面的状态机实际上是要检查这个,如果你仍然试图发送你将得到错误返回代码。 我正在谈论的状态机在这里用图纸很好地描述;-) http://www.tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm

TCP / IP指南是一本在线书籍,也可以在该书中描述可能发生的RST场景,滑动窗口机制,字节acking,nagle和许多其他东西也是如此。而且不仅仅是TCP,其他协议。