美文网首页
tcp rst flag产生的原因

tcp rst flag产生的原因

作者: 总舵主 | 来源:发表于2015-11-11 09:40 被阅读0次

概述

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

产生RST包的一些原因

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

连接未监听端口连接未监听端口

2. 请求超时。

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

socket recv-q存在数据socket recv-q存在数据
此时应用程序关闭socket链接对象。
关闭socket关闭socket
产生RST段

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

socket一端closesocket一端close
tcp一端调用close关闭。
socket另一端调用send向已关闭的socket发生数据socket另一端调用send向已关闭的socket发生数据
socket另一端调用send向已关闭的socket发送数据
socket一端调用close关闭socket一端调用close关闭
tcp一端调用close关闭,当前socket处于FIN_WAIT2定时器周期。
在已关闭socket的FIN_WAIT2定时器周期内调用close在已关闭socket的FIN_WAIT2定时器周期内调用close
tcp另一端在FIN_WAIT2定时器超时之前调用close方法,正常返回ACK确认包。
tcp一段closetcp一段close
tcp一端调用close关闭,当前socket处于FIN_WAIT2定时器周期。
FIN_WAIT2超时FIN_WAIT2超时
FIN_WAIT2超时
tcp另一端在超时后调用closetcp另一端在超时后调用close
tcp另一端在FIN_WAIT2超时后调用close
如果调用close()方法,关闭的Socket代表的链接依然处于FIN_WAIT2状态,则正常返回ACK确认包。如果状态FIN_WAIT2的超时,则close()调用后【向FIN_WAIT2超时状态的连接发送FIN】,依然会返回RST包。

相关文章

网友评论

      本文标题:tcp rst flag产生的原因

      本文链接:https://www.haomeiwen.com/subject/ejehhttx.html