计算机网络之TCP的三次握手和四次挥手
一.有关TCP协议的几个概念
1.1TCP协议的基本概念:
TCP协议是传输层的一个协议,它支持全双工通信,是主机对主机之间数据的可靠传输,是一个连接导向的协议。
1.2连接:
连接是通信双方的一个约定,它的目的是让两个在通信的程序之间产生一个默契,保证两个通信的程序都在线,并且尽快地响应对方的请求。连接是记录网络的行为状态,是在传输层的一个概念。
1.3会话:
会话是应用的行为,比如说在微信上,你约定和张三聊天,聊了一段时间之后各自先不发送信息了,但是微信聊天窗口没有关闭。所以这个时候,连接关闭了,会话没有关闭。所以会话是在应用层的概念。
1.4单工通信:
如果在任何一个时刻,数据只能单向传送,这就是单工,单工通信至少需要一条线路;
1.5半双工通信:
如果在某个时刻,数据可以向一个方向进行传输,也可以向另外一个方向进行传输,并且交替进行,就叫作半双工,至少需要一条线路;
1.6双工通信:
如果在任意一个时刻,数据都可以双向收发,这就叫做全双工,全双工通信需要大于一条线路。
二.TCP的三次握手
TCP协议的三次握手发生在建立连接的过程。先用一个大致的流程图表示一下三次握手的大致过程。

