三次握手理解

1. 背景介绍

在TCP(传输控制协议)通信中,为了建立可靠的连接,使用了三次握手的机制。这是一种在客户端和服务器之间进行连接初始化的方法,其目的是确保双方都有发送和接收数据的能力,并且协商好连接的相关参数。

2. 三次握手的过程

第一次握手:客户端发起连接请求

客户端发送一个带有SYN(同步序列号)标志的TCP报文段。这个报文段中还包含了客户端初始的序列号(Sequence Number),记为seq = x。这个序列号用于后续数据传输中的字节计数和排序等操作。例如,假设客户端想要访问服务器的一个网页,它会发送这个SYN报文段,告诉服务器:“我想要和你建立连接。”

第二次握手:服务器响应客户端请求并同步自己的序列号

服务器收到客户端的SYN报文段后,会返回一个TCP报文段。这个报文段包含两个标志位,SYN和ACK(确认)。其中,SYN标志表示服务器也同步自己的序列号,服务器的初始序列号记为seq = y。ACK标志用于确认收到客户端的SYN报文段,确认号(Acknowledgment Number)设为ack = x + 1。这意味着服务器告诉客户端:“我收到你的连接请求了,我也准备好建立连接,同时这是我这边的初始序列号。”

第三次握手:客户端确认服务器的响应

客户端收到服务器的带有SYN/ACK标志的报文段后,会发送一个ACK报文段作为回应。这个报文段的确认号ack = y+ 1,序列号仍然是之前的x + 1(因为在这个过程中客户端自己的序列号只在第一次握手时初始化,之后是通过确认号来同步双方的状态)。客户端通过这个报文段告诉服务器:“我已经收到你的响应,我们可以开始传输数据了。”

3. 三次握手的意义

  • 可靠性保证
    • 通过三次握手,双方都能确保对方已经收到自己的连接请求并且做好了传输数据的准备。如果只有两次握手,当客户端发送的第一个SYN报文段在网络中延迟,导致延迟的报文段在连接释放后才到达服务器。服务器收到这个延迟的SYN报文段后,会认为是一个新的连接请求,然后发送SYN/ACK报文段进行响应。但此时客户端并没有发起新的连接请求,不会回复ACK报文段,服务器就会一直等待,造成资源浪费。而三次握手可以避免这种情况,因为客户端会忽略这个延迟到达的SYN/ACK报文段,因为它没有发起对应的连接请求。
  • 同步序列号
    • 序列号在TCP的数据传输中非常重要。它可以保证数据的按序接收和流量控制等功能。在三次握手过程中,双方交换并同步了初始序列号,为后续可靠的数据传输打下了基础。例如,服务器可以根据客户端的序列号来判断数据是否完整地按顺序接收,客户端也可以根据服务器的序列号来进行相应的操作。

4.三次握手确保数据发送与接受的原因

