【问题标题】:RST PSH ACK Bits all set in a single packetRST PSH ACK 位在单个数据包中全部设置
【发布时间】:2017-08-22 03:44:25
【问题描述】:

我正在跟踪数据包,我系统上的服务器收到一个 RST 标志,然后它回复一个数据包,如果 ACK、RST 和 PSH 位都已设置。这对我来说似乎不正常?我不确定为什么我会在 RST 场景中看到设置了 PSH 位?有谁知道为什么会这样?

【问题讨论】:

    标签: networking


    【解决方案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 Flag

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

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

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

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

    ACK标志、确认号和确认过程是相关的,但不是一回事。

    Per 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.
    Reset Processing
    

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

    RST 的接收者首先验证它,然后改变状态。如果接收器处于 LISTEN 状态,它会忽略它。如果接收器处于 SYN-RECEIVED 状态并且之前一直处于 LISTEN 状态,则接收器返回 LISTEN 状态,否则接收器中止连接并进入 CLOSED 状态。如果接收器处于任何其他状态,它会中止连接并通知用户并进入 CLOSED 状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-04
      • 2015-02-26
      • 2021-01-13
      • 2012-08-18
      • 2019-08-02
      • 2013-02-17
      • 2021-12-12
      • 1970-01-01
      相关资源
      最近更新 更多