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

计算机网络之三次握手,四次挥手

TCP(传输控制协议)是一种面向连接的、可靠的传输层协议,用于在网络中的两个应用程序之间建立可靠的通信连接。TCP的核心特征之一是它使用“三次握手”过程来建立连接,以及“四次挥手”过程来终止连接。

三次握手(建立连接)

三次握手过程确保双方都准备好进行通信,并同步双方的序列号和确认号。

  1. SYN:客户端发送一个SYN(同步序列编号)报文给服务器。这个报文包含客户端的初始序列号,用于开始数据传输。

  2. SYN-ACK:服务器接收到客户端的SYN报文后,发送一个SYN-ACK(同步和确认)报文作为响应。该报文包含服务器的初始序列号,以及对客户端SYN报文的确认号(客户端序列号+1)。

  3. ACK:客户端接收到服务器的SYN-ACK报文后,发送一个ACK(确认)报文。这个ACK报文包含对服务器SYN报文的确认号(服务器序列号+1)。

完成这三个步骤后,TCP连接建立,数据传输可以开始。

四次挥手(终止连接)

四次挥手过程用于终止双方之间的TCP连接,确保双方都清楚地了解连接已经关闭。

  1. FIN:当通信的一方完成数据传输后,它会发送一个FIN(结束)报文,表示它已经没有数据要发送了。

  2. ACK:接收FIN报文的另一方会回复一个ACK报文,确认接收到了对方的终止请求。

  3. FIN:接收到ACK报文的一方,如果也决定关闭连接,会发送另一个FIN报文给对方。

  4. ACK:最后,接收到第二个FIN报文的一方发送一个ACK报文作为回应,然后关闭连接。

这个过程中,双方都可以单独地关闭它们的发送方向的连接。这意味着TCP连接的终止是双向独立进行的。完成这四个步骤后,连接被完全关闭。

三次握手和四次挥手是TCP协议确保可靠通信的重要机制,它们允许可靠地建立和终止网络连接,确保数据的准确传输和接收。
三次握手和四次挥手之所以被设计成这样,是为了确保TCP(传输控制协议)网络通信的可靠性和完整性。每一步都有其特定的目的和原因。

三次握手(建立连接)

  1. 为什么是三次

    • 第一次握手(SYN):客户端向服务器发送一个SYN报文来开始建立连接,表示客户端准备好了,并通知服务器其初始序列号。
    • 第二次握手(SYN-ACK):服务器回应客户端的SYN请求,发送SYN-ACK报文。这不仅确认了客户端的初始序列号,也通知客户端服务器准备好了,并提供服务器的初始序列号。
    • 第三次握手(ACK):客户端再次发送ACK报文给服务器,确认接收到了服务器的初始序列号。这个步骤是必需的,因为TCP是全双工通信,需要保证双方都准备好发送和接收数据。

    通过三次握手,TCP确保双方都准备好进行通信,并且交换了序列号,这对于可靠的数据传输至关重要。

四次挥手(终止连接)

  1. 为什么是四次

    • 第一次挥手(FIN):一方(通常是客户端)完成数据传输后,发送FIN报文表示希望终止连接。
    • 第二次挥手(ACK):另一方(服务器)收到FIN后,发送ACK报文作为确认,但可能仍有数据需要发送,因此不立即关闭连接。
    • 第三次挥手(FIN):当另一方(服务器)也准备好关闭连接时,它会发送另一个FIN报文给最初发起终止请求的一方。
    • 第四次挥手(ACK):最初发起终止请求的一方收到第二个FIN后,发送ACK报文作为回应,然后关闭连接。

    因为TCP连接是全双工的,所以每个方向的终止都需要单独的确认。这就是为什么需要四次挥手来关闭连接。每一步都确保连接的一方能够独立地关闭其发送方向的连接。

总的来说,三次握手和四次挥手的设计是为了确保TCP连接的可靠建立和可靠终止,防止数据丢失,并处理可能出现的网络延迟和错误。这些机制使TCP成为一个可靠的传输协议,适用于需要保证数据完整性和顺序的应用,如Web浏览、文件传输、电子邮件等。

相关文章:

计算机网络之三次握手,四次挥手

