TCP和UDP相关问题(重点)(5)——5.TCP三次握手和四次挥手(非常重要)

news2024/9/24 11:21:18

5.1三次握手的过程

  • 一次握手:客户端发送带有SYN(x)标志的数据包到服务端,然后客户端进入SYN_SEND状态,等待服务器端的确认。

  • 二次握手:服务端发送带有SYN(y)+ACK(x+1)标志的数据包到客户端,然后服务端进入SYN_RECV状态。

  • 三次握手:客户端发送带有ACK(y+1)标志的数据包到服务端,然后服务端和客户端都进入已建立状态,完成TCP三次握手。

 

5.2为什么要三次握手?

因为要确保可靠的连接,三次握手的目的就是保证双方都互相知道对方的发送和接收是正常的。四次没必要,多余了,而两次不够,因为两次无法让服务器知道自己的发送和对方的接收是否正常。

第一次握手后,服务端能知道客户端的发送和自己的接收是正常的,第二次握手后,客户端能知道自己的发送和接收是正常的,服务端的发送和接收是正常的,而经过第三次握手后,服务器才会知道自己的发送和客户端的接收是正常的。所以三次握手就能保证双方都知道对方的发送和接收功能都正常。

5.3第二次握手服务端传回了ACK,为什么还要传回SYN?

是为了客户端发出的第三次握手做准备,服务端在第二次握手中传回了ACK(x+1),服务端就表明了我收到你客户端的第一次握手的信息了。而传回的SYN,为的就是让客户端在第三次握手时发出ACK确认报文,表明我客户端也收到你服务端发送的第二次握手的信息了,总的来说就是为了确保双方的可靠连接。

5.4四次挥手的过程

  • 第一次挥手:客户端发送一个FIN(x)标志的数据包到服务端,请求关闭客户端到服务端的数据传送。然后客户端进入FIN-WAIT-1状态。

  • 第二次挥手:服务端发送一个ACK(x+1)标志的数据包到客户端,然后服务端进入到CLOSE-WAIT状态,客户端进入FIN-WAIT-2状态。

  • 第三次挥手:服务端发送一个FIN(y)标志的数据包到客户端,请求关闭服务端到客户端的连接,然后服务端进入LAST-ACK状态。

  • 第四次挥手:客户端发送一个ACK(y+1)标志的数据包到服务端,然后客户端进入到TIME-WAIT状态,服务端在收到客户端ACK确认数据包后进入CLOSE状态。此时如果客户端等待了2MSL(是报文段的最长寿命,MSL时间是不确定的,取决于操作系统)后没有收到服务器端的任何回复,那就说明服务端已正常关闭,随后客户端就可以关闭连接了,客户端进入CLOSED状态。

注意:只要四次挥手没有结束,客户端和服务端就可以继续传输数据!

5.5为什么要四次挥手?

同一问题:为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?

因为服务器收到客户端要断开连接的第一次挥手请求时,可能还有一些数据没有发完,这时服务端先回复ACK报文,表明我服务端接收到了你断开连接的请求,等到服务端的数据发送完后再发送一个FIN报文段,表示请求断开服务端到客户端的数据传送。

5.6如果第二次挥手时服务器的 ACK 没有送达客户端,会怎样?

客户端如果没有收到ACK确认,客户端会重新发送FIN请求。

5.7为什么第四次挥手后客户端需要等待 2MSL时间后才进入 CLOSED 状态?

因为客户端也要确保服务端成功接收到了自己发送的第四次挥手的ACK确认报文,如果服务端没有接收到的话,那么服务端就要重新发送FIN报文,这时客户端就要时刻准备着重发ACK,不然服务端会一直重发FIN报文。如果从开始就一切顺利的话,客户端到最后等了2MSL,都没有再次收到服务端发送的FIN,那么客户端就会推断ACK已经被服务端成功接收了,才会进入CLOSED状态,关闭TCP连接。

 

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

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

相关文章

SCI 1区论文:Segment anything in medical images(MedSAM)[文献阅读]

基本信息 标题:Segment anything in medical images中文标题:分割一切医学图像发表年份: 2024年1月期刊/会议: Nature Communications分区: SCI 1区IF:16.6作者: Jun Ma; Bo Wang(一作;通讯)单位:加拿大多…

负载均衡(3)

文章目录 一、HAProxy介绍企业版社区版版本对比HAProxy功能支持功能不具备的功能 二、编译安装HAProxy解决lua环境Centos 基础环境 编译安装HAProxy验证HAProxy版本HAProxy启动脚本配置文件启动haproxy验证haproxy状态查看haproxy的状态页面 三、HAProxy基础配置详解global配置…

SSH口令问题

SSH(Secure Shell)是目前较可靠、专为远程登录会话和其他网络服务提供 安全性的协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全。 SSH口令长度太短或者复杂度不够,如仅包含数字或仅包含字母等时&#xf…

正版软件 - Proxyman:让网络调试变得更智能、更高效

在软件开发的世界里,网络调试一直是开发者和测试工程师的痛点。传统的调试工具往往操作复杂,界面不够直观,而且性能上也难以满足现代应用的需求。今天,我要向大家介绍一款名为Proxyman的网络调试工具,它以其简洁的界面…

项目02《游戏-12-开发》Unity3D

