一、建立连接阶段
1.访问非listen状态的服务器接口
A向B发出连接,而B相应的端口并未监听,这时B会发送一个RST包给A。
ps:如果服务器的BACKLOG已满,客户端的SYN包只是被简单丢弃,客户端表现为连接超时,服务器并不会发RST包。
2.客户端的SYN包在网络传输过程中丢失
A超时重发SYN包。
3.服务器未开启(指电源)
A超时重发SYN包。
(2和3中的超时之后会重发,但是超时定时器的时间也会一次比一次长,总共等待75s未收到响应包就返回错误)
(截图自https://www.cnblogs.com/wanpengcoder/p/5356776.html)
二、连接已建立阶段
1.A断电了,而B不知情
TCP设有一个保活计时器,应用层还有一个心跳机制。每收到一次客户的数据会重启计时器,而当计时器时间到了,就会发生探测报文,以后每隔75s发送一次,若连续十次没有响应,则B认为A出现故障了,接着关闭连接。
2.A断电之后重启了,B并不知情,并且向A发送了一个报文
A重启之后,之前所有的连接已丢失。此时收到一个B发来的报文,一脸懵逼,会回复一个RST包。