【图解计算机网络】TCP协议三次握手与四次挥手

TCP协议三次握手与四次挥手

  • 三次握手流程
  • 为什么是三次握手,而不是两次或四次
  • 四次挥手流程
  • TIME_WAIT 为什么要等待 2MSL
  • 为什么握手是三次,挥手是四次?

三次握手流程

在这里插入图片描述

  1. 首先是客户端(也就是我们的浏览器)发送一个SYN标志位为1的请求报文,表示请求建立连接,此时客户端进入SYN-SENT状态;
  2. 然后服务器接收到之后会返回一个SYN和ACK标志位为1的报文,表示响应客户端的连接请求,并请求客户端建立连接,此时服务端进入SYN-RCVD状态;
  3. 最后客户端返回一个ACK标志位为1的报文,于是双方进入ESTABLISHED状态,表示连接建立成功。

为什么是三次握手,而不是两次或四次

1、三次握手可以防止历史连接建立请求导致的错误连接初始化。

比如我们有一个客户端向服务器发起握手请求,握手请求报文的seq num是90但是此时网络阻塞,导致握手请求的报文迟迟没有到达服务器。

在这里插入图片描述

然后我们重启了客户端,此时重新发送连接建立请求的报文,这次报文的seq num是100,此时网络通畅了,seq等于90的握手请求比seq等于100的握手请求先到达。

在这里插入图片描述

此时服务器会先响应一个ack等于91的响应报文,然后客户端接收到之后,会返回一个RST标志位为1的报文。RST标志位为1,表示这个连接要终止。

在这里插入图片描述

这样,服务器没有为这个错误的握手请求建立连接并初始化相应的资源。而是等到seq等于100的握手请求到达,走完三次握手,才会真正建立连接,并开始数据的传输。

如果现在两次握手就建立连接了,就会变成这样:

在这里插入图片描述

两次握手就建立了连接,服务端就会为这个连接初始化一系列资源,然后后面收到RST包后又终止连接,这就纯属资源浪费了。

2、三次握手才能确定双方的seq序列号。

首先客户端与服务器的一来回,可以确定客户端的序列号。

在这里插入图片描述

然后服务器到客户端的一来回,可以确定服务端的序列号。

在这里插入图片描述

第二次和第三次可以合为一次握手请求,于是三次握手请求就可以确定双方的序列号。

在这里插入图片描述

至于为什么不是四次、五次握手,那是因为三次就足够,三次握手已经可以处理历史连接建立的请求和确认双方的序列号,再多次数的握手就是多余的。

四次挥手流程

在这里插入图片描述

  1. 客户端发起断开连接请求(也可以是服务端断开连接请求),发送一个FIN标志位为1的报文,代表客户端请求断开连接,此时客户端的状态变成FIN_WAIT_1。
  2. 服务器接收到断开连接的请求报文后,返回一个ACK标志位位1的报文,此时服务端的状态变为CLOSE_WAIT。
  3. 客户端接收到响应报文之后,状态变成FIN_WAIT_2,然后等待服务端传输完剩下的数据后,发送FIN标志位为1的报文。
  4. 服务端等传输完数据后,就会发送一个FIN标志位为1的报文。
  5. 客户端接收到这个FIN标志位为1的报文后,会返回一个ACK标志位为1的报文,然后进入TIME_WAIT状态,等待两个MSL(报文最大生存时间),然后进入CLOSE状态,连接真正关闭。
  6. 服务端接收到客户端返回的这个FIN标志位为1的报文,就会进入CLOSE状态,连接关闭。

TIME_WAIT 为什么要等待 2MSL

当主动断开连接一方(也就是上面的client)最后一个ACK数据包发送的时候丢失了,被动断开连接一方(也就是上面的server)就会重新发送FIN报文。

在这里插入图片描述

等待2MSL目的就在于出现这种情况的时候,主动断开连接一方保证可以接收到被动断开连接一方重发的FIN报文。

如果等待的时长不足2MSL,那么就无法保证能够接收到被动断开连接一方重发的FIN报文;不等待更长的时间,那是因为如果此时网络不可靠,在2MSL时长内也无法让主动断开连接一方接收到被动断开连接一方重发的FIN报文,那么等待再长的时间也是没有意义的,比如现在是丢包率百分之一百的网络,等再长的时间也是白等。

为什么握手是三次,挥手是四次?

因为主动断开连接的一方发送断开连接的请求时,可以确定主动方已经没有数据需要传输了,但是无法确定被动断开连接一方是否已经没有数据需要发送。因此如果当被动方接收到主动方发送的FIN报文之后,返回一个ACK报文给主动方之后,还需要把剩下的数据发送完。

在这里插入图片描述

此时主动方虽然不能再发送数据,但是还可以响应ACK报文,所有还是可以接收被动方发送的数据。

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

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

相关文章

C++11 数据结构5 队列的概念,队列的顺序存储,实现,测试

一,队列的概念 队列是一种特殊的受限制的线性表。 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出的t(First In First Out)的线性表,简称FIF…

请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 请编…

NDK 基础(五)—— C++ 高级特性2

1、左值右值 在 C 中,左值(lvalue)和右值(rvalue)是用于描述表达式的术语,它们与赋值操作和内存中对象的生命周期有关。 **左值(lvalue)**是指可以出现在赋值操作符左侧的表达式&a…

商店数据(九)

