1. RST标志位
RST标志位位于TCP报文首部, 其置位时, 表示连线复位,首先断开连接,然后重建.
RST置位的分节(TCP数据包), 常称为RST分节. RST不同于close (FIN分节), close用于关闭正常连接, 而RST用于复位异常连接.
参考
TCP报文格式 | CSDN
TCP报文格式详解 | CSDN
2. 产生条件
UNP 4.3提到, RST是TCP发生错误时, 发送的一种TCP分节, 产生RST的三个条件是:
- 目的地为某端口的SYN达到, 而该端口上没有正在监听的服务器;
- TCP想取消一个已有连接;
- TCP接收到一个根本不存在的连接上的分节;
3. 产生场景
例如,
- 客户端发起connect请求时, 服务器在指定端口上没有进程在等待与之连接(没有accept阻塞等待), 或者服务器进程根本没有启动, 服务器就会回送RST分节, 此时客户端会报"connection refuse"错误;
- 服务器端通过设置TCP选项SO_LINGER, 取消一个长时间空闲连接, 可以发送RST分节;
- 当close A -> B的连接时, A发送FIN分节给B, B回ACK分节由于网络原因未能及时发送给A, 后来A重启进程后, 又重新收到B回的ACK, 然而此时A的化身已经无法识别之前的连接, 就会回送RST分节;