关于老师提到的超时断开

来源:4-5 TCP链接建立与断开

慕前端7365659

2020-06-29

建立连接的时候,老师说如果服务器没有进入established状态,客户端发送的数据包,会超时断开,但不应该是服务器没收到,不能发送ACK包,客户端收不到ACK包,然后超时重传吗?为什么这里是超时断开?非常好奇,希望可以得到老师解答。

写回答

1回答

ccmouse

2020-06-29

这里的“重传”是指TCP协议里规定的重传机制。在链接建立时期,协议并没有规定超时后应该如何“重传”

情况1:客户端第一个SYN,如果没有等到ACK,连接建立就失败了。系统(比如操作系统的TCP协议栈)当然会重新尝试发送新的SYN,并带上新的序号。但这在TCP的角度来说是一个新的链接了。如果超越了重传次数(系统可以配置),才会报错。

情况2:服务器端若收到SYN,返回SYN+ACK,但是没有等到客户端对这个ACK的ACK,系统也会重传SYN+ACK。但是如果超越了重传的次数(系统可以配置),会把这个链接断开。后续客户端发来的包,服务器有可能会回RST(Reset),让客户从头开始重新建立链接。

情况3:再往后,客户端收到了服务器的SYN+ACK,发送ACK,客户端即认为链接建立完成。后续就是TCP重传机制所涉及的规则了。注意这里这三次握手最后的ACK也可能服务器没有收到,这样从服务器端看其实就是上面情况2。

0
0

Google面试官亲授-Java面试新手尊享课

为面试新手量身定制的Java面试尊享课,解锁“鲤鱼跃龙门”的妙招

2853 学习 · 180 问题

查看课程