目录 65.店铺入驻字段表 66.店铺分类表 67.店铺配置表 68.店铺快递公司关联表 69.店铺资料附加表 70.店铺入驻流程表 71.店铺运费模板表 72.消息类型表 65.店铺入驻字段表 CREATE TABLE wst_bases (id int(11) NOT NULL AUTO_INCREMENT COMMENT 自增id,flowld int(11)…

如何安全进行速卖通自养号测评操作?

对于新加入的卖家而言,进行销量测评显得尤为关键。速卖通平台上的新店往往难以获得活动的扶持,且初始流量相当有限。因此,开店的首要任务便是积极展开测评工作,努力积累初始的评论和销售记录。测评的益处颇为显著,它不…

SpringBoot项目启动,传参有哪些方式?

SpringBoot项目启动,传参有哪些方式? 1.Spring级别的参数 直接在启动 Spring Boot 应用的命令行中使用 -- 后跟参数名和值的方式来传递参数。 记住:一般是对于Spring Boot应用特有的配置参数,确保它们遵循Spring Boot的配置属性命…

【视频打架行为数据集】打斗场景视频数据集简要介绍

一、UBI-Fight(异常事件检测数据集) 介绍 UBI-Fights 数据集是一个独特的全新大型数据集,涉及特定的异常检测并仍然在打斗场景中提供广泛的多样性,该数据集包含 80 小时的视频,在帧级别进行了完全注释。由 1000 个视…

# 从浅入深 学习 SpringCloud 微服务架构(五)Consul(2)

从浅入深 学习 SpringCloud 微服务架构(五)Consul(2) 段子手168 一、consul 集群:consul 集群的基础知识 1、启动 sonsul 服务命令: 以开发者模式快速启动: consul agent -dev -client0.0.0…

13.JAVAEE之HTTP协议

HTTP 最新的版本应该是 HTTP/3.0 目前大规模使用的版本 HTTP/1.1 使用 HTTP 协议的场景 1.浏览器打开网站 (基本上) 2.手机 APP 访问对应的服务器 (大概率) 学习 HTTP 协议, 重点学习 HTTP 的报文格式 前面的 TCP/IP/UDP 和这些不同, HTTP 的报文格式,要分两个部分来看待.请求…

移动端日志采集与分析最佳实践

前言 做为一名移动端开发者,深刻体会日志采集对工程师来说具有重要意义,遇到问题除了 debug 调试就是看日志了,通过看日志可以帮助我们了解应用程序运行状况、优化用户体验、保障数据安全依据,本文将介绍日志采集的重要性、移动端…

高级防爬还得是公众号

平时一天也就1K的流量,最近流量暴涨,已经用自研的WAF防火墙阻挡了很多恶意攻击和爬虫,已经过滤掉很多低级攻击和爬取了。 多出的流量,也仅仅多了一个导航 dh.yu7s.com 用户,多时没有用的机器人爬虫,不封掉浪…

EXCEL表格中的数字,为什么每次打开会自动变成日期?

一、典型现象 在工作中,有时会发现公司里的报表,经过多人多次的重复的使用和修改后,会出现这种情况: 1.在表格里按照需要输入数字,保存工作簿。 2.然而,再次打开工作簿,里面的数字变成日期&a…

c#学习入门2

十、运算符 1)算术运算符是用于数值类型变量计算的运算符,它返回的结果是数值 1.赋值符号 2.算数运算符 加 减- 乘* 除/ 取余% 3.算数运算符的优先级 4.算术运算符的复合运算 5.算术运算符的自增减 2)字符串拼接 1.字符串拼接方式1 注意&…

自定义View-旋转变色圆角三角形的绘制

本文字数:3151字 预计阅读时间:20分钟 在现代设计中,动效图在APP的UI界面中所起到的作用无疑是显著的。相比于静态的界面,动效更符合人类的自然认知体系,它有效地降低了用户的认知负载,UI动效俨然已经成为了…

错误代码126:加载d3dcompiler_43.dll失败,分享多种解决方法

在正常使用电脑的过程中,当我尝试启动并运行一款心仪的游戏时,系统却突然弹出一个令人困扰的错误提示“错误代码126:加载d3dcompiler_43.dll失败”,它会导致游戏无法正常运行。为了解决这个问题,我经过多次尝试和总结,…

VMware ESXi虚拟机备份的方法和步骤

关于虚拟机备份 VMware ESXi 是 VMware vSphere 企业虚拟化套件的核心组件。在版本4.1之前,它一直被称为ESX。ESXi是一种裸机管理程序,直接安装在物理服务器上,它提供对底层资源的直接访问和控制,允许您在单个物理主机上创建和运…

网鼎杯-2018-unfinish解题方法

BUUCTF在线评测这里可以解题无需搭建 进入这题后我们会得到这样一个界面 这里我们会发现登录不进去也没有注册界面以及源码,这里我们需要获取它其他的一些界面找注入机会,这里有两种方式找其他界面,一种是猜这里是登录界面那么必定就会有注册…

网络安全新挑战:通用人工智能(AGI)等级保护指南

通用人工智能(AGI)的发展现状及趋势 随着2023年大语言模型应用的划时代突破,以ChatGPT为杰出代表的此类技术犹如一股洪流,彻底颠覆了人类与机器智能交互的疆界,引领通用人工智能(AGI)步入一个崭…

[SWPUCTF-2022-新生赛]ez_sql

title:[SWPUCTF 2022 新生赛]ez_sql 审题 根据提示,POST传参 得到假的flag 判断类型 字符型注入 判断列数 发现空格和’or’被过滤 重新构造 nss-1/**/oorrder/**/by/**/4#发现为3个字段 采用联合注入union 爆库 发现union被过滤,双写union绕过 发…

【小迪安全2023】第58天:服务攻防-应用协议设备KibanaZabbix远控向日葵VNCTV

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…