开发者

TCP RST packet details

Why does a TCP RST packet not need an acknowledgement? Is it because the sender 开发者_Go百科of RST will continue to send RSTs every time it receives another packet from the other side?

On a related note, how can the acknowledgement number in a valid RST packet be 0?


On a related note, how can the acknowledgement number in a RST packet be 0?

Because the segment with the RST bit set is supposed to terminate the connection, nothing more. Acknowledgement number only makes sense when the connection is established and the ACK bit is set in the segement. The receiver of a RST segment should also consider the possibility that the application protocol client at the other end was abruptly terminated and did not have a chance to process the unacknowledged data that was sent to it.

See RFC 793, page 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.


TCP RST packet is the remote side telling you that the connection on which the previous TCP packet is sent is not recognized, maybe the connection has closed, maybe the port is not open, and something like these.

Here is my opinion, since the connection is not valid any more, there is no need to reply an ACK. And since the remote peer do not known the connection, it make sense that the ACK in a RST packet is 0.

Check out this: http://en.wikipedia.org/wiki/TCP_reset_attack


TCP RST means that connection is not valid. I.e. there is no associated session at remote side. This packet is usually sent when port you are trying to reach is closed, as I know.

TCP FIN - is what sent when connection is about to close and there you need an acknowledge.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