RST:(Reset the connection)用于复位因某种原因引起出现的错误连接,也用来拒绝非法数据和请求。如果接收到RST位时候,通常发生了某些错误;
发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓冲区中的包,发送RST;接收端收到RST包后,也不必发送ACK包来确认。
何时发送RST
1:如果连接是CLOSE状态,所有收到的包都响应RST,仍然保持CLOSED状态
如果收到的是ACK报文,RST取ACK报文的ACK序列号为RST报文的SEQ;如果报文不是ACK报文,RST的SEQ为0且ACK字段为收到的报文SEQ+报文长度;
2:如果连接在non-synchronized状态(LISTEN/SYN-SENT/SYN-RECEIVED),收到的报文ACK的无效的序列号(发送的SYN没有被确认),需要返回RST报文;连接保持原有状态;
如果是ACK报文,RST取ACK报文的ACK序列号为RST报文的SEQ;如果报文不是ACK报文,RST的SEQ为0且ACK字段为收到的报文SEQ+报文长度;
3:如果连接在synchronized状态(ESTABLISHED,FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT),如果收到不可接受的报文(序列号不在接收窗口内或者ack的字段不正确)&