当前位置: 首页 > news >正文

深入浅出理解TCP三次握手与四次挥手

目录

  • 引言
  • 1.为什么需要三次握手?
  • 2. 三次握手的过程
  • 3. 为什么需要四次挥手?
  • 4. 四次挥手的过程
  • 5. 为什么挥手需要四次,而握手只需三次?
  • 6. 三次握手与四次挥手的时序图
  • 7. TIME_WAIT状态的意义
  • 8. 总结
  • 9.面试时候问到什么是三次握手和四次挥手


引言

在计算机网络中,TCP(Transmission Control Protocol,传输控制协议) 是一种可靠的面向连接的协议,广泛应用于Internet的通信中。理解TCP中的三次握手和四次挥手机制,是掌握网络通信基础的重要环节。本文将深入浅出地介绍三次握手与四次挥手的工作原理。


1.为什么需要三次握手?

在通信开始时,TCP需要在客户端和服务器之间建立可靠的连接,确保双方准备好接收和发送数据。为此,TCP使用了三次握手的过程。这个握手的目的包括以下几点:

  • 确保双方都收到了对方的消息,建立可靠的连接。
  • 允许双方协商初始化序列号(Initial Sequence Number, ISN),以确保数据传输中的每一字节都有序。

2. 三次握手的过程

三次握手的具体过程如下:

  1. 第一次握手(SYN)
    客户端发送一个SYN(Synchronize Sequence Numbers)报文给服务器,请求建立连接。这个报文包含了客户端的初始序列号ISN(c),表示客户端希望开始通信。

    • 客户端状态:SYN_SENT
  2. 第二次握手(SYN-ACK)
    服务器接收到客户端的SYN报文后,响应一个SYN-ACK报文。这个报文既包含服务器的初始序列号ISN(s),也确认了客户端的ISN(c)

    • 服务器状态:SYN_RCVD
  3. 第三次握手(ACK)
    客户端收到SYN-ACK报文后,发送一个ACK报文确认服务器的序列号ISN(s),至此三次握手完成,双方进入连接建立状态。

    • 客户端状态:ESTABLISHED
    • 服务器状态:ESTABLISHED

此时,连接已建立,双方可以开始传输数据。

3. 为什么需要四次挥手?

TCP不仅通过三次握手建立连接,还通过四次挥手来终止连接。由于TCP连接是全双工的(即双方可以同时发送和接收数据),因此关闭连接时需要双方分别关闭各自的数据传输通道。

4. 四次挥手的过程

  1. 第一次挥手(FIN)
    客户端发送一个FIN(Finish)报文,表示它完成了数据传输,并希望关闭到服务器方向的连接。

    • 客户端状态:FIN_WAIT_1
  2. 第二次挥手(ACK)
    服务器接收到客户端的FIN报文后,回复一个ACK报文,表示已收到关闭请求,但仍可能有未完成的数据需要发送。

    • 服务器状态:CLOSE_WAIT
    • 客户端状态:FIN_WAIT_2
  3. 第三次挥手(FIN)
    服务器发送完所有数据后,发送一个FIN报文,表示可以关闭连接。

    • 服务器状态:LAST_ACK
  4. 第四次挥手(ACK)
    客户端收到服务器的FIN报文后,回复一个ACK报文,确认连接终止。此时,客户端进入TIME_WAIT状态,确保服务器收到了ACK,并等待一段时间后完全关闭连接。

    • 客户端状态:TIME_WAIT
    • 服务器状态:CLOSED

5. 为什么挥手需要四次,而握手只需三次?

挥手需要四次的原因在于TCP连接的全双工性质。握手时,双方同步建立连接,发送方向和接收方向是对等的。而在挥手过程中,双方的关闭操作是独立的,一个方向关闭并不意味着另一个方向也可以立即关闭,因此需要额外的报文确认。

6. 三次握手与四次挥手的时序图

下面是一个简化的时序图,帮助大家理解三次握手和四次挥手的交互过程:

