介绍TCP三次握手、传输数据、四次挥手标志为确认号变化规律

TCP协议的三次握手是一个关键过程,用于在客户端和服务器之间建立可靠的连接。以下是三次握手的详细过程,包括标志位、序列号以及ACK的变化规律:

第一次握手

  • 客户端
    • 标志位:SYN=1(表示请求建立连接)
    • 序列号:随机生成一个初始序列号seq=x
    • 发送数据包给服务器,并进入SYN_SENT状态,等待服务器确认

第二次握手

  • 服务器
    • 收到客户端的数据包后,从标志位SYN=1知道客户端请求建立连接
    • 标志位:SYN=1(表示同意建立连接),ACK=1(表示确认客户端的序列号)
    • 确认号:ack=x+1(表示期望收到的下一个字节的序列号)
    • 随机生成一个自己的初始序列号seq=y
    • 发送数据包给客户端,并进入SYN_RCVD状态

第三次握手

  • 客户端
    • 收到服务器的数据包后,检查ACK是否为1以及ack是否为x+1,以确保服务器已确认自己的序列号
    • 标志位:ACK=1(表示确认服务器的序列号)
    • 确认号:ack=y+1(表示期望收到的下一个字节的序列号)
    • 发送数据包给服务器
  • 服务器
    • 收到客户端的数据包后,检查ACK是否为1以及ack是否为y+1,以确保连接建立成功
    • 客户端和服务器均进入ESTABLISHED状态,完成三次握手

随后,客户端和服务器之间可以开始传输数据。在整个过程中,序列号和确认号的变化规律确保了数据的顺序性和可靠性。每次发送数据包时,发送方都会将当前序列号加1,并在接收方确认后,接收方会发送一个带有下一个期望序列号的确认包。这种机制确保了数据的正确传输和接收。

二、传输3包数据

假设客户端向服务器发送3个数据包,序列号分别为seq=x+2, seq=x+3, seq=x+4。

服务器接收到每个数据包后,会回复一个ACK包进行确认。

三、四次挥手

当数据传输完成后,任何一方都可以发起四次挥手来关闭连接。

第一次挥手(假设由客户端发起):

  • 客户端
    • 发送一个FIN包,标志位FIN=1,序列号seq=x+n(n为之前发送的数据包数量+1)

第二次挥手

  • 服务器
    • 收到FIN包后,发送ACK包确认,标志位ACK=1,确认号ack=x+n+1

第三次挥手(服务器关闭连接):

  • 服务器
    • 发送一个FIN包,标志位FIN=1,序列号seq=y+m(m为服务器之前发送的数据包数量+1)

第四次挥手

  • 客户端
    • 收到FIN包后,发送ACK包确认,标志位ACK=1,确认号ack=y+m+1

至此,四次挥手完成,TCP连接关闭。

在整个过程中,序列号和确认号的变化始终保持着连续性,确保了数据的正确顺序和可靠性。每个数据包都有一个唯一的序列号,接收方在发送确认包时,会指定下一个期望接收的序列号。这种机制保证了数据的完整性和顺序性,使得TCP成为一个可靠的传输协议。

相关推荐

  1. TCP 传输握手挥手策略

    2024-04-24 17:00:03       57 阅读
  2. TCP 传输握手挥手策略

    2024-04-24 17:00:03       58 阅读
  3. TCP传输握手挥手策略

    2024-04-24 17:00:03       28 阅读
  4. TCP握手挥手

    2024-04-24 17:00:03       39 阅读
  5. tcp握手挥手

    2024-04-24 17:00:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 17:00:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 17:00:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 17:00:03       87 阅读
  4. Python语言-面向对象

    2024-04-24 17:00:03       96 阅读

热门阅读

  1. 本地使用docker-compse搭建nacos集群

    2024-04-24 17:00:03       33 阅读
  2. OneFlow概念清单、以及优缺点

    2024-04-24 17:00:03       38 阅读
  3. JUC与多线程基础详解

    2024-04-24 17:00:03       33 阅读
  4. spring boot 定义启动页 到 login

    2024-04-24 17:00:03       33 阅读
  5. Python技术:从入门到精通的指南

    2024-04-24 17:00:03       26 阅读
  6. 【QEMU系统分析之启动篇(十五)】

    2024-04-24 17:00:03       28 阅读
  7. 39、Lua 中调用C函数(lua-5.2.3)

    2024-04-24 17:00:03       33 阅读
  8. 基于Hadoop的石油大数据平台设计

    2024-04-24 17:00:03       32 阅读
  9. css中backface-visibility使用

    2024-04-24 17:00:03       37 阅读