TCP协议RST包介绍、出现场景

RST介绍

RST: TCP协议中重置、复位连接的标志位,用来关闭异常连接。

发送RST包关闭连接时,不等缓冲区的包发送完成,会丢弃缓冲区中的包,直接发送RST。 同样接收端收到RST包后,也不必发送ACK确认包。

使用场景

  1. 当服务器收到没有监听端口的连接请求时会返回RST包
  2. 异常终止一个连接
  3. 检测半打开连接

几种不会发送RST包情况

  1. 使用shutdown、close关闭套接字,发送的是FIN,不是RST。
  2. 套接字关闭前,使用sleep。对运行的程序Ctrl+C,会发送FIN,不是RST。
  3. 套接字关闭前,执行return、exit(0)、exit(1),会发送FIN、不是RST。

网络编程中常见错误:

  1. broken pipe: 在对已经关闭的通道write时出现
  2. connection reset by peer: 出现不可恢复错误,比如直接kill服务, write/read都可能出现

参考