三次握手:
客户端      服务器|            || SYN        || ---------->||            ||    SYN-ACK ||<---------- ||            ||    ACK     || ---------->|| 连接建立    |四次挥手:
客户端      服务器|            ||    FIN     || ---------->||            ||    ACK     ||<---------- ||            ||    FIN     ||<---------- ||            ||    ACK     || ---------->|| 连接关闭    |

7. TIME_WAIT状态的意义

TIME_WAIT是TCP连接关闭过程中最后的一个重要状态。客户端在发送最后的ACK后进入TIME_WAIT,保持一段时间(一般为2倍的最大报文生存时间,即2MSL),确保服务器收到了ACK。如果在此期间服务器没有重发FIN报文,客户端才会真正关闭连接。

TIME_WAIT的主要作用有两点:

  1. 防止丢失的报文干扰后续连接。TIME_WAIT确保旧连接的报文不会影响新连接。
  2. 确保ACK可靠传输。客户端可能需要重新发送ACK确认服务器的FIN报文,因此需要保持连接一段时间。

8. 总结

通过三次握手,TCP确保双方能够可靠地建立连接,开始数据传输;通过四次挥手,TCP安全地终止连接,避免数据丢失和混乱。理解三次握手和四次挥手机制不仅有助于我们深入掌握TCP协议,还能帮助我们在网络调试与优化中,正确分析和解决连接问题。

这个过程虽然看似简单,但其背后蕴含了许多设计上的精妙之处,比如对序列号的管理、对状态的控制以及对数据传输可靠性的保证。

希望这篇文章能帮助你更好地理解TCP中的三次握手与四次挥手!

9.面试时候问到什么是三次握手和四次挥手

在面试中,如果被问到TCP的三次握手和四次挥手,可以简洁明了地回答:

三次握手是为了建立可靠的连接,客户端和服务器通过SYN和ACK报文进行序列号的同步,确保双方都能够正确接收和发送数据。握手的三次分别是:客户端发送SYN,服务器响应SYN-ACK,客户端再确认ACK,连接建立。
四次挥手是用于断开连接,由于TCP是全双工通信,双方的数据通道需要分别关闭,因此客户端和服务器会各自发送FIN和ACK报文,确保连接的双向关闭。挥手的四次则是客户端和服务器分别发送和确认FIN报文,最终安全断开连接。

这种介绍简要概括了流程和目的,展示了你对TCP连接机制的理解。

http://www.lryc.cn/news/457340.html

相关文章:

  • 如何在Windows和Linux查看正在监听的端口和绑定的进程
  • 如何用深度神经网络预测潜在消费者
  • 基于opencv答题卡识别判卷
  • ShardingSphere分库分表产品介绍
  • Java经典面试题-多线程打印
  • FireFox简单设置设置
  • Sollong手机——一站式Web3生态解决方案
  • 《重生到现代之从零开始的数据结构生活》—— 顺序表1
  • 2本书让你轻松入门大模型!《大模型入门:技术原理与实战应用》+《自然语言处理:大模型理论与实践》
  • 【JDK17 | 1】Java 17 深入剖析:新特性与变革
  • strtok
  • 零信任身份安全的基本原则
  • 【AAOS】Android Automotive 9模拟器源码下载及编译
  • 手动降级wsl中的numpy
  • 极客兔兔Gee-Cache Day7
  • R包:APAlyzer从RNA-seq数据计算APA表达丰度
  • YOLOv11改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性
  • dayu_widgets-简介
  • 改变数组页面重新渲染的操作/那些操作不会重新渲染页面以及解决方法
  • 米哈游Android面试题汇总及参考答案
  • 搜维尔科技:【应用】Xsens动作捕捉技术为奇幻电影注入活力
  • useradd命令:添加Linux新用户
  • Python+ffmpeg实现字幕视频合并
  • 垂直分库分表、水平分库分表
  • rocksdb merge的简单记录
  • 安卓开发板_MTK联发科评估套件_安卓开发板Demo板
  • maven指定模块快速打包idea插件Quick Maven Package
  • i春秋云境靶场之CVE-2022-26965
  • 流域生态系统服务评价、水文水生态分析、碳收支、气候变化影响、制图等领域中的应用
  • 超像素提取加svm训练,鼠标点击选择标签(左键为正样本,右键为负样本)