TCP RST数据包详解

14

TCP RST数据包为什么不需要确认?是因为发送RST的一方将在每次收到来自另一方的数据包时继续发送RST吗?

另外一个相关问题是,有效的TCP RST数据包的确认号为什么可以是0?

3个回答

9
相关的是,RST数据包中的确认号怎么可能为0?
由于设置了RST位的段应该终止连接,因此确认号仅在建立连接并在segement中设置ACK位时才有意义。 RST段的接收者还应考虑到另一端的应用程序协议客户端突然终止并且没有机会处理发送给它的未确认数据的可能性。
请参见RFC 793,第15页:
Acknowledgment Number:  32 bits

  If the ACK control bit is set this field contains the value of the
  next sequence number the sender of the segment is expecting to
  receive.  Once a connection is established this is always sent.

8
TCP RST数据包是远程告诉您前一个TCP数据包所发送的连接未被识别,可能是连接已关闭,端口未打开或类似情况。
我认为既然连接已失效,就没有必要回复ACK。由于远程对等方不知道连接,因此在RST数据包中的ACK为0是有意义的。
请查看:http://en.wikipedia.org/wiki/TCP_reset_attack

4

TCP RST意味着连接无效。也就是说,在远程端没有关联会话。据我所知,当您尝试到达的端口关闭时,通常会发送此数据包。

TCP FIN - 在连接即将关闭并且需要确认时发送。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接