TCP(传输控制协议)是一种面向连接的、可靠的传输层协议,用于在网络中的两个应用程序之间建立可靠的通信连接。TCP的核心特征之一是它使用“三次握手”过程来建立连接,以及“四次挥手”过程来终止连接。 三次握手(建立…...

深度强化学习(王树森)笔记09

深度强化学习(DRL) 本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL 源代码链接:https://github.c…...

调试OpenHarmony应用/服务

调试流程 DevEco Studio提供了丰富的OpenHarmony应用/服务调试能力,帮助开发者更方便、高效的调试应用/服务。 OpenHarmony应用/服务调试支持使用真机设备调试。使用真机设备进行调试前,需要对HAP进行签名后进行调试。详细的调试流程如下图所示&#x…...

【NGINX】NGINX如何阻止指定ip的请求

业务场景: web页面做了一个功能,在websocket请求失败的情况,会定时向服务端进行重试进行建立连接。 存在的问题是即使这个web系统没人操作的情况下,只要页面没有关闭,即使系统超时了页面也没有发生跳转,这…...

PHP抽奖设置中奖率,以及防高并发

一、中奖率,先在后台设定好奖项名称,抽奖份数,以及中奖百分比 奖品表draw 二、 借助文件排他锁,在处理下单请求的时候,用flock锁定一个文件,如果锁定失败说明有其他订单正在处理,此时要么等待要么直接提示用户"服务器繁忙" 阻塞(等待)模式,一般都是用这个模…...

使用.NET6 Avalonia开发跨平台三维应用

本文介绍在Vistual Studio 2022中使用Avalonia和集成AnyCAD Rapid AvaloniaUI三维控件的过程。 0 初始化环境 安装Avalonia.Templates dotnet new install Avalonia.Templates若之前安装过可忽略此步骤。 1 创建项目 选择创建AvaloniaUI项目 选一下.NET6版本和Avalonia版…...

linux(ubuntu)中crontab定时器命令详解 以及windows中定时器

文章目录 linux(ubuntu)中crontab定时器命令详解基本语法crontab 文件格式通配符示例在Ubuntu中,定时任务cron服务默认被安装。可以通过以下命令操作该服务:其他注意事项windows中定时器任务的创建步骤:常规触发器操作…...

植物病害检测YOLOV8,OPENCV调用

【免费】植物病害检测,10种类型,YOLOV8训练,转换成ONNX,OPENCV调用资源-CSDN文库 植物病害检测,YOLOV8NANO,训练得到PT模型,然后转换成ONNX,OPENCV的DNN调用,支持C,PYTH…...

C++初阶:入门泛型编程(函数模板和类模板)

大致介绍了一下C/C内存管理、new与delete后:C初阶:C/C内存管理、new与delete详解 我们接下来终于进入了模版的学习了,今天就先来入门泛型编程 文章目录 1.泛型编程2.函数模版2.1概念2.2格式2.3函数模版的原理2.4函数模版的实例化2.4.1隐式实例…...

【RT-DETR有效改进】CARAFE提高精度的上采样方法(助力细节长点)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的CARAFE(Content-Aware ReAssembly of FEatures)是一种用于增强卷积神经网络特征图的上采样方法。其主要旨在改进传统的上采样方法(就是我们的Upsample)的性能。CARAFE的核心思想是:使用输…...

leetcode 27.移除元素(python版)

需求 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度…...

分布式场景怎么Join

背景 最近在阅读查询优化器的论文,发现System R中对于Join操作的定义一般分为了两种,即嵌套循环、排序-合并联接。 考虑到我的领域是在处理分库分表或者其他的分区模式,这让我开始不由得联想我们怎么在分布式场景应用这个Join逻辑&#xff…...

springboot2.7继承swagger knif4j

maven pom依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi2-spring-boot-starter</artifactId><version>4.4.0</version></dependency> yml配置 knife4j:enable: trueopenapi:title: …...

C++ 实现单例模式

单例模式 单例模式确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 创建单一实例 怎么让某个类只能创建一个实例&#xff1f; 思路&#xff1a;将类的构造函数私有&#xff0c;然后提供一个静态方法访问对象。调用类内成员函数需要对象&#xff0c;但我们又无法…...

Java多线程--线程安全问题练习题

文章目录 &#xff08;1&#xff09;练习题1&#xff08;2&#xff09;练习题2&#xff08;3&#xff09;练习题3 现在咱们线程一共说了这么几件事情&#xff0c;如下&#xff1a; 具体文章见专栏。 接下来看几个练习题吧。 &#xff08;1&#xff09;练习题1 &#x1f30b;题…...

PHY6252低成本Mesh组网蓝牙芯片

超低成本MESH组网蓝牙芯片PHY6252蓝牙Mesh组网简介 蓝⽛Mesh⽹络使⽤&#xff0c;依赖于低功耗蓝⽛(BLE)。低功耗蓝⽛技术是蓝⽛Mesh使用的无线通信协议栈&#xff0c;蓝牙BR/EDR能够与实现一台设备到另一台设备的连接和通信&#xff0c;建立“一对一”的关系&#xff0c;大多数…...

红外图像中两点校正的增益系数与偏置系数的计算公式推导

增益系数&#xff08;K&#xff09; 根据两个温度下的响应值&#xff0c;可求得各响应单元的响应曲线&#xff08;即斜率&#xff09;&#xff0c;累加所有曲线的斜率求平均斜率值。 平均斜率值与各响应单元的斜率的比值即为该单元的K增益系数。结论&#xff1a;某单元的增益系…...

C++/MFC:在窗体Form(Dialog)中多个编辑框时,在输入时将回车解释为TAB键,将输入焦点移到下一个编辑框的方法

很多时候&#xff0c;为了输入方便&#xff0c;常用的做法&#xff0c;就是将回车键解释为将输入焦点移动到下一个编辑框中。就像是我的VxTerm中的快速连接输入一样&#xff1a; VxTerm是一个国产化替代的SSH工具&#xff0c;可以从本站的资源中免费下载并且免费使用&#xff…...

鸿蒙南向开发——GN快速入门指南

运行GN(Generate Ninja) 运行gn&#xff0c;你只需从命令行运行gn&#xff0c;对于大型项目&#xff0c;GN是与源码一起的。 对于Chromium和基于Chromium的项目&#xff0c;有一个在depot_tools中的脚本&#xff0c;它需要加入到你的PATH环境变量中。该脚本将在包含当前目录的…...

PyCharm常用快捷键和设置

Ctrl Space 基本的代码完成&#xff08;类、方法、属性&#xff09; Ctrl Alt Space 快速导入任意类 Ctrl Shift Enter 语句完成 Ctrl P 参数信息&#xff08;在方法中调用参数&#xff09; Ctrl Q 快速查看文档 F1 外部文档 Shift F1 外部文档…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...