一道高频面试题:TCP 协议为什么握手是 3 次,挥手却是 4 次?

TCP(传输控制协议)连接的建立和断开采用三次握手(Three-Way Handshake)和四次挥手(Four-Way Handshake)的机制,主要是为了防止旧的重复连接初始化造成混乱。

三次握手过程如下:

1. 客户端发送一个SYN报文到服务器端,请求建立连接。这时客户端处于SYN_SENT状态。
2. 服务器端回应一个SYN-ACK报文给客户端,确认收到请求。这时服务器处于SYN_RCVD状态。
3. 客户端再发送一个ACK报文给服务器端,表示客户端已准备就绪。此时客户端和服务器的连接建立成功,进入ESTABLISHED状态。

之所以采用三次握手,原因如下:

- 可靠性:通过三次握手过程,客户端和服务器之间能够确保彼此收到了对方的报文。如果只进行两次握手,那么服务器将无法确认客户端是否收到了自己的确认信息,因此无法确保连接的成功建立。

- 防止重复连接:三次握手能够避免过期的连接请求报文突然到达服务器,导致错误地建立两次连接。例如,客户端因某种原因未收到服务器端的SYN-ACK报文,于是重新发送了SYN报文。若采用二次握手,这个过期的SYN报文会直接建立连接,导致多个重复连接,浪费资源。而在三次握手中,服务器收到重复的SYN报文后需要等待客户端发送ACK报文,而客户端不会发送ACK报文,因此过期的SYN报文不会建立连接。

四次挥手过程如下:

1. 某个端点(通常是客户端)完成数据传输任务后,发送一个FIN报文,表示希望终止连接。此时该端点进入FIN_WAIT_1状态。
2. 另一个端点(通常是服务器)收到FIN报文后,发送一个ACK报文给对方,表示已经收到并理解了对方的关闭请求。此时发送FIN报文的端点进入FIN_WAIT_2状态。
3. 之后,当另一个端点(服务器)也完成它的数据传输任务后,发送一个FIN报文表示同样希望关闭连接。此时该端点进入LAST_ACK状态。
4. 发送FIN报文的端点(客户端)收到最后的FIN报文后,再发送一个ACK报文给另一个端点(服务器),表示已经收到并理解了对方的关闭请求。此时发送FIN报文的端点进入TIME_WAIT状态,经过一段时间后自动进入CLOSED状态,表示连接关闭。另一个端点收到ACK报文后也进入CLOSED状态,连接关闭。

之所以采用四次挥手,原因有:

- 全双工:TCP连接是全双工的,即双方可以同时进行数据传输。因此,需要分别终止每个方向上的数据传输。
- 优雅地关闭连接:通过四次挥手过程,双方都能确保在对方不再发送数据后,才真正关闭连接。这有助于避免数据丢失或损坏。

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
《Java面试八股文:高频面试题与求职攻略一本通》是一本旨在帮助Java求职者提升面试竞争力的参考书籍。本书以高频面试题为主要内容,以求职攻略为辅助,全面涵盖了Java面试的各个方面。 首先,本书对Java基础知识进行了系统梳理。涵盖了Java的核心概念、面向对象思想、多线程、集合框架等关键知识点。通过对这些基础知识的深入解析和举例,读者能够更好地理解并掌握Java语言的精髓。 其,本书还深入剖析了Java虚拟机(JVM)和垃圾回收机制。对于面试中经常涉及的内存模型、垃圾回收算法等内容进行了详细解读,帮助读者从深层了解Java程序的执行和性能优化。 此外,本书还介绍了Java的常用框架和工具,如Spring、Hibernate、MyBatis等,以及一些Java开发常用的设计模式。为读者提供了在面试中展示自己综合能力的机会,同时也使得读者在实际项目开发中能够更加得心应手。 最后,本书独有的求职攻略部分为读者提供了一系列求职技巧和面试策略。包括简历编写、面试前的准备、面试中的表现技巧等方面的内容,帮助读者提高自己的求职竞争力。 综上所述,《Java面试八股文:高频面试题与求职攻略一本通》是一本综合性的面试备考书籍。通过学习本书,读者能够全面掌握Java面试的要点和技巧,提升自己在竞争激烈的求职市场中的竞争力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇见小美好

每一笔打赏都见证了你的努力💪

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值