介绍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成为一个可靠的传输协议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/2200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【行为型模型】迭代器模式

一、迭代器模式概述 迭代器模式定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。把游走的任务放在送代器上,而不是聚合上。这样简化了聚含的接口和实现,也让责任各得其所。(对象行为型) 迭代器模式的优缺点&…

数据结构之顺序表的实现(C语言版)

Hello, 大家好,我是一代,今天给大家带来有关顺序表的有关知识 所属专栏:数据结构 创作不易,望得到各位佬们的互三呦 一.前言 1.首先在讲顺序表之前我们先来了解什么是数据结构 数据结构是由“数据”和“结构”两词组合⽽来。 什…

关于使用docx-preview来实现预览word文件的功能(我用的若依框架)

最近公司让做一个关于内容预览的功能 1.刚开始怎么弄 一开始在网上搜集了大量资料,基本上都不符合关于我的要求,不过最后还是找到了,话不多说,直接上关键步骤 1.1 安装docx-preview # 正常安装 npm install docx-preview --sa…

Springboot 使用hutool国密算法

添加依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.15</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcp…

C# AutoResetEvent

AutoResetEvent 是 C# 中的一个同步原语&#xff0c;用于在线程之间传递信号。当线程调用 AutoResetEvent 的 WaitOne 方法时&#xff0c;它会阻塞&#xff0c;直到另一个线程调用 Set 方法来释放它。一旦 WaitOne 方法返回&#xff0c;AutoResetEvent 将自动重置其状态&#x…

C语言—深度剖析函数指针,函数指针数组

我们先来看一段代码 #include <stdio.h> void test() {printf("hehe\n"); } int main() {printf("%p\n", test);printf("%p\n", &test);return 0; }输出的是两个地址&#xff0c;这两个地址是 test 函数的地址。 那我们的函数的地址…

java常用时间日期函数

日期格式化方式 SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf new SimpleDateFormat("YYYY-MM-dd HH:mm:ss"); //yyyy-MM-dd对于年份取值取得是当天所在的这个年份//YYYY-MM-dd它所取的年份是本周所在的这个…

Electron 30.0.0 发布,升级 Node 和 V8 引擎

近日&#xff0c;Electron 30.0.0 正式发布&#xff01;你可以通过 npm install electronlatest 进行安装&#xff0c;或者从 Electron 的发布网站下载&#xff0c;继续阅读了解此版本的详细信息。 &#x1f525; 主要更新 Windows 上支持 ASAR 完整性融合。如果未正确配置&am…

软件测试——Postman Script脚本功能

Postman作为软件测试里一款非常流行的调试工具&#xff0c;给我们提供了一个执行JavaScript脚本的环境&#xff0c;所以我们可以使用js语言编写脚本来解决一些接口自动化的问题&#xff0c;比如接口依赖、接口断言等等。Postman有Pre-RequestScript和Tests两个编写js脚本的模块…

[学习] linux命令大全

linux命令 前言1. 文件管理*mv* : 移动或改名文件*ls*: 显示目录中文件及其属性*cp*: 复制文件或目录*mkdir*: 创建目录文件*pwd*: 显示当前工作目录的路径*tar*: 压缩和解压缩文件*cd*: 切换目录*chmod*: 改变文件或目录权限 2&#xff1a;文档编辑*cat*: 在终端设备上显示文件…

Jenkins 哲学 - 插件初始化安装失败

到Jenkins官网查找最新的LST版本 最后的版本号一定要带&#xff0c;指定下载具体的版本号 docker pull jenkins/jenkins:2.426.1 自定义挂载目录&#xff0c;修改权限 mkdir /jenkins/jenkins_homechmod 777 /data/jenkins

Ansible安装基本原理及操作(初识)

作者主页&#xff1a;点击&#xff01; Ansible专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月23日15点18分 Ansible 是一款功能强大且易于使用的IT自动化工具&#xff0c;可用于配置管理、应用程序部署和云端管理。它使用无代理模式&#xff08;agentles…

谈谈mysql中的各个关键字

1.为什么学习mysql mysql是当今最主流且开放源码的关系型数据库&#xff0c;开发者为瑞典 MySQL AB 公司。目前 MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低&#xff0c;尤其是开放源码这一特点&#xff0c;许多中小型网站为了降低…

GetManifestResourceStream用法

项目添加资源文件Resource1.resx “C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\ResGen.exe” Resource1.resx 从“Resource1.resx”读入 1 资源 正在写入资源文件… 完成。 排除资源文件Resource1.resx 添加文件Resource1.resources属性生成…

由于使用校园网,ubuntu虚拟机时而不能连接网络的解决方案

本来配置好了网络的虚拟机第二天又没网了,ping不通 在尝试过诸如下面的解决方案仍没有丝毫好转(这个时候意识到可能是用了校园网的缘故) VMWARE Ubuntu虚拟机和Windows10主机ping不通|Ubuntu断网、没有网络_vmware 桥接模式下 主机无法ping ubuntu虚拟机来自 192.168.110.95 的…

【C语言】每日一题,快速提升(10)!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 题目&#xff1a;圣诞树 输入&#xff1a; 1输出&#xff1a; * * * * * **说明&#xff1a; 输入&#xff1a; 2输出&#xff1a; * * * * * * * …

C++:基础语法

一、命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c; 以避免命名冲突或名字污染&#xff0c;n…

lacp的详解

LACP&#xff08;Link Aggregation Control Protocol&#xff09;是一种用于在网络中组合多个物理链路以增加带宽和冗余的协议。它是IEEE 802.3ad标准中定义的一种链路聚合技术。 LACP允许将多个物理链路绑定成一个逻辑链路&#xff0c;称为聚合链路或聚合组。这个聚合组可以提…

【C++】一篇文章带你深入了解list

目录 一、list的介绍二、 标准库中的list类2.1 list的常见接口说明2.1.1 list对象的常见构造2.1.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/list/list/list/)2.1.1.2 [有参构造函数(构造并初始化n个val)](https://legacy.cplusplus.com/reference/list/list/…

上位机图像处理和嵌入式模块部署(树莓派4b开机启动脚本)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 编写好程序之后&#xff0c;一般要求程序开机启动后就可以运行。所以这个时候&#xff0c;我们一般就会把程序流程放在开发板的启动脚本当中。如果…