为什么我看到RST ACK数据包而不是RST数据包?


42

在Wireshark中查看时,我经常看到TCP流以RST,ACK数据包而不是RST数据包结尾。有人知道为什么吗?

我看到的一个例子:

SYN SYN,ACK ...数据... RST,ACK

Wireshark不会在RST ACK数据包之前拾取RST数据包。


2
您为什么认为在RST / ACK之前应该有一个RST段?也许您可以提供此类数据包跟踪的示例?
Gerben 2013年

ACK是否在同一数据包中附带了RST?
generalnetworkerror 2013年

有什么答案对您有帮助吗?如果是这样,您应该接受答案,这样问题就不会永远弹出来寻找答案。或者,您可以提供并接受自己的答案。
罗恩·莫平

我确认您发送了请求\数据结束连接结束连接= RST
motoko '18

Answers:


55

RST / ACK不是对RST的确认,就像SYN / ACK不是对SYN的确认一样。TCP建立实际上是一个四步过程:发起主机向接收主机发送SYN,接收主机为该SYN发送ACK。接收主机将SYN发送到发起主机,发起主机又发回ACK。这将建立状态通信。

SYN --> 
    <-- ACK
    <-- SYN
ACK -->

为了提高效率,接收主机可以对SYN进行ACK,并在同一数据包中发送自己的SYN,从而创建了我们惯常看到的三向过程。

SYN -->
    <-- SYN/ACK
ACK -->

对于RST / ACK,设备将使用ACK确认序列中先前数据包中发送的任何数据,然后通知发送方该连接已通过RST关闭。该设备将两个数据包简单地组合为一个,就像SYN / ACK。在关闭TCP会话时,RST / ACK通常不是正常的响应,但也不一定表示存在问题。


4
发送RST / ACK的示例场景是接收主机未在目标TCP端口上侦听时。
Indika K 2014年

确实是的。我曾经尝试在端口80上模拟从机器A到机器B的DDoS攻击(出于教育目的;))。但是B的80端口未打开。因此,我可以看到机器B RST ACK对伪造的源地址发送了很多响应。
smwikipedia

RST / ACK响应能否取决于数据包内容?即服务器接收到数据包,并且由于数据包内容符合某个条件,因此会话已关闭。
skooog

1

建立连接后,所有数据包都需要设置ACK并与接收到的数据包的序列号匹配,以实现可靠的传输/安全性。没有ACK的RST将不被接受。当一侧发送RST时,套接字立即关闭,并且接收方在接收到有效RST之后也立即关闭套接字。它不需要也不能被确认。

TCP握手后

A-> B Syn = x,Ack = y,len = z,ACK标志

B ---> A Syn = y,Ack = x + z,len = o,ACK标志

A-> B Syn = x + z,Ack = y + o,len = p,ACK标志

B ---> A Syn = y + o,ACK = x + z + p,len = q,RST,ACK标志

B在发送完最后一个数据包后关闭套接字,而A在接收到它之后关闭套接字。

(此处不考虑TCP窗口,否则在确认之前可能有来自一端的更多数据包)

ACK标志,确认号和确认过程相关但不相同。

根据RFC793

RFC793

确认编号:32位

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.

重置处理

在除SYN-SENT之外的所有状态下,所有复位(RST)段均通过检查其SEQ字段进行验证。如果重置的序列号在窗口中,则该重置有效。在SYN-SENT状态(响应初始SYN接收到RST)的情况下,如果ACK字段确认SYN,则RST是可接受的。

RST的接收者首先对其进行验证,然后更改状态。如果接收者处于LISTEN状态,它将忽略它。如果接收器处于SYN-RECEIVED状态并且以前处于LISTEN状态,则接收器返回LISTEN状态,否则接收器中止连接并进入CLOSED状态。如果接收器处于任何其他状态,它将中止连接并建议用户并进入“关闭”状态。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.