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

TCP的三次握手过程

TCP面向连接的、可靠的、基于字节流的传输层通信协议。

TCP是面向连接的协议,所以使用 TCP前必须先建立连接,而建立连接是通过三次握手来进行的。

TCP包头结构

在讲解三次握手的过程之前,我们先来看一下 TCP包的结构:
TCP包结构
TCP包头大小在大多数情况下是固定的,它通常是 20字节(不包括任何选项),但如果启用了选项,则最多可以达到 60字节。下面是 TCP包头的一般结构:

  • 源端口号(16位):表示发送方的端口号。
  • 目标端口号(16位):表示接收方的端口号。
  • 序列号(32位):用于对数据流中的字节进行编号,以便对方能够按顺序重新组装数据。
  • 确认号(32位):表示期望接收到的下一个序列号。
  • 数据偏移(4位):指示 TCP包头的长度,以 4字节为单位。因此,数据偏移的值乘以 4就是 TCP包头的总长度。这个字段也被称为 头部长度
  • 保留位(6位):保留供将来使用,目前全部为 0。
  • 标志位(6位):用于控制 TCP连接的状态,包括 SYNACKFINRSTPSHURG等。
  • 窗口大小(16位):表示发送方的接收窗口大小,用于流量控制。
  • 校验和(16位):用于验证 TCP报文的完整性。
  • 紧急指针(16位):当 URG标志被设置时,紧急指针表示紧急数据的末尾位置。
  • 选项(可选):可以包含各种选项,如最大报文段大小(MSS)、窗口缩放因子等,每个选项的大小不定。

在三次握手过程中,我们主要关注序列号确认号以及标志位中的SYNACK

三次握手过程

通常来说,服务器会开放监听端口,而客户端则主动连接这个端口,创建连接的时候,会进行三次握手,过程如下图所示:
TCP三次握手

  1. 客户端发送 SYN包到服务器,附上一个随机生成的序列号(ISN)。此时客户端处于 SYN_SEND状态。
  2. 服务器返回 SYN+ACK包到客户端,附上一个随机生成的序列号,确认号则是客户端上传的序列号+1。此时服务端处于SYN_RECV状态。
  3. 客户端返回 ACK到服务器,确认号是服务器下发的序列号+1。此时客户端处于ESTABLISHED状态,连接已建立,这个包可以顺带发一些数据。
  4. 服务端收到ACK后,也进入ESTABLISHED状态,可以收发数据。

三次握手的一个重要功能是客户端和服务端交换 ISN(Initial Sequence Number),以便让对方知道接下来接收数据的时候如何按序列号组装数据。同时也确保了服务端和客户端的收发都能正常进行。

使用 wireshark抓包工具,我们可以看到三次握手的数据:

wireshark

为什么是三次握手?不是两次、四次?

1. TCP 连接使用三次握手的首要原因,是为了防止旧的重复连接初始化造成混乱。

想像一个场景,客户端发了SYN之后宕机了,重启后又发了新的SYN。如果只有两次握手的话,当服务器收到旧的SYN之后,发送ACK给客户端,就直接进入ESTABLISHED状态,这时候就可以发数据了。

但是客户端期待的是新的SYN的序列号,发现服务端发的确认号不对应,会关闭这个连接,而服务器此时已经发了数据过来,这就造成了混乱。

而三次握手,客户端可以收到ACK之后,判断确认号,正确则返回ACK,错误则返回RST告诉服务器关闭这个连接。

使用三次握手和RST控制消息,将是否建立连接的最终控制权交给了客户端,因为只有客户端有足够的上下文来判断当前连接是否是错误的或者过期的,这也是TCP使用三次握手建立连接的最主要原因。

2. 三次握手的第二个原因,是为了交互双方的序列号。

TCP协议的通信双方,都必须维护一个序列号,用来保证数据包的有序,以及丢包时能够重发,所以这个初始化的序列号是很重要的。当客户端发SYN给服务器时,服务器需要返回ACK确认,而服务器发SYN给客户端时,客户端也需要发ACK确认,才能确保两边都有正确的序列号。服务器在发SYNACK时,可以合并成一条消息发送,所以是不需要四次握手的。

参考资料

  • 4.1 TCP 三次握手与四次挥手面试题 - 小林coding

相关文章:

TCP的三次握手过程

TCP是面向连接的、可靠的、基于字节流的传输层通信协议。 TCP是面向连接的协议,所以使用 TCP前必须先建立连接,而建立连接是通过三次握手来进行的。 TCP包头结构 在讲解三次握手的过程之前,我们先来看一下 TCP包的结构: TCP包…...

Microsoft 推出 Phi-3 系列紧凑型语言模型