三次握手可以确保双方都有发送和接收数据的能力,主要体现在以下几个方面:

  1. 双方通信意愿的确认
    • 第一次握手:客户端向服务器发送带有 SYN 标志的数据包,这明确表示客户端有建立连接并发送数据的意愿。服务器收到这个数据包,就知道客户端想要进行通信。
    • 第二次握手:服务器收到客户端的 SYN 包后,返回一个带有 SYN 和 ACK 标志的数据包。这不仅表示服务器接收到了客户端的请求,而且也表明服务器有建立连接和接收数据的能力,同时向客户端确认了自己已经准备好。
    • 第三次握手:客户端收到服务器的 SYN/ACK 包后,发送 ACK 包作为回应。这一步骤是客户端对服务器的确认,告诉服务器自己已经接收到了服务器的响应,并且也准备好了进行数据传输。通过这三次交互,双方都明确了对方想要建立连接并进行通信的意愿。
  2. 序列号的同步与确认
    • 在 TCP 通信中,序列号是保证数据按序传输和正确接收的关键。在三次握手过程中,双方会交换并确认初始序列号。
    • 第一次握手时:客户端选择一个随机的初始序列号并告知服务器,服务器收到后就知道了客户端后续发送数据的起始序号。
    • 第二次握手时:服务器也选择一个自己的初始序列号,并通过 SYN/ACK 包告知客户端,同时确认了客户端的序列号。
    • 第三次握手时:客户端再次确认服务器的序列号。这样,双方都知道了对方的初始序列号,为后续的数据传输提供了序列号的基础,确保数据能够正确地被接收和处理,也就证明了双方具备接收数据的能力。
  3. 避免无效连接的建立
    • 如果只进行两次握手,当客户端发送的连接请求因网络延迟等原因延迟到达服务器时,服务器可能会误认为这是一个新的连接请求并进行响应,建立一个无效的连接。而在三次握手的过程中,客户端在第三次握手时会根据自己的记录判断该请求是否是过期的,如果是过期的请求则不会进行第三次握手的回应,从而避免了无效连接的建立。这也从侧面保证了双方在真正有通信需求时才建立连接,即具备发送和接收数据的真实能力和需求。
  4. 状态的同步与稳定连接的建立
    • 三次握手的过程是一个状态转换的过程:客户端从初始状态到发送 SYN 包后的 SYN_SENT 状态,再到收到服务器的 SYN/ACK 包后的状态,最后到发送 ACK 包后的 ESTABLISHED 状态;服务器从初始的监听状态到收到 SYN 包后的 SYN_RCVD 状态,再到收到客户端的 ACK 包后的 ESTABLISHED 状态。这种状态的转换是双方通信状态的同步过程,只有当双方都完成了三次握手,进入到 ESTABLISHED 状态,才意味着连接已经稳定建立,双方可以开始可靠的数据传输,也就确保了双方具备稳定的发送和接收数据的能力。

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

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

相关文章

要卸载 Grafana 或者从 TiDB 集群中删除 Grafana 服务节点,你需要按以下步骤操作

要卸载 Grafana 或者从 TiDB 集群中删除 Grafana 服务节点,你需要按以下步骤操作,具体步骤取决于你想要卸载的是 Grafana 软件 还是 TiDB 集群中的 Grafana 服务节点。下面是两种情况的卸载步骤。 1. 卸载 TiDB 集群中的 Grafana 节点 如果你只想卸载 …

Ubuntu 20.04 配置开发环境(持续更新)

搜狗输入法不能显示中文 sudo apt install libqt5qml5 libgsettings-qt1 sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2 编译环境配置 sudo apt-get update #base tools of ubuntu sudo apt install net-tools gitk tree vim termina…

Vim 编辑器学习笔记

文章目录 Vim 编辑器学习笔记1. Vi/Vim 的发展历史简介2. Vim 的三种操作模式3. 光标移动命令4. 常用编辑操作命令底行模式常用命令文件操作显示行号查找与替换 命令模式常用命令删除复制与粘贴撤销与重做**可视模式** 5. 分屏操作6. 进阶学习与插件管理 Vim 编辑器学习笔记 1…

力扣515:在每个树行中找最大值

给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2&#xff1a; 输入: root [1,2,3] 输出: [1,3]提示&#xff1a; 二叉树的节点个数的范围是 [0,104]-231 < Node.val &l…

<项目代码>YOLOv8 番茄识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined

VUE_PROD_HYDRATION_MISMATCH_DETAILS 未明确定义。您正在运行 Vue 的 esm-bundler 构建&#xff0c;它期望这些编译时功能标志通过捆绑器配置全局注入&#xff0c;以便在生产捆绑包中获得更好的tree-shaking优化。 Vue.js应用程序正在使用ESM&#xff08;ECMAScript模块&#…

香港海洋投资发展有限公司:描绘海洋牧场未来蓝图,打造全球海洋经济标杆

在浩瀚无垠的蓝色海域中&#xff0c;香港海洋投资发展有限公司&#xff08;以下简称“香港海洋投资”&#xff09;正以其卓越的领导力和深厚的实力&#xff0c;引领着海洋经济的新一轮发展浪潮。近年来&#xff0c;公司倾力打造的海洋牧场项目&#xff0c;不仅成为了企业发展的…

《FreeRTOS列表和列表项篇》

