概述
在TCP协议中,RST标识复位,用来异常的关闭链接。在TCP的设计中它是不可或缺的,发送RST包关闭链接时,不必等缓冲区的数据都发送出去。直接丢弃缓冲区中的数据,发送RST包。而接受段收到RST包后,也不必发送ACK包来确认。
产生RST包的一些原因
1. 请求的目标端口未打开,服务端发送RST包。
2. 请求超时。
3. Socket内核接收缓冲区Recv-Q中的数据未完全被应用程序读取,而关闭该Socket。
此时应用程序关闭socket链接对象。
产生RST段
4. 向已关闭的Socket中发送数据。(send与close调用)
tcp一端调用close关闭。
socket另一端调用send向已关闭的socket发送数据
tcp一端调用close关闭,当前socket处于FIN_WAIT2定时器周期。
tcp另一端在FIN_WAIT2定时器超时之前调用close方法,正常返回ACK确认包。
tcp一端调用close关闭,当前socket处于FIN_WAIT2定时器周期。
FIN_WAIT2超时
tcp另一端在FIN_WAIT2超时后调用close
如果调用close()方法,关闭的Socket代表的链接依然处于FIN_WAIT2状态,则正常返回ACK确认包。如果状态FIN_WAIT2的超时,则close()调用后【向FIN_WAIT2超时状态的连接发送FIN】,依然会返回RST包。