在某些特殊情况下,TCP连接的一端会向另一端发送复位报文段,以通知对方关闭或重新建立连接。
一般来说,有以下三种情况:
1. 访问不存在的端口。若端口不存,则直接返回RST,同时RST报文接收通告窗口大小为0.
其实客户端向服务器的某个端口发起连接,如果端口被处于TIME_WAIT 状态的连接占用时,客户端也会收到RST
2. 异常终止连接。 一方直接发送RST报文,表示异常终止连接。一旦发送方发送复位报文段,发送端所有排队等待发送的数据都被丢弃。应用程序可以通过socket选项 SO_LINGER来发送RST复位报文。
3.处理半打开连接。 一方关闭了连接,另一方却没有收到结束报文(如网络故障),此时另一方还维持着原来的连接。而一方即使重启,也没有该连接的任何信息。这种状态 就叫做半打开连接。而此时另一方往处于半打开状态的连接写数据,则对方回应RST复位报文。