FreeRTOS列表和列表项 1. 什么是列表和列表项&#xff1f;1.1 列表list1.2 列表项list item 2. 列表和列表项的初始化2.1 列表的初始化2.2 列表项的初始化 3. 列表项的插入4. 列表项末尾插入5. 列表项的删除6. 列表的遍历 列表和列表项是FreeRTOS的一个数据结构&#xff0c;是F…

MySQL进阶-索引的组合索引

练习题目 题目链接难度SQL进阶-索引的组合索引★★★☆☆ SQL思路 SQL进阶-索引的组合索引 初始化数据 drop table if exists user_profile; CREATE TABLE user_profile ( id int NOT NULL, device_id int NOT NULL, gender varchar(14) NOT NULL, age int , university va…

【iStat Menus for MacBook状态栏菜单系统监控工具--安装教程【简单操作,随时了解电脑情况】

Mac分享吧 文章目录 iStat Menus for MacBook状态栏菜单系统监控软件 效果图展示一、iStat Menus 状态栏菜单系统监控软件 Mac电脑版——v6.73(1240)1️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件3️⃣&#xff1a;软件自定义配置 安装完成&#xff01;&#xff01;&am…

netmap.js:基于浏览器的网络发现工具

netmap.js是一款基于浏览器&#xff0c;用于提供主机发现和端口扫描功能的网络发现工具。 netmap.js的执行速度也非常的快&#xff0c;由于其使用了es6-promise-pool&#xff0c;因此它可以有效地运行浏览器允许的最大并发连接数。 动机 由于我正需要一个基于浏览器的端口扫…

mapbox进阶技巧

1、filter过滤&#xff0c;使用过滤&#xff0c;可以根据不同条件展示我们想要展示的数据 代码示例&#xff1a;核心代码&#xff0c;根据点的size是否满足条件进行展示 filter: [<, size, 30] <!DOCTYPE html> <html lang"en"><head><me…

计算机网络 (2)计算机网络的类别

计算机网络的类别繁多&#xff0c;根据不同的分类原则&#xff0c;可以得到各种不同类型的计算机网络。 一、按覆盖范围分类 局域网&#xff08;LAN&#xff09;&#xff1a; 定义&#xff1a;局域网是一种在小区域内使用的&#xff0c;由多台计算机组成的网络。覆盖范围&#…

实战OpenCV之文字识别

基础入门 文字识别技术,也称为光学字符识别(Optical Character Recognition,OCR),是一种让计算机能够“读取”图像中的文字,并将其转化为可编辑文本的技术。这项技术在许多领域都有广泛的应用,包括但不限于:图片文字识别、文档管理、自动化数据输入、历史文献数字化。 …

【Qt】Qt在窗口中加载Web界面的方法汇总

1、Qt WebEngine 1)Qt版本:Qt5.4以上; 2)平台要求(https://doc.qt.io/archives/qt-5.9/qtwebengine-platform-notes.html): 例如:Windows下只能使用 MSVC 编译器,不支持MinGW编译器,会报错(: error: Unknown module(s) in QT: webenginewidgets) 并且不能用在Qt编…

modbus协议 Mthings模拟器使用

进制转换 HEX 16进制 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15) dec 10进制 n(16进制) -> 10 abcd.efg(n) d*n^0 c*n^1 b*n^2 a*n^3 e*n^-1 f*n^-2 g*n^-3&#xff08;10&#xff09; 10 -> n(16进制) Modbus基础概念 高位为NUM_H&…

飞腾平台Arm NN软件栈安装使用指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

基于JavaSpringboot个人博客

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xf…

鸿蒙next ui安全区域适配(刘海屏、摄像头挖空等)

目录 相关api 团结引擎对于鸿蒙的适配已经做了安全区域的适配,也考虑到了刘海屏和摄像机挖孔的情况,在团结引擎内可以直接使用Screen.safeArea 相关api

吴恩达Prompt Engineering(2/9): Guidelines for Prompting

目录 Principals of Prompting Principle 1 Tactic 1: Tactic 2: Ask for structured output Tactic 3: Check whether conditions are satisfied / Check assumptions required to do the task Tactic 4: Few-Shot prompting, Give successful examples of completing tas…