一、建立连接阶段
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包。
本文探讨了TCP连接在建立及已建立阶段可能遇到的问题,如服务器未监听、客户端SYN包丢失、服务器未开启等情况导致的连接失败,以及客户端断电后的连接恢复机制。深入解析了TCP的保活计时器和心跳机制如何确保连接的健壮性。
3033

被折叠的 条评论
为什么被折叠?



