计算机网络之---TCP连接管理

TCP连接管理

TCP(传输控制协议)是面向连接的协议,在数据传输之前需要建立连接,在数据传输完成后需要断开连接。TCP连接的建立和断开都遵循特定的规则,分别称为三次握手(Three-Way Handshake)和四次挥手(Four-Way Handshake)。它们确保双方能够可靠地建立和关闭连接。

三次握手(TCP连接的建立)

三次握手是为了在客户端和服务器之间建立可靠的TCP连接。这个过程确保双方都能发送和接收数据,并且双方的缓冲区准备好接收数据。

三次握手的过程:
  1. 第一次握手:客户端发送SYN包(同步标志位),告诉服务器客户端请求建立连接。

    • 客户端 -> 服务器:SYN = 1, seq = X(X为随机生成的序列号)

    这一步表示客户端请求连接,并初始化一个序列号X。

  2. 第二次握手:服务器收到SYN包后,向客户端发送SYN-ACK包,表示愿意建立连接,并且确认收到客户端的请求。

    • 服务器 -> 客户端:SYN = 1, ACK = 1, seq = Y(服务器随机生成的序列号), ack = X + 1(确认号,表示服务器已收到客户端的SYN包)

    服务器会发送一个SYN包来表示自己准备好了,同时确认客户端的SYN包。

  3. 第三次握手:客户端收到服务器的SYN-ACK包后,向服务器发送ACK包,确认收到服务器的响应,并且连接建立。

    • 客户端 -> 服务器:ACK = 1, seq = X + 1, ack = Y + 1

    客户端向服务器确认自己的序列号,并最终完成连接建立。

至此,客户端和服务器之间的连接建立完成,可以开始数据传输。

四次挥手(TCP连接的断开)

四次挥手是为了安全地断开TCP连接,确保双方的通信都已结束。这个过程确保数据能够完全传输,并且双方都能正常关闭连接。

四次挥手的过程:
  1. 第一次挥手:客户端发送FIN包,表示它已经完成数据的发送请求,准备关闭连接。

    • 客户端 -> 服务器:FIN = 1, seq = A

    客户端告诉服务器自己已经没有数据发送了,要求关闭连接。

  2. 第二次挥手:服务器收到FIN包后,发送ACK包,确认客户端的关闭请求,并且自己仍然可以继续接收数据。

    • 服务器 -> 客户端:ACK = 1, seq = B, ack = A + 1

    服务器确认客户端的连接关闭请求,并且告知客户端自己准备好关闭连接。

  3. 第三次挥手:服务器发送FIN包,表示它已经完成数据的发送,也准备关闭连接。

    • 服务器 -> 客户端:FIN = 1, seq = C

    服务器告诉客户端自己已经没有数据发送了,准备关闭连接。

  4. 第四次挥手:客户端收到服务器的FIN包后,发送ACK包,确认收到服务器的关闭请求,完成连接的断开。

    • 客户端 -> 服务器:ACK = 1, seq = A + 1, ack = C + 1

    客户端确认服务器的关闭请求,最后断开连接。

至此,双方的连接关闭完成。

三次握手和四次挥手的区别

  1. 三次握手用于连接的建立,四次挥手用于连接的断开。
  2. 三次握手是为了确保客户端和服务器都准备好开始数据传输,而四次挥手是为了确保数据传输完毕并且双方都关闭连接。
  3. 在三次握手过程中,连接的状态是全双工的,双方可以发送数据。而在四次挥手过程中,虽然双方在不同的时间关闭连接,但都确保了数据可以可靠地传输完毕。

四次挥手什么时候断开

  • 如果使用 HTTP/1.1 或 HTTP/2,且启用了长连接(默认情况下启用),则 TCP 连接 只会建立一次。它只会在第一次请求时建立一次,后续请求会复用该连接,直到超时或主动关闭连接。
  • 如果使用 HTTP/1.0 且没有启用长连接,则每次请求会建立一个新的 TCP 连接。

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

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

相关文章

【excel】VBA简介(Visual Basic for Applications)

文章目录 一、基本概念二、语法2.1 数据类型2.11 基本数据类型2.12 常量2.13 数组 2.2 控制语句2.21 条件语句2.22 循环语句2.23 错误处理:On Error2.24 逻辑运算 2.3 其它语句2.31 注释2.32 with语句 2.4 表达式2.41 常见表达式类型2.42 表达式的优先级 2.5 VBA 的…

Git:Cherry-Pick 的使用场景及使用流程

前面我们说了 Git合并、解决冲突、强行回退等解决方案 >> 点击查看 这里再说一下 Cherry-Pick功能,Cherry-Pick不是merge,只是把部分功能代码Cherry-Pick到远程的目标分支 git cherry-pick功能简介: git cherry-pick 是用来从一个分…

机器学习模型调优指南

机器学习模型调优指南 机器学习模型参数调优的作用在于优化模型的性能,使其能够在给定任务上更好地泛化和预测。通过合理调整模型的超参数,能够提高模型的准确性、降低过拟合或欠拟合的风险、加快训练过程等。具体来说,机器学习模型参数调优…

mysql本地安装和pycharm链接数据库操作

MySQL本地安装和相关操作 Python相关:基础、函数、数据类型、面向、模块。 前端开发:HTML、CSS、JavaScript、jQuery。【静态页面】 Java前端; Python前端; Go前端 -> 【动态页面】直观: 静态,写死了…

【Ubuntu与Linux操作系统:一、Ubuntu安装与基本使用】

