TCP 面试题 — 三次握手中每一次没收到报文会发生什么情况?
🚀 大家好,我是小康。
今天给大家分享一个 TCP 面试题 :三次握手中每一次没收到报文会发生什么情况?
小技巧:在面试中,可以参考下面的示例回答,这样回答简洁明了。详细介绍部分则是为了帮助大家系统学习,以便应对面试官深入提问。
示例回答:
如果三次握手中的任何一个报文没有被收到,TCP 将触发超时重传机制。具体来说,如果客户端没收到 SYN-ACK 或 ACK 包,或服务器没收到 SYN 包 或 ACK 包,它们都会重传未确认的报文,直到确认连接建立或放弃。
详细解释
三次握手中每一次没收到报文会发生什么情况?
先来看下 TCP 三次握手的过程:
第一次握手:客户端发送 SYN 包
- 情况:服务器没收到 SYN 包
- 解释:如果服务器没收到客户端的 SYN 包,客户端会等待一段时间后重传 SYN 包。客户端会继续重传 SYN 包直到收到服务器的 SYN-ACK 包或达到重传次数上限。
- 类比:你向朋友挥手示意,但朋友没看到,你会再次挥手,直到朋友回应或你放弃。
- 示例:客户端发送 SYN 包,等待一段时间没收到回应,再次发送 SYN 包。
第二次握手:服务器发送 SYN-ACK 包
- 情况:客户端没收到 SYN-ACK 包
- 解释:如果客户端没收到服务器的 SYN-ACK 包,客户端会认为 SYN 包丢失,再次发送 SYN 包。服务器收到重复的 SYN 包后,会重传 SYN-ACK 包,直到客户端收到为止。
- 类比:朋友向你挥手回应,但你没看到,朋友会继续挥手,直到你看到并回应。
- 示例:服务器发送 SYN-ACK 包,客户端没收到,再次发送 SYN 包,服务器重传 SYN-ACK 包。
第三次握手:客户端发送 ACK 包
- 情况:服务器没收到 ACK 包
- 解释:如果服务器没收到客户端的 ACK 包,服务器会重传 SYN-ACK 包,客户端收到重复的 SYN-ACK 包后,会重传 ACK 包。这个过程会重复,直到服务器收到 ACK 包或达到重传次数上限。
- 类比:你向朋友点头确认,但朋友没看到,他会继续挥手示意,直到你再次点头确认。
- 示例:客户端发送 ACK 包,服务器没收到,服务器重传 SYN-ACK 包,客户端重传 ACK 包。
关键点总结
- 第一次握手(客户端发送 SYN 包):如果服务器没收到,客户端重传 SYN 包。
- 第二次握手(服务器发送 SYN-ACK 包):如果客户端没收到,客户端重传 SYN 包,服务器重传 SYN-ACK 包。
- 第三次握手(客户端发送 ACK 包):如果服务器没收到,服务器重传 SYN-ACK 包,客户端重传 ACK 包。
最后:
欢迎大家关注我的微信公众号「跟着小康学编程」!本号致力于分享C/C++/Go/Java 语言学习、计算机基础原理、Linux 编程、数据库、微服务、容器技术 等内容。文章力求通俗易懂,并配有代码示例,方便初学者理解。如果您对这些内容感兴趣,欢迎关注我的公众号「跟着小康学编程」。
后续,我还会陆续分享各个方向的编程面试题,包括C/C++、Java、Go,以及操作系统、计算机网络、数据结构、数据库和微服务等领域,为大家的面试提供帮助。
此外,小康最近创建了一个技术交流群,专门用来讨论技术问题和解答读者的疑问。在阅读文章时,如果有不理解的知识点,欢迎大家加入交流群提问。我会尽力为大家解答。期待与大家共同进步!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 跟着小康学编程!
请作者喝咖啡
评论