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