计算机网络之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大模型评测最佳实践
作者:施晨、之用、南茵、求伯、一耘、临在 背景信息 内容简介 在大模型时代,随着模型效果的显著提升,模型评测的重要性日益凸显。科学、高效的模型评测,不仅能帮助开发者有效地衡量和对比不同模型的性能,更能指导他…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
