TCP 三次握手四次挥手

目录

TCP 三次握手

1. SYN (Synchronize:同步)

2. SYN-ACK (Synchronize + Acknowledge:同步+确认)

3. ACK (Acknowledge:确认)

为什么是三次而不是两次或四次?

三次握手的作用

TCP 四次挥手

第一次挥手:客户端发送 FIN

第二次挥手:服务器发送 ACK 确认

第三次挥手:服务器发送 FIN

第四次挥手:客户端发送 ACK 确认

为什么需要四次挥手?


TCP 三次握手

TCP三次握手(Three-Way Handshake) 是建立TCP连接时,客户端和服务器之间为了保证可靠的数据传输而进行的三次消息交换。 三次握手的目的是通过交换序列号,确认通信双方都准备好建立连接,并且双方都能进行数据的发送和接收。
注意: 三次握手只在TCP连接建立时进行一次,而不是在每次发送消息时都进行。因为 TCP是一个 面向连接的协议,这意味着在发送数据之前,客户端和服务器 需要建立一个持久的连接。这个连接在数据传输过程中保持开放,直到完成数据交换或者关闭连接。 三次握手是TCP连接建立的过程,一旦连接建立,客户端和服务器之间就可以进行多次数据传输,直到连接关闭。

1. SYN (Synchronize:同步)

  • 客户端向服务器发送一个TCP包,SYN(同步)标志位为1,表示请求建立连接,并告诉服务器自己初始的序列号(seq。seq是一个随机值,这个序列号用于标识数据包的顺序,并且确保数据在传输过程中能够按照正确的顺序重组。使用随机的初始序列号可以防止一些网络攻击(比如猜测攻击),防止攻击者能够伪造合法的TCP连接)。
  • 该包的目的就是告诉服务器:客户端准备建立连接,同时也告诉服务器客户端准备好数据流的初始序列号。
客户端 → 服务器
  • SYN = 1
  • 初始序列号:seq = x

2. SYN-ACK (Synchronize + Acknowledge:同步+确认)

  • 服务器收到客户端的SYN包后,知道客户端要建立连接,于是服务器向客户端发送一个SYN-ACK包,表示服务器同意建立连接,并且确认客户端的序列号。
  • SYN-ACK包包含两个标志位:
    • SYN = 1:表示服务器同意连接。
    • ACK = 1:表示确认收到了客户端的请求包。
  • 同时,服务器会选定自己的序列号seq(如:y)并告知客户端,之后会根据这个序列号继续数据传输。
服务器 → 客户端
  • SYN = 1
  • ACK = 1
  • 确认客户端序列号:ack = x + 1
  • 初始序列号:seq = y
(SYN 是表示服务器同意与客户端建立连接,并且会告诉客户端服务器的初始序列号。ACK是表示确认收到客户端的 SYN请求包,即确认客户端发出的序列号 x,并且ACK中的确认号应是客户端的序列号 x + 1。)

3. ACK (Acknowledge:确认)

  • 客户端收到服务器的SYN-ACK包后,确认服务器同意建立连接,并向服务器发送一个ACK包。此包用于确认服务器的 SYN包。
  • 客户端在该包中会将序列号ack设置为服务器的初始序列号加1(即:ack = y + 1),同时客户端的序列号递增为x + 1。
客户端 → 服务器
  • ACK = 1
  • 确认服务器序列号:ack = y + 1
  • 序列号:seq = x + 1
完成三次握手后,建立TCP连接,客户端和服务器可以开始正常的数据传输。

为什么是三次而不是两次或四次?

两次握手不足以保证服务器是否收到客户端的请求。如果客户端发送了SYN包,但服务器没有响应,客户端就无法知道服务器是否准备好接收连接。四次握手会增加额外的开销和延迟,而实际情况下三次握手就足够保证双方都准备好进行通信了。

三次握手的作用

  • 保证双方准备好通信:通过交换序列号,客户端和服务器可以确保彼此都准备好接收和发送数据。
  • 确认双方的接收能力:三次握手确保连接的两端都能够进行数据的发送和接收。
  • 避免无效连接:如果客户端或服务器没有准备好,就不会建立连接,从而避免了无效连接的浪费。

TCP 四次挥手

四次挥手是 TCP 连接关闭的过程,确保客户端和服务器都能独立且正确地关闭各自的连接。客户端和服务器在关闭连接时需要分别发送 FIN 包,并且每个 FIN(Finish)包都需要对方的 ACK 确认,以保证双方都准备好关闭连接。

