无序数据包后的 RST
RST 是为了响应在不再存在的连接上接收到的东西。连接被FIN关闭,并被确认,所以连接不再存在,然后在关闭的连接上收到了一些东西,所以发送了一个RST。这实际上包含在RFC 793,传输控制协议中:
重置生成
作为一般规则,每当一个显然不是用于当前连接的段到达时,必须发送重置 (RST)。如果不清楚是这种情况,则不得发送复位。
状态分为三组:
如果连接不存在(CLOSED),则发送复位以响应除另一个复位之外的任何传入段。特别是,寻址到不存在的连接的 SYN 会通过这种方式被拒绝。
如果传入的段有一个 ACK 字段,则重置从段的 ACK 字段中获取其序列号,否则重置的序列号为零,并且 ACK 字段设置为传入段的序列号和段长度之和. 连接保持在 CLOSED 状态。
如果连接处于任何非同步状态(LISTEN、SYN-SENT、SYN-RECEIVED),并且传入段确认尚未发送的内容(段携带不可接受的 ACK),或者传入段具有安全级别或如果隔间与连接请求的级别和隔间不完全匹配,则会发送重置。
如果我们的 SYN 未被确认并且传入段的优先级高于请求的优先级,则提高本地优先级(如果用户和系统允许)或发送重置;或者如果传入段的优先级低于请求的优先级,则继续,就好像优先级完全匹配一样(如果远程 TCP 无法提高优先级以匹配我们的优先级,这将在它发送的下一个段中检测到,并且连接将被终止)。如果我们的 SYN 已被确认(可能在此传入段中),则传入段的优先级必须与本地优先级完全匹配,否则必须发送重置。
如果传入的段有一个 ACK 字段,则重置从段的 ACK 字段中获取其序列号,否则重置的序列号为零,并且 ACK 字段设置为传入段的序列号和段长度之和. 连接保持相同状态。
如果连接处于同步状态(ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、CLOSE-WAIT、CLOSING、LAST-ACK、TIME-WAIT),任何不可接受的段(超出窗口序列号或不可接受的确认) number) 必须只引出一个空的确认段,其中包含当前的发送序列号和一个指示预期接收的下一个序列号的确认,并且连接保持在相同的状态。
如果传入段的安全级别、隔离区或优先级与连接请求的级别、隔离区和优先级不完全匹配,则发送重置并且连接进入关闭状态。重置从传入段的 ACK 字段中获取其序列号。