详解TCP的三次握手
TCP(三次握手)是指在建立一个可靠的传输控制协议 (TCP) 连接时,客户端和服务器之间的三步交互过程。这个过程的主要目的是确保连接是可靠的、双方的发送与接收能力是正常的,并且可以开始数据传输。下面是对每个步骤的详细解释:
1. 第一次握手:客户端发送 SYN
过程:客户端(A)向服务器(B)发送一个同步报文段(SYN,Synchronize Sequence Number),表示它想要与服务器建立连接。
目的:通知服务器客户端打算建立连接,同时告诉服务器一个初始的序列号(Sequence Number,简写为 Seq),用于后续的数据传输中排序数据包。
报文结构:在这个报文中,SYN 标志位置为 1,Seq 设置为一个随机生成的初始序列号,称为 `Seq = x`。注意,此时客户端进入 `SYN-SENT` 状态,等待服务器响应。
2. 第二次握手:服务器响应 SYN-ACK
-过程:服务器(B)接收到客户端的 SYN 报文后,知道客户端请求建立连接。它会发送一个确认报文(SYN + ACK)给客户端,用来确认已收到客户端的 SYN 请求。
目的:
1. 通过 SYN 确认双方可以进行通信,服务器也生成一个自己的初始序列号,准备建立连接。
2. ACK 用来确认已经收到客户端的初始序列号,并告知客户端服务器可以正常通信。
报文结构:
SYN 标志位也设置为 1,因为服务器也需要同步自己的初始序列号给客户端。
ACK 标志位设置为 1,表示服务器确认了客户端的 SYN 报文。
服务器的报文会包含 `Seq = y`(服务器自己的初始序列号)和 `ACK = x + 1`(客户端的序列号加 1,表示已经收到了客户端的 SYN)。
状态:服务器进入 `SYN-RECEIVED` 状态,等待客户端的最终确认。
3. 第三次握手:客户端确认 ACK
过程:客户端接收到服务器的 SYN + ACK 报文后,确认服务器的响应有效,接下来客户端会发送一个纯 ACK(确认)报文给服务器,表示握手成功。
目的:客户端通过 ACK 确认了服务器的序列号,同时通知服务器连接建立完成,双方可以进行数据传输了。
报文结构:
ACK 标志位设置为 1,表示确认已经收到了服务器的 SYN。
报文中的序列号为 `Seq = x + 1`(客户端自己的序列号),`ACK = y + 1`(确认服务器的序列号加 1)。
状态:
客户端在发送完这个 ACK 报文后,进入 `ESTABLISHED` 状态,连接正式建立,接下来可以进行数据传输。
服务器接收到 ACK 报文后,也进入 `ESTABLISHED` 状态,连接建立完成。
三次握手的作用
1. 确认双方的接收和发送能力**:三次握手的每次消息传递都确保了双方都能接收和发送数据。
2. 防止旧连接请求的干扰**:三次握手可以防止旧的重复连接请求重新建立连接,从而保证了连接的唯一性和正确性。
为什么需要三次握手,而不是两次?
两次握手不能保证双方的接收能力。例如,假设只有两次握手:
客户端发送一个 SYN 报文,服务器响应 SYN + ACK,客户端就认为连接建立了。但服务器可能由于网络原因没有收到客户端的 ACK,导致服务器无法确定客户端是否准备好接收数据。三次握手中的第三步(客户端确认 ACK),确保了服务器能收到客户端的确认消息,使得双方都明确了连接状态,避免潜在的问题。
总结
第一次握手**:客户端发送 SYN,表示想建立连接,并发送自己的序列号。
第二次握手**:服务器发送 SYN + ACK,确认收到客户端请求,并发送自己的序列号和对客户端的确认号。
第三次握手**:客户端发送 ACK,确认收到服务器的序列号,并对连接的建立做最终确认。
这样,通过三次握手,TCP 连接才能可靠地建立,接下来才能进行数据传输。
相关文章:
详解TCP的三次握手
TCP(三次握手)是指在建立一个可靠的传输控制协议 (TCP) 连接时,客户端和服务器之间的三步交互过程。这个过程的主要目的是确保连接是可靠的、双方的发送与接收能力是正常的,并且可以开始数据传输。下面是对每个步骤的详细解释&…...
Java面试篇基础部分-Java创建线程详解
导语 多线程的方式能够在操作系统的多核配置上更好的利用服务器的多个CPU的资源,这样的操作可以使得程序运行起来更加高效。Java中多线程机制提供了在一个进程内并发去执行多个线程,并且每个线程都并行的去执行属于线程处理的自己的任务,这样可以提高程序的执行效率,让…...
Ubuntu 20.04/22.04无法连接网络(网络图标丢失、找不到网卡)的解决方案
问题复述: Ubuntu 20.04无法连接到网络,网络连接图标丢失,网络设置中无网络设置选项。 解决方案 对于Ubuntu 20.04而言:逐条执行 sudo service network-manager stopsudo rm /var/lib/NetworkManager/NetworkManager.statesudo…...
《MDTv2- Masked Diffusion Transformer is a Strong Image Synthesizer》
论文摘要 论文提出了一种名为**Masked Diffusion Transformer (MDT)**的新模型,旨在增强扩散概率模型(DPMs)在图像合成中的上下文推理能力。通过引入掩码潜在建模方案,MDT能够显著提升DPMs在图像中对象部分之间关系的学习能力&am…...
算法 - 二分查找
算法 - 二分查找 今天继续八股文学习,看一下比较常规的几个算法 二分查找是一个基于分治策略的搜索方法,简单的理解就是每次都缩小一轮搜索范围,从中间search一次,直到搜索到结果或者为空为止。 基本思路(设一个有序的…...
Python知识点:如何使用Python进行图像批处理
在Python中进行图像批处理可以使用多种库,如 Pillow、OpenCV 和 imageio。这些库可以用来执行各种图像处理任务,如调整大小、裁剪、旋转、滤镜应用等。以下是使用这些库进行图像批处理的示例。 使用 Pillow 进行图像批处理 Pillow 是一个功能强大的图像…...
数据结构实验1
实验题1:求1到n的连续整数和 题目描述 编写一个程序,对于给定的正整数n,求12…十n,采用逐个累加与(n1)/2(高斯法)两种解法。对于相同的n,给出这两种解法的求和结果和求解时间,并用相关数据进行测试。 运行代码 //实验题1:求1到n的连续整数和 #includ…...
使用Postman+JMeter进行简单的接口测试
以前每次学习接口测试都是百度,查看相关人员的实战经验,没有结合自己公司项目接口真正具体情况。 这里简单分享一下公司项目Web平台的一个查询接口,我会使用2种工具Postman和JMeter如何对同一个接口做调试。 准备工作 首先,登录公…...
基于 SpringBoot 的车辆充电桩管理系统
专业团队,咨询就送开题报告 摘 要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,车辆充电桩管理系统也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,…...
centos7.9安装clamav教程
本章教程主要记录在centos7.9安装clamav过程。 ClamAV(Clam AntiVirus)是一个开源的防病毒软件工具,主要用于检测和消除恶意软件。它最初由 Tomasz Kojm 于 2001 年开发,并由 Cisco Systems 维护和支持。ClamAV 广泛应用于邮件网关、文件服务器和其他需要防病毒保护的环境中…...
产品经理如何转型为AI产品经理,如何理解AI产品工程化
技术领域,特别是人工智能和机器学习,其优秀模型的成功应用是一个复杂过程,它不仅要求技术本身的卓越,还须与现有解决方案竞争,这涉及到技术成熟度、成本有效性、市场接受度等多维度因素。 在这一过程中,产品经理扮演着核心角色,负责协调各方利益,确保技术能够转化为满…...
TiDB从0到1学习笔记(精华篇)
历时四个月,恭喜赵老师的《TiDB从0到1》 系列文章顺利完结,小编再次梳理一遍文稿,并附注解分享给大家。 整体架构 从 TiDB 1.0 到 8.0,TiDB 的体系结构一直在不断演进。接下来让我们一起看看整体架构的变化。 TiDB v1 TiDB v1&…...
NLP-新词挖掘
一、背景 网络领域的新词发现(挖掘)是一个非常重要的nlp课题。在处理文本对象时,非常关键的问题在于“切词”这个环节,几乎所有的后续结果都依赖第一步的切词。因此切词的准确性在很大程度上影响着后续的处理,切词结果…...
电脑录屏不求人,9月必备免费录屏软件推荐!苹果电脑可用!
在当今这个信息爆炸的时代,电脑录屏软件已经成为了我们日常工作和生活中不可或缺的工具。无论是制作教学视频、录制在线课程、游戏直播,还是创建产品演示,一个好的录屏软件都能帮助我们更高效地完成任务。市场上的录屏软件琳琅满目࿰…...
SpringMVC基于注解使用:国际化
01-国际化介绍 首先在bootstrap下载个页面 下载后把登录页面的代码粘上去 然后再登录页面代码上有些超链接需要再spring-mvc.xml里面配置下,登录页面才能正常显示 配置静态资源 国际化-根据浏览器语言国际化 现在是中文的情况,要改为英文 1.配置下属…...
工地安全帽检测系统源码分享
工地安全帽检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…...
如何为 DigitalOcean 静态路由操作员设置故障转移
静态路由操作器的主要目的是提供更大的灵活性,并在 Kubernetes 环境中控制网络流量。它使你能够根据应用程序的需求自定义路由配置,从而优化网络性能。该操作器作为 DaemonSet 部署,因此将在你的 DigitalOcean Managed Kubernetes 集群的每个…...
Ansible简单部署与使用
目录 环境安装Ansibleapt installmarkupsafe error 配置Ansible创建个人目录ansible.cfghosts 测试Ansibleping批量执行自定义命令 环境 Ubuntu 20.04 安装Ansible apt install sudo apt install ansiblemarkupsafe error 安装成功后,尝试运行ansibleÿ…...
Harmony Next charles 抓包指南
1.选择安装移动证书 代理信息如下 2.设置手机代理 手机与电脑连接同一网络,然后配置步骤 1 的代理 路径:设置-wlan-选择当前网络编辑-代理-保存 注意:手机配置代理后,目前会默认断开连接,需要手动再连接下 wifi 3.鸿…...
【HarmonyOS】Beta最新对外版本IDE下载和环境配置
【HarmonyOS】Beta最新对外版本IDE下载和环境配置 前言 目前华为HarmonyOS的系统版本已经从Develop Beta升级为Beta预览版,全面开放。再也不需要白名单限制,才能下载使用最新的IDE和预览最新的开放文档了。 IDE下载和安装 Beta IDE下载地址 1.根据你…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