基于 项目02《游戏-11-开发》Unity3D , 人物:实现场景怪物自动巡航 , 首先在场景中创建小球命名为路径点WayPoint0, 取消小球的碰撞器Collider, 再复制两个改名为WayPoint1 和 WayPoint2 , 在…

懒人精灵 之 Lua 捕获 json解析异常 ,造成的脚本停止.

Time: 2024年2月8日20:21:17 by:MemoryErHero 1 异常代码 Expected value but found T_END at character 12 异常代码 Expected value but found T_OBJ_END at character 223 处理方案 - 正确 json 示范 while true do--Expected value but found T_END at character 1--Ex…

【数据分享】1929-2023年全球站点的逐日平均风速数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全球气象站…

Java毕业设计-基于ssm的仓库管理系统-第76期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的游泳馆管理系统:前端jsp、jquery、bootstrap,后端 springmvc、spring、mybatis,集成游泳课程报名、游泳卡在线售卖、购物车、…

c++设计模式之装饰器模式

作用 为现有类增加功能 案例说明 class Car { public:virtual void show()0; };class Bmw:public Car { public:void show(){cout<<"宝马汽车>>"<<endl;} };class Audi:public Car { public:void show(){cout<<"奥迪汽车>>&q…

【数据分享】1929-2023年全球站点的逐日平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全…

05 06 Verilog基础语法与应用讲解

05. 1. 位操作 计数器实验升级&#xff0c;设计8个LED灯以每个0.5s的速率循环闪烁&#xff08;跑马灯&#xff09; 1.1 方法1&#xff1a;使用移位操作符<<来控制led灯的循环亮灭 设计代码 Verilog中&#xff0c;判断操作的时候不加位宽限定是可以的&#xff0c;比如i…

【Flink入门修炼】1-3 Flink WordCount 入门实现

本篇文章将带大家运行 Flink 最简单的程序 WordCount。先实践后理论&#xff0c;对其基本输入输出、编程代码有初步了解&#xff0c;后续篇章再对 Flink 的各种概念和架构进行介绍。 下面将从创建项目开始&#xff0c;介绍如何创建出一个 Flink 项目&#xff1b;然后从 DataStr…

pwn学习笔记(1)前置基础

pwn学习笔记&#xff08;1&#xff09; &#xff08;1&#xff09;pwn简介&#xff1a; ​ 以下来自于百度百科&#xff1a;”Pwn”是一个黑客语法的俚语词&#xff0c;是指攻破设备或者系统发音类似“砰”&#xff0c;对黑客而言&#xff0c;这就是成功实施黑客攻击的声音—…

【开源】SpringBoot框架开发医院门诊预约挂号系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2 科室医生档案模块2.1.3 预约挂号模块2.1.4 医院时政模块 2.2 可行性分析2.2.1 可靠性2.2.2 易用性2.2.3 维护性 三、数据库设计3.1 用户表3.2 科室档案表3.3 医生档案表3.4 医生放号…

【前端素材】bootstrap4实现绿色植物Lukani平台

一、需求分析 绿色植物商城是一个专门销售绿色植物的零售商店或在线平台。它提供各种类型和品种的室内植物、室外植物和盆栽等。绿色植物商城的作用可以从以下几个方面来分析&#xff1a; 1. 提供多样化的选择&#xff1a;绿色植物商城通常会提供各种各样的绿色植物选项&…

.NET Core 实现 JWT 认证

写在前面 JWT&#xff08;JSON Web Token&#xff09;是一种开放标准, 由三部分组成&#xff0c;分别是Header、Payload和Signature&#xff0c;它以 JSON 对象的方式在各方之间安全地传输信息。通俗的说&#xff0c;就是通过数字签名算法生产一个字符串&#xff0c;然后在网络…

『运维备忘录』之 Kubernetes(K8S) 常用命令速查

一、简介 kubernetes&#xff0c;简称K8s&#xff0c;是用8代替名字中间的8个字符“ubernete”而成的缩写&#xff0c;是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用。kubernetes是基于容器技术的分布式架构解决方案&#xff0c;具有完备的集群管理能力&a…

UDP端口探活的那些细节

一 背景 商业客户反馈用categraf的net_response插件配置了udp探测, 遇到报错了&#xff0c;如图 udp是无连接的&#xff0c;无法用建立连接的形式判断端口。 插件最初的设计是需要配置udp的发送字符&#xff0c;并且配置期望返回的字符串&#xff0c; [[instances]] targets…

【PyTorch][chapter 14][李宏毅深度学习][Word Embedding]

前言&#xff1a; 这是用于自然语言处理中数据降维的一种方案。 我们希望用一个向量来表示每一个单词. 有不同的方案 目录&#xff1a; one-hot Encoding word-class 词的上下文表示 count-based perdition-based CBOW Skip-Gram word Embedding 词向量相似…

数据结构(C语言)代码实现(八)——顺序栈实现数值转换行编辑程序汉诺塔

目录 参考资料 顺序栈的实现 头文件SqStack.h&#xff08;顺序栈函数声明&#xff09; 源文件SqStack.cpp&#xff08;顺序栈函数实现&#xff09; 顺序栈的三个应用 数值转换 行编辑程序 顺序栈的实现测试 栈与递归的实现&#xff08;以汉诺塔为例&#xff09; 参考资…