第一次挥手:客户端发送 FIN

客户端 -> 服务器:FIN(Finish)客户端向服务器发送一个 FIN 包(带有 FIN 标志),表示客户端没有数据要发送了,但仍然能够接收来自服务器的数据。此时客户端进入 FIN_WAIT_1 状态。

第二次挥手:服务器发送 ACK 确认

服务器 -> 客户端:ACK服务器收到客户端的 FIN 包后,确认客户端的关闭请求,发送一个 ACK 包(带有 ACK 标志)给客户端,确认号为客户端发送的序列号 + 1。此时,服务器进入 CLOSE_WAIT 状态,等待关闭其发送通道(即它需要先发送完自己未发送的数据)。客户端进入 FIN_WAIT_2 状态。

第三次挥手:服务器发送 FIN

服务器 -> 客户端:FIN(Finish)当服务器没有数据可发送并准备关闭连接时,服务器向客户端发送一个 FIN 包(带有 FIN 标志),表示服务器也没有数据要发送了。此时,服务器进入 LAST_ACK 状态。

第四次挥手:客户端发送 ACK 确认

客户端 -> 服务器:ACK
客户端收到服务器的 FIN 包后,发送一个 ACK 包(带有 ACK 标志)给服务器,确认号为服务器发送的序列号 + 1。此时,客户端进入 TIME_WAIT 状态,等待 2MSL(Maximum Segment Lifetime,最大报文生存时间),确保服务器收到了确认包。如果客户端在此时间段内没有收到重复的 FIN 包,它将彻底关闭连接。TIME_WAIT 状态也是为了防止网络延迟或丢包等问题,避免导致数据包的重发。)
服务器收到客户端的确认包后,进入 CLOSED 状态,连接完全关闭。

为什么需要四次挥手?

  • TCP 是全双工的协议,即通信的双方(客户端和服务器)可以同时发送和接收数据。因此,关闭连接时,双方需要各自关闭自己的一条发送通道,才能完成连接的正常关闭。
  • 每个方向上的数据传输都需要确认,确保数据不会丢失或错乱。

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

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

相关文章

Vue2下篇

插槽&#xff1a; 基本插槽&#xff1a; 普通插槽&#xff1a;父组件向子组件传递静态内容。基本插槽只能有一个slot标签&#xff0c;因为这个是默认的位置&#xff0c;所以只能有一个 <!-- ParentComponent.vue --> <template> <ChildComponent> <p>…

