• 网络连接中的三次握手和四次挥手


    作者:逍遥Sean
    简介:一个主修Java的Web网站\游戏服务器后端开发者
    主页:https://blog.csdn.net/Ureliable
    觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言!

    一、网络基础回顾

    计算机网络结构是一个复杂的层次结构,一般可以分为七层,被称为网络协议分层结构。这个结构被用来划分网络连接的不同协议以及它们之间的相互作用。以下是这七层的详细介绍:

    1. 物理层:负责传输数据的物理介质,如电缆和无线信号。
    2. 数据链路层:负责将数据转换成数据帧,并在物理层上进行传输。数据链路层的主要任务是差错控制和流量控制。
    3. 网络层:负责选择数据包的传输路线,并将其传输到目标设备。网络层还负责 IP 地址的分配和路由选择。
    4. 传输层:负责数据传输的端到端通信,比如 TCP 协议和 UDP 协议。
    5. 会话层:负责建立、维护和结束数据传输会话。
    6. 表示层:负责数据格式的转换,确保数据可以被接收方正确地解释。
    7. 应用层:向用户提供应用程序,负责数据处理和传输。
      这些层次结构中的每一层都有其独特的任务和功能。为了使不同的网络设备能够相互通信,必须确保它们“说”同一种语言和遵循相同的协议。这就是网络协议分层结构的目的。

    二、TCP通讯的连接和断开为什么复杂?

    TCP(Transmission Control Protocol)通讯是一种面向连接的、可靠的网络传输协议。它位于 OSI 模型的传输层,负责提供数据传输服务。TCP协议通过三次握手建立连接,确保数据的可靠性和有序性,同时也提供拥塞控制和流量控制机制。它适用于需要保证数据传输的可靠性和有序性的应用,例如文件传输、电子邮件、网页浏览等。
    TCP通信是一种可靠的面向连接的通信方式,连接建立和断开是非常重要的过程。下面是TCP通信的连接和断开过程:

    复杂的连接与释放过程是为了保证连接的可靠性

    1. 连接建立:
      当客户端需要和服务器建立TCP连接时,它会向服务器发送一个SYN包(同步包),这是一个带有SYN标志位的TCP数据包。服务器在收到SYN包后,会向客户端发送一个带有SYN和ACK标志位的数据包,表示确认收到客户端的请求并同意建立连接。最后,客户端向服务器发送一个带有ACK标志位的数据包,表示收到了服务器的确认信息,连接建立成功。

    2. 数据传输:
      在连接建立后,客户端和服务器之间可以进行数据传输。数据以TCP数据包的形式通过互联网传输。

    3. 连接断开:
      TCP连接断开有两种方式:主动关闭和被动关闭。
      主动关闭:当客户端或服务器需要断开连接时,它会向对方发送一个带有FIN标志位的TCP包,表示要关闭连接。对方在收到FIN包后,会回复一个ACK确认信息。最后,对方也会发送一个FIN包,表示连接已经关闭。
      被动关闭:当一方突然断开连接,另一方也会收到一个FIN包,表示连接已经关闭。对方在收到FIN包后,会发送一个ACK包,然后连接关闭。

    三、三次握手和四次挥手

    三次握手和四次挥手都是TCP协议通信过程中建立和关闭连接的步骤。

    三次握手的步骤如下:

    1. 客户端发送SYN包,进入SYN-SENT状态。
    2. 服务器接收到SYN包,回复一个ACK包和一个SYN包,进入SYN-RECEIVED状态。
    3. 客户端收到ACK包和SYN包,回复一个ACK包,建立连接并进入ESTABLISHED状态。

    四次挥手的步骤如下:

    1. 客户端主动关闭连接,发送FIN包,进入FIN-WAIT-1状态。
    2. 服务器接收到FIN包,回复一个ACK包,进入CLOSE-WAIT状态。
    3. 服务器向客户端发送FIN包,进入LAST-ACK状态。
    4. 客户端接收到FIN包,回复一个ACK包,进入TIME-WAIT状态,等待2MSL(最长报文段寿命)后关闭。

    下面是三次握手和四次挥手的示意图:

    三次握手:

    客户端                            服务器
    
    SYN_SENT状态                      LISTEN状态
    
    ---------------SYN------------>
    
                                      SYN_RECEIVED
    
    <---------ACK包和SYN------------
    
    ESTABLISHED                       
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    四次挥手:

    客户端                            服务器
    
    ESTABLISHED状态                  
    
    <---------------FIN------------
    
    FIN_WAIT_1                        
    
                                      CLOSE_WAIT
    
    <---------------ACK------------
    
    FIN_WAIT_2                        
    
                                      LAST_ACK
    
                                      <-------FIN--------
    
    TIME_WAIT                        
    
                                      <-------ACK--------
    
    CLOSED                            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    操作系统:文件管理(二)文件系统
    力扣:1175. 质数排列
    LeetCode50天刷题计划(Day 9—— 整数转罗马数字(20.40-22.10)
    ROW_NUMBER ( )去重并根据条件保留数据--开窗函数使用
    restful请求风格的增删改查-----查询and添加
    今日伦敦金行情分析方法分享
    电脑显示器符合BS 476-7 英国Class 2阻燃测试
    【C++数据结构】性能测量
    含文档+PPT+源码等]精品微信小程序校园第二课堂+后台管理系统|前后分离VUE[包运行成功]微信小程序毕业设计项目源码计算机毕设
    c 语言基础:L1-045 宇宙无敌大招呼
  • 原文地址:https://blog.csdn.net/Ureliable/article/details/133187573