tcp rst flag产生的原因


概述

在TCP协议中,RST标识复位,用来异常的关闭链接。在TCP的设计中它是不可或缺的,发送RST包关闭链接时,不必等缓冲区的数据都发送出去。直接丢弃缓冲区中的数据,发送RST包。而接受段收到RST包后,也不必发送ACK包来确认。

产生RST包的一些原因

1. 请求的目标端口未打开,服务端发送RST包。

连接未监听端口

2. 请求超时。

3. Socket内核接收缓冲区Recv-Q中的数据未完全被应用程序读取,而关闭该Socket。

socket recv-q存在数据

此时应用程序关闭socket链接对象。
关闭socket

产生RST段

4. 向已关闭的Socket中发送数据。(send与close调用)

socket一端close

tcp一端调用close关闭。
socket另一端调用send向已关闭的socket发生数据

socket另一端调用send向已关闭的socket发送数据
socket一端调用close关闭

tcp一端调用close关闭,当前socket处于FIN_WAIT2定时器周期。
在已关闭socket的FIN_WAIT2定时器周期内调用close

tcp另一端在FIN_WAIT2定时器超时之前调用close方法,正常返回ACK确认包。
tcp一段close

tcp一端调用close关闭,当前socket处于FIN_WAIT2定时器周期。
FIN_WAIT2超时

FIN_WAIT2超时
tcp另一端在超时后调用close

tcp另一端在FIN_WAIT2超时后调用close
如果调用close()方法,关闭的Socket代表的链接依然处于FIN_WAIT2状态,则正常返回ACK确认包。如果状态FIN_WAIT2的超时,则close()调用后【向FIN_WAIT2超时状态的连接发送FIN】,依然会返回RST包。

你可能感兴趣的:(tcp rst flag产生的原因)