第38周:猫狗识别 (Tensorflow实战第八周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 六、模型评估 七、预测 总结 前言…

具身智能与大模型融合创新技术实训研讨会成功举办

2025年1月16日-19日武汉&#xff0c;TsingtaoAI联合北京博创鑫鑫教育科技&#xff0c;举行“具身智能与大模型融合创新技术”实训研讨会&#xff0c;本次会议面向高校AI教师和企业AI工程师群体&#xff0c;通过3天的技术研修和实操教学&#xff0c;通过将 AI 大模型与具备3D视觉…

OpenAI的工具革命: 当Operator撕开中国AI「内卷式创新」的遮羞布

OpenAI最新发布的智能体Operator&#xff0c;并非简单的任务执行工具&#xff0c;而是一场针对「工具的工具」的底层革命。它用通用性智能体架构重构人机协作范式&#xff0c;而中国AI产业仍在「卷场景」「卷补贴」的泥潭中打转。这场降维打击背后&#xff0c;暴露的是中美AI竞…

MySQL(1)

数据库 基础篇 MYSQL概述 SQL 函数 约束 多表查询 事务 进阶篇 存储索引 索引 SQL优化 试图/存储过程/触发器 锁 InnoDB核心 MySQL管理 运维篇 日志 主从复制 分库本表 读写分离 基础篇 MySQL 数据库概念&#xff1a;存储数据的仓库&#xff0c;数据是有…

SpringBoot+Vue使用Echarts

前言 在vue项目中使用echarts&#xff0c;本次演示是使用vue2 1 前端准备 echarts官网&#xff1a; https://echarts.apache.org/zh/index.html 官网提供了基本的使用说明和大量的图表 1.1 下载echarts 执行命令 npm install echarts 直接这样执行很可能会失败&#xff0c;…

PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(下.代码部分)

医疗 MLLM 框架编程实现 本医疗 MLLM 框架结合 Python 与 PyQt6 构建,旨在实现多模态医疗数据融合分析并提供可视化界面。下面从数据预处理、模型构建与训练、可视化界面开发、模型 - 界面通信与部署这几个关键部分详细介绍编程实现。 6.1 数据预处理 在医疗 MLLM 框架中,多…

Linux-day10

第21章 Linux高级篇-日志管理 日志介绍和实例 基本介绍 系统常用的日志 日志服务 日志服务原理图 在这个配置文件里面记录了日志服务程序 日志管理服务rsyslogd -v是反向匹配 invert 日志服务配置文件 时间、主机、是由哪个程序或者服务发生的、事件信息 自定义日志服务 日…

Linux第一讲--基本的命令操作

从今天开始&#xff0c;我将在csdn这个平台上和大家分享Linux的相关知识&#xff0c;欢迎大家一起讨论&#xff01; 零、基本操作 1.进入全屏&#xff1a; ALTENTER,退出也是这个 2.复制&#xff1a;ctrlinsert 3.粘贴&#xff1a;shiftinsert Linux中&#xff0c;cv是不好…

WinRAR.exe命令行的使用

工具 命令行打包命令 rem 默认压缩根目录&#xff0c;递归处理子文件夹使用 -r WinRAR.exe a -r test.rar C:/web/Views/

### 2.5.3 二叉树的基本操作

2.5.3 二叉树的基本操作 // 获取树中节点的个数 int size(Node root);// 获取叶子节点的个数 int getLeafNodeCount(Node root);// 子问题思路-求叶子结点个数// 获取第K层节点的个数 int getKLevelNodeCount(Node root,int k);// 获取二叉树的高度 int getHeight(Node root);…

设计新的 Kibana 仪表板布局以支持可折叠部分等

作者&#xff1a;来自 Elastic Teresa Alvarez Soler, Hannah Mudge 及 Nathaniel Reese 在 Kibana 中构建可折叠仪表板部分需要彻底改造嵌入式系统并创建自定义布局引擎。这些更新改进了状态管理、层次结构和性能&#xff0c;同时为新的高级仪表板功能奠定了基础。 我们正在开…

怎么样把pdf转成图片模式(不能复制文字)

贵但好用的wps&#xff0c; 转换——转为图片型pdf —————————————————————————————————————————— 转换前&#xff1a; 转换后&#xff1a; 肉眼可见&#xff0c;模糊了&#xff0c;且不能复制。 其他免费办法&#xff0c;参考&…

PAT甲级-1023 Have Fun with Numbers

题目 题目大意 一个数乘以2倍后&#xff0c;仍由原来的数字组成&#xff0c;只不过顺序发生变化&#xff0c;就输出Yes&#xff0c;否则输出No。并输出乘以2部后的数。 思路 题目说数字不超过20位&#xff0c;long long最多只能表示19位&#xff0c;93....&#xff0c;超过其…

系统架构设计师教材:信息系统及信息安全

信息系统 信息系统的5个基本功能&#xff1a;输入、存储、处理、输出和控制。信息系统的生命周期分为4个阶段&#xff0c;即产生阶段、开发阶段、运行阶段和消亡阶段。 信息系统建设原则 1. 高层管理人员介入原则&#xff1a;只有高层管理日恩怨才能知道企业究竟需要什么样的…

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09; 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09;预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…

我谈区域偏心率

偏心率的数学定义 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》P312 区域的拟合椭圆看这里。 Rafael Gonzalez的二阶中心矩的表达不说人话。 我认为半长轴和半短轴不等于特征值&#xff0c;而是特征值的根号。…

每日进步一点点(网安)

1.1 level5 查看源码关键部分 $str strtolower($_GET["keyword"]); $str2str_replace("<script","<scr_ipt",$str); $str3str_replace("on","o_n",$str2);<input namekeyword value".$str3.">关键…

centos操作系统上以service形式运行blackbox_exporter监控网页端口

文章目录 前言一、blackbox_exporter是什么二、使用步骤1.获取二进制文件2.准备部署脚本3.执行命令&#xff0c;进行部署4.prometheus中增加需要监控页面的job信息 三、查看部署结果四、配置到grafana中总结 前言 记录一下centos操作系统上以简单的service形式运行blackbox_ex…

【阅读笔记】基于图像灰度梯度最大值累加的清晰度评价算子

本文介绍的是一种新的清晰度评价算子&#xff0c;基于图像灰度梯度最大值累加 一、概述 目前在数字图像清晰度评价函数中常用的评价函数包括三类&#xff1a;灰度梯度评价函数、频域函数和统计学函数&#xff0c;其中灰度梯度评价函数具有计算简单&#xff0c;评价效果好等优…