在上述表示的过程中,SYN在协议头中表示的是发起一个新连接,ACK是确认序号有效。可以看到,在上述的建立连接的过程中,有三次数据之间的互相传输,所以被称作为三次握手。
我们可以分析一下,在这三次握手的过程中,客户端和服务端分别都做了什么:
第一次握手:客户端给服务端发送一个建立连接的SYN报文,主动打开连接。第一次握手确保客户端发送报文的能力正常。
第二次握手:服务端如果同意连接,先生成一个ACK确认报文,确认从客户端接受到的报文无误,然后发送一个SYN报文给客户端,第二次握手是确保服务端接收和发送能力正常。
第三次握手:客户端接收到服务器端的确认信息后,还要给服务器发送确认报文。此时TCP连接建立,确认客户端接收能力正常。
三:TCP为什么需要三次握手
如果TCP协议只采用两次握手会出现以下情况,客户端向服务端发送的请求报文由于网络延迟或者其他原因,没有及时成功地发送到服务端,这是,客户端会再次向服务端发生请求报文,在此之后,由于网络通畅了,连接释放,与服务器端建立了连接,第一次客户端发送的报文也会发送到服务端,但是,第一次发送的报文本该失效了,服务端以为客户端又重新发送了一次请求,两次握手建立连接,客户端忽略服务端的确认报文就建立连接,也不会给服务端发送数据,就会造成不必要的网络资源浪费。
所以,当TCP采用三次握手来建立连接时,就算第一次失效的报文请求发送给服务端,服务端发送确认报文给客户端,但是服务端没有接收到客户端第三次握手的确认报文,就会知道客户端没有建立连接,就会避免两次握手所造成的问题。
四.TCP的四次挥手
TCP协议的四次挥手发生在断开连接的过程,先用一个大致的流程图来表示一下四次挥手的过程。
下面我们分析一下,在这四次挥手中,客户端和服务端分别都做了什么
第一次挥手:客户端给服务端发送一个 FIN数据包,主动断开连接,告诉服务器我要和你断开连接了,不会再给你发送数据了;此时客户端还是可以接受数据的,如果一直没有接受到被动连接方的确认包,则可以重新发送FIN数据包。
第二次挥手:服务端接收到FIN数据包之后,向客户端发送ACK确认包,表示已经收到客户端发送的报文了,这个时候,服务器在向客户端传达一个信息:我知道你要断开连接了,但是我的数据还没有发送完,等我发送完之后就会进行第三次挥手。
第三次挥手:服务端向客户端发送FIN数据包,告诉客户端我的数据发送完了,不会再给你发送数据了。
第四次挥手:客户端收到FIN数据包之后,同样的会发送一个ACK确认报文,到达服务端之后,客户端进入CLOSED状态。
五.TCP为什么需要四次挥手
当客户端向服务端发送FIN数据包表示断开连接时,这仅仅表示客户端不再发送数据了,但是客户端还是能够接收数据。当服务端接收到客户端的FIN报文时,它首先会回复一个ACK应答报文,然而,服务端可能还有数据需要处理和发送,所以直到服务端不再发送数据的时候,才会发送FIN报文给客户端,表示同意关闭连接。
从上述描述的过程可以看出,服务端通常会把ACK和FIN报文分开发送,所以才会有四次挥手的过程。
六.总结
TCP是一个全双工协议,保证双方的传输更加稳定和可靠。为了让双方都保证建立连接的时候,连接的双方都需要向对方发送SYC(同步请求)和ACK(响应)。在建立连接的时候,双方都没有繁琐的工作,所以在被建立连接的一方可以将自己的ACK和SYN作为一条信息回复,因此需要三次握手。在断开连接的时候,因为需要等被断开连接的一方把数据都处理完,所以被断开连接的一方需要分别发送ACK和FIN,因此需要四次挥手。
相关文章:
计算机网络之TCP的三次握手和四次挥手
一.有关TCP协议的几个概念 1.1TCP协议的基本概念: TCP协议是传输层的一个协议,它支持全双工通信,是主机对主机之间数据的可靠传输,是一个连接导向的协议。 1.2连接: 连接是通信双方的一个约定,它的目的是让…...
JupyterLab使用指南(八):更改JupterLab左侧默认打开目录
在JupyterLab中,默认打开路径通常是由其配置文件中的root_dir设置决定的。如果你没有特意设置这个配置项,JupyterLab可能会使用当前用户的主目录或者上一次关闭时的路径作为默认打开路径。 更改JupyterLab默认路径的操作在不同操作系统下大体相似&…...
Android SurfaceFlinger——HWC Adapter初始化(五)
上一篇文章对 HWC 硬件加载流程进行了分析,在加载完成后开始创建 HAL 实例时,首先需要对 hwc2_device_t 的适配器进行初始化,这里我们主要分析 HWC Adapter 的创建流程。 一、创建HWC Adapter 在创建 HAL 实例之前,我们先来看一下 HWC Adapter 的创建。 1、createHalWith…...
泛微开发修炼之旅--17基于Ecology短信平台,实现后端自定义二开短信发送方案及代码示例
文章链接:17基于Ecology短信平台,实现后端自定义二开短信发送方案及代码示例...
SpringMVC系列二: 请求方式介绍
RequestMapping 💞基本使用💞RequestMapping注解其它使用方式可以修饰类和方法可以指定请求方式可以指定params和headers支持简单表达式支持Ant 风格资源地址配合PathVariable 映射 URL 绑定的占位符注意事项和使用细节课后作业 上一讲, 我们学习的是Spr…...
大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展
今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语…...
C# 关于通讯观察线程(1) -- 开启通讯线程
通讯观察线程是个有意思,又是非常实用的功能。 具体怎么实现呢,我们来看看主要过程的伪代码。对于高手这也许很简单,但是要用好也是需要实践到通讯的流程正确,同时应对好网络故障等。 先在合适的地方启动观察线程: …...
15.树形虚拟列表实现(支持10000+以上的数据)el-tree(1万+数据页面卡死)
1.问题使用el-tree渲染的树形结构,当数据超过一万条以上的时候页面卡死 2.解决方法: 使用vue-easy-tree来实现树形虚拟列表,注意:vue-easy-tree需要设置高度 3.代码如下 <template><div class"ve-tree" st…...
【服务器07】之【GitHub项目管理】及【Unity异步加载场景】
登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字,点击创建存储库就可以了 现在我们下载Fork Fork - a fast and friendly git client for Mac and Windows (git-fork.com) 免费的 下载完成之后点击File下的Clone …...
ansible提权之become_method与become_flags详解
目录 常见become_methodbecome_flagssu 常见选项总结sudo 常见选项总结pbrun 常见选项总结pfexec 常见选项总结doas 常见选项总结示例使用 sudo 的示例:使用 pbrun 的示例:使用 pfexec 的示例:使用 doas 的示例: 配置方式1. 配置文…...
elementui的el-dialog组件与el-tabs同时用导致浏览器卡死的原因解决
在el-dialog弹出框中,如果使用el-tabs,点击弹框的关闭按钮时,会导致弹出框无法关闭,且浏览器卡死。 解决方式(一): 在el-talbs的面板中不放任何内容: <el-tab-pane label"…...
基于图扑 HT for Web 实现拓扑关系图
拓扑结构在计算机网络设计和通信领域中非常重要,因为它描述了网络中的设备(即“点”)如何相互连接(即通过“线”)。这种结构不仅涉及物理布局,即物理拓扑,还可以涉及逻辑或虚拟的连接方式&#…...
linux笔记10--编辑器之神VIM
文章目录 1. 简单介绍① 为什么叫vim② linux常见的编辑器③ 注意事项④ 其它 2. 操作模式的划分① 两种 -- 国际上普通模式(命令操作模式)插入模式 ② 三种 -- 国内普通模式如何进入与退出界面 插入模式如何进入与退出界面 命令模式如何进入与退出界面常见的命令模式 ③ 区别④…...
安全管理中心-集中管控(6点)
记忆内容: 应划分出特定的管理区域,对分布在网络中的安全设备或安全组件进行管控。(三级新增) 应能够建立一条安全的信息传输路径,对网络中的安全设备或安全组件进行管理。(三级新增) 应对网络…...
使用electron打包Vue前端项目的详细流程
使用electron打包Vue前端项目的详细流程 需要更改的东西 路由模式的修改 # 修改前:url不带#mode: history# 修改后:url带#mode: hash全局修改Cookies为localStorage 由于打包成exe或deb这类可执行文件后,本地是没有 Cookies 全局搜索Cooki…...
《计算机英语》 Unit 4 Information Management 信息管理
Section A Information Storage 信息存储 1. The importance of Information信息的重要性 词汇 reside vi属于,驻留 tablet n平板电脑 laptop n笔记本电脑 repository n仓库 claim n索赔 regulatory n法规 contractua…...
如何打包数据库文件
使用 mysqldump 命令: mysqldump -u username -p database_name > output_file.sql username 是数据库的用户名。database_name 是要导出的数据库名称。output_file.sql 是导出的 SQL 文件名,可以自定义。 示例: mysqldump -u root -p…...
iOS抓包指南 正则过滤爬取
解读iOS抓包 抓包 (packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。 什么是正则表达式? 正则表达式(regular expression)是用来描述…...
FLASH仿真EEPROM---基于智芯Z20K11XM
一、介绍 电可擦和可编程只读存储器(EEPROM)可以对字节或字编程和擦除。EEPROM中的数据即使断电也能保持,但Z20K1xx芯片不含EEPROM。然而,闪存可以通过EEPROM仿真软件来模拟EEPROM。Z20K1xx包含两个flash阵列。编程和擦除操作可以在一个数组上进行&#…...
阿里云PAI大模型评测最佳实践
作者:施晨、之用、南茵、求伯、一耘、临在 背景信息 内容简介 在大模型时代,随着模型效果的显著提升,模型评测的重要性日益凸显。科学、高效的模型评测,不仅能帮助开发者有效地衡量和对比不同模型的性能,更能指导他…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