第1章 Ubuntu安装与基本使用 1.1 Linux与Ubuntu Linux是一种开源、类Unix操作系统内核,拥有高稳定性和强大的网络功能。由于其开源性和灵活性,Linux被广泛应用于服务器、嵌入式设备以及桌面环境中。 Ubuntu是基于Debian的一个流行Linux发行版&#xf…

数据结构与算法之二叉树: LeetCode 654. 最大二叉树 (Ts版)

最大二叉树 https://leetcode.cn/problems/maximum-binary-tree/ 描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值递归地在最大值 左边 的 子数组前缀上 构建左子树递归地在最大值…

Pulsar客户端如何控制内存使用

Pulsar客户端如何控制内存使用 一、使用场景 在实际应用中,Pulsar客户端的内存使用控制是一个重要的性能优化点。假设有一个搜索类业务需要记录用户搜索请求,以便后续分析搜索热点和优化搜索效果。以下是一个简化的代码示例: PulsarClient…

【Unity高级】一文了解Unity 中的条件编译(附所有指令)

一、Unity中的条件编译 Unity 对 C# 语言的支持包括使用指令,这些指令允许您根据是否定义了某些脚本符号,选择性地包含或排除代码的编译。有关这些指令在 C# 中如何工作的更多信息,请参阅微软关于 C# 预处理器指令 的文档。 (一…

苍穹外卖08——(涉及接收日期格式数据、ApachePOI导出报表、sql获取top10菜品数据)

营业额统计 service层 在需要处理空值、与数据库交互或使用集合时,Integer 、Double是更好的选择。 // 导入string工具类 import org.apache.commons.lang.StringUtils; Service // 标记该类为Spring的服务组件 Slf4j // 引入日志功能 public class Repor…

微信小程序订阅消息提醒-云函数

微信小程序消息订阅分2种: 1.一次性订阅:用户订阅一次就可以推送一次,如果需要多次提醒需要多次订阅。 2.长期订阅:只有公共服务领域,如政务、医疗、交通、金融和教育等。‌在用户订阅后,在很长一段时间内…

青少年编程与数学 02-006 前端开发框架VUE 22课题、状态管理

青少年编程与数学 02-006 前端开发框架VUE 22课题、状态管理 一、状态管理二、Vuex1. 安装Vuex2. 创建Vuex Store3. 在Vue应用中使用Store4. 在组件中使用状态5. 模块化Store 三、Vuex应用示例1. 创建项目2. 安装Vuex3. 设置Vuex Store4. 在主项目中使用Store5. 创建组件6. 更新…

代码随想录算法训练营第 4 天(链表 2)| 24. 两两交换链表中的节点19.删除链表的倒数第N个节点 -

一、24. 两两交换链表中的节点 题目:24. 两两交换链表中的节点 - 力扣(LeetCode) 视频:帮你把链表细节学清楚! | LeetCode:24. 两两交换链表中的节点_哔哩哔哩_bilibili 讲解:代码随想录 dummy-…

pycharm-pyspark 环境安装

1、环境准备:java、scala、pyspark、python-anaconda、pycharm vi ~/.bash_profile export SCALA_HOME/Users/xunyongsun/Documents/scala-2.13.0 export PATH P A T H : PATH: PATH:SCALA_HOME/bin export SPARK_HOME/Users/xunyongsun/Documents/spark-3.5.4-bin…

数据结构与算法之链表: LeetCode 146. LRU 缓存 (Ts版)

LRU 缓存 https://leetcode.cn/problems/lru-cache/description/ 描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 ke…

Three.js 渲染技术:打造逼真3D体验的幕后功臣

文章目录 前言一、着色器(Shaders)二、后处理(Post-processing)三、抗锯齿(Anti-aliasing)四、实时渲染与离线渲染五、光照模型与材质优化六、环境映射(Environment Mapping)七、纹理…

EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)

前情:EFCore HasDefaultValueSql 小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd 也有了疑问: ValueGeneratedOnAdd 和 HasDefaultValueSql 是 Entity Framework Core 中用于管理字段默认值的两种不同配置方式&#xff0…

通过Apache、Nginx限制直接访问public下的静态文件

一、Apache 在public目录下的.htaccess文件中添加如下规则&#xff0c;来拒绝除了指定文件类型之外的所有请求 <FilesMatch "\.(?!(jpg|jpeg|png|gif|css|js|ico)$)[^.]$">Order Allow,DenyDeny from all </FilesMatch> 上述配置表示仅允许访问.jpg …

远程和本地文件的互相同步

文章目录 1、rsync实现类似git push pull功能1. 基础概念2. 示例操作3. 定制化和进阶用法4. 定时同步&#xff08;类似自动化&#xff09; 2 命令简化1. 动态传参的脚本2. Shell 函数支持动态路径3. 结合环境变量和参数&#xff08;更简洁&#xff09;4. Makefile 支持动态路径…

AIOps 平台

AIOps&#xff08;Artificial Intelligence for IT Operations&#xff09;平台是一种结合人工智能&#xff08;AI&#xff09;技术和IT运营管理的解决方案&#xff0c;旨在通过自动化、智能化的手段优化企业IT系统的运行与管理。以下是AIOps平台的核心功能、优势以及常见的技术…

【大模型入门指南 07】量化技术浅析

【大模型入门指南】系列文章&#xff1a; 【大模型入门指南 01】深度学习入门【大模型入门指南 02】LLM大模型基础知识【大模型入门指南 03】提示词工程【大模型入门指南 04】Transformer结构【大模型入门指南 05】LLM技术选型【大模型入门指南 06】LLM数据预处理【大模型入门…