网络通信中 TCP 产生 RST 的三个条件分析

RST 是 TCP 发生错误时发送的一种 TCP 分节( segment:传输层的 PDU ),可用来异常的关闭一个连接,此时客户端会返回一个 ECONNREFUSED 错误。
它会在以下三种情况下产生:

  • 目的地为某个端口的 SYN 到达服务器,但并没有服务器在该端口监听。
  • TCP 想取消一个已有连接,即异常地关闭连接。
  • TCP 接收到一个根本不存在的连接上的分节。

第一种情况可能有如下原因:
客户端连接的端口不正确或者端口未打开(即服务器未运行)。

第二种情况可以查看第二个参考链接

第三种情况的原因:
服务端在接收到客户端部分数据后,主动关闭了连接(此时服务端处于 TIME_WAIT 状态,可以接收数据),但是客户端仍然继续在发送剩余数据。此时服务端会给客户端发送 RST。

RST 有什么用途?
在 TCP 连接发生异常情况时可以通过发送 RST 包告知对方关闭连接,不必等缓冲区的包都发出去(不像上面的FIN包),直接就丢弃缓存区的包发送 RST 包。而接收端收到 RST 包后,也不必发送 ACK 包来确认

参考链接:

猜你喜欢

转载自blog.csdn.net/chuanglan/article/details/80713903
今日推荐