本心、输入输出、结果 文章目录 Microsoft 推出 Phi-3 系列紧凑型语言模型前言Phi-3 基础参数模型对比突破性训练技术降低人工智能安全风险Microsoft 推出 Phi-3 系列紧凑型语言模型 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你…...

Retrofit库中,Call​;Retrofit使用举例;@GET,@PUT区别;

目录 在Retrofit库中,Call​ Retrofit使用举例 Call> listRepos(@Path("user") String user); Call是什么:...

# 怎么关闭 win10 系统中自带的【文件预览】功能?关闭WIN10【文件预览】功能的方法

怎么关闭 win10 系统中自带的【文件预览】功能?关闭WIN10【文件预览】功能的方法 win10 系统中自带的【文件预览】功能,默认是开启状态的,如果需要关闭它,一步搞定。 1、打开电脑文件浏览器,随便进入有文件的一个文件…...

强化学习玩flappy_bird

强化学习玩flappy_bird(代码解析) 游戏地址:https://flappybird.io/ 该游戏的规则是: 点击屏幕则小鸟立即获得向上速度。 不点击屏幕则小鸟受重力加速度影响逐渐掉落。 小鸟碰到地面会死亡,碰到水管会死亡。&#…...

JavaWeb请求响应概述

目录 一、请求响应流程-简述 二、深入探究 三、DispatcherServlet 四、请求响应流程-详细分析 一、请求响应流程-简述 web应用部署在tomcat服务器中,前端与后端通过http协议进行数据的请求和响应。前端通过http协议向后端发送数据请求,就可以访问到部…...

【IDEA】IDEA常用快捷键

Windows系统 快捷键功能备注CtrlShiftEnter格式化本行,并鼠标跳转到下一行CtrlAltL格式化代码Ctrli快速实现接口方法CtrlShiftU快速实现大小写转换CtrlAlt鼠标左键快速进入方法实现内部CtrlAlt←退回上一步鼠标所在地方CtrlAlt→回到刚才鼠标所在地方Ctrl空格代码智…...

Redission分布式锁 watch dog 看门狗机制

为了避免Redis实现的分布式锁超时,Redisson中引入了watch dog的机制,他可以帮助我们在Redisson实例被关闭前,不断的延长锁的有效期。 自动续租:当一个Redisson客户端实例获取到一个分布式锁时,如果没有指定锁的超时时…...

人脸识别系统架构

目录 1. 系统架构 1.1 采集子系统 1.2 解析子系统 1.3 存储子系统 1.4 比对子系统 1.5 决策子系统 1.6 管理子系统 1.7 应用开放接口 2. 业务流程 2.1 人脸注册 2.2 人脸验证 2.2.1 作用 2.2.2 特点 2.2.3 应用场景 2.3 人脸辨识 2.3.1 作用 2.3.2 特点 2.3.3…...

数塔问题(蛮力算法和动态规划)

题目:如下图是一个数塔,从顶部出发在每一个节点可以选择向左或者向右走,一直走到底层,要求找出一条路径,使得路径上的数字之和最大,及路径情况。(使用蛮力算法和动态规划算法分别实现) #include…...

启动 Redis 服务和连接到 Redis 服务器

启动 Redis 服务和连接到 Redis 服务器的步骤通常依赖于你的操作系统和 Redis 的安装方式。以下是一些常见的步骤: ### 启动 Redis 服务 对于大多数 Linux 发行版,Redis 服务可以通过以下命令启动: 1. 如果 Redis 是通过包管理器安装的&am…...

我独自升级崛起在哪下载 我独自升级电脑PC端下载教程分享

将于5月8日在全球舞台闪亮登场的动作角色扮演游戏《我独自升级崛起》,灵感源自同名热门动画与网络漫画,承诺为充满激情的游戏玩家群体带来一场集深度探索与广阔体验于一身的奇幻旅程。该游戏以独特的网络武侠世界观为基底,展现了一位普通人踏…...

STM32F4xx开发学习—GPIO

GPIO 学习使用STM32F407VET6GPIO外设 寄存器和标准外设库 1. 寄存器 存储器映射 存储器本身是不具有地址的,是一块具有特定功能的内存单元,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就叫做存储区映射。给内存单元分配地址之后…...

引领农业新质生产力,鸿道(Intewell®)操作系统助力农业机器人创新发展

4月27日至29日,2024耒耜国际会议在江苏大学召开。科东软件作为特邀嘉宾出席此次盛会,并为江苏大学-科东软件“农业机器人操作系统”联合实验室揭牌。 校企联合实验室揭牌 在开幕式上,江苏大学、科东软件、上交碳中和动力研究院、遨博智能研究…...

扩展学习|一文读懂知识图谱

一、知识图谱的技术实现流程及相关应用 文献来源:曹倩,赵一鸣.知识图谱的技术实现流程及相关应用[J].情报理论与实践,2015, 38(12):127-132. (一)知识图谱的特征及功能 知识图谱是为了适应新的网络信息环境而产生的一种语义知识组织和服务的方…...

ubuntu中的docker记录(3)——如何安装nvidia-docker以更好地支持GPU加速计算应用程序的运行

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、nvidia-docker2的安装1. 安装docker2. 安装nvidia-docker2(1) 添加密钥(2) 更新软件列表(3) 安装nvidia-docker2(4) 测试nvidia-docker2 二、可能的报错及解…...

MLP实现fashion_mnist数据集分类(1)-模型构建、训练、保存与加载(tensorflow)

1、查看tensorflow版本 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、fashion_mnist数据集下载与展示 (train_image,train_label),(test_image,test_label) tf.keras.datasets.fashion_mnist.l…...

ChatGPT-税收支持新质生产力

Prompt: 税收发展助力新质生产力 Response: 是的,税收发展可以促进新质生产力的发展。通过税收政策的调整和优化,政府可以提供更好的创新环境,激发企业投资研发,推动新技术、新产品的出现,从而推动经济结构升级和新…...

Linux下深度学习虚拟环境的搭建与模型训练

在深度学习实践中,环境配置是十分重要且免不了的一步。本文以 YOLOv4 模型,介绍在Linux下虚拟环境配置到模型训练的过程。 安装Miniconda: Miniconda是Anaconda的一个轻量级版本,非常适合用于科学计算和数据处理。 wget https:…...

Map-Reduce是个什么东东?

MapReduce是一种用于使用并行分布式算法在集群计算机上处理大型数据集的编程模型及其相关实现。这一概念首先由Google普及,并随后作为Apache Hadoop项目的一部分开源发布。 MapReduce的基本工作流程: 映射(Mapping):这是第一阶段&#xff0c…...

使用taotoken cli工具一键配置ubuntu开发环境中的多工具密钥

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用taotoken cli工具一键配置ubuntu开发环境中的多工具密钥 在开发环境中接入多个大模型工具时,手动配置每个工具的AP…...

改进人工势场多无人机三维航迹规划【附代码】

✨ 长期致力于航迹规划、多无人机、目标分配、人工势场算法、三维空间研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)多目标任务分配与人工势场基础&…...

5分钟永久激活Windows和Office:KMS智能激活终极指南

5分钟永久激活Windows和Office:KMS智能激活终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Office文档突然变成只读…...

在VS Code中结合Taotoken实现稳定的AI编程辅助体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在VS Code中结合Taotoken实现稳定的AI编程辅助体验 对于日常使用VS Code进行开发的程序员而言,一个稳定、不间断的AI编…...

如何快速实现OBS多平台直播:obs-multi-rtmp完全配置指南

如何快速实现OBS多平台直播:obs-multi-rtmp完全配置指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否厌倦了每次直播都要在不同平台间反复切换设置?obs…...

在Windows上运行iOS应用:ipasim模拟器完整指南与最佳实践

在Windows上运行iOS应用:ipasim模拟器完整指南与最佳实践 【免费下载链接】ipasim iOS emulator for Windows 项目地址: https://gitcode.com/gh_mirrors/ip/ipasim 想在Windows电脑上体验iPhone应用吗?厌倦了为iOS开发而购买昂贵的苹果设备&…...

ArcGIS标注进阶:手把手教你搞定分式标注和河流左斜体(附完整表达式)

ArcGIS标注进阶:分式标注与河流左斜体实战指南 在地图制图领域,专业标注是提升可视化效果的关键环节。许多GIS工程师在进行水文地质制图时,常遇到分式标注格式混乱、河流名称无法实现标准左斜体等痛点问题。本文将彻底解决这些标注难题&#…...

如何用Sunshine搭建家庭游戏串流服务器:跨设备游戏共享终极指南

如何用Sunshine搭建家庭游戏串流服务器:跨设备游戏共享终极指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的自托管游戏串流服务器&#xff0c…...

告别报错!保姆级教程:在PyCharm 2023.3上完美安装ManimCE(附国内镜像加速)

在PyCharm 2023.3中零失败安装ManimCE的终极指南 当数学可视化遇上Python,ManimCE无疑是当前最强大的工具之一。但对于许多开发者来说,从环境配置到成功运行第一个动画,这段旅程往往充满坎坷。本文将彻底解决安装过程中的所有痛点&#xff0c…...

构建现代化网络拓扑可视化的完整解决方案

构建现代化网络拓扑可视化的完整解决方案 【免费下载链接】easy-topo vuesvgelement-ui 快捷画出网络拓扑图 项目地址: https://gitcode.com/gh_mirrors/ea/easy-topo 在数字化转型浪潮中,网络架构日益复杂,传统的手绘拓扑图已无法满足现代运维需…...