TCP 三次握手四次挥手

embedded/2024/12/19 17:15:50/

目录

TCP 三次握手四次挥手

一、TCP基础

二、TCP数据报结构

三、名词术语

四、TCP的三次握手

✍️过 程描述:

举例说明:

总结:

思考 🤔 :

五、TCP的四次挥手

✍️ 过 程描述:

☕️ 川 航图举例:

思考 🤔:



TCP 三次握手四次挥手

一、TCP基础


1、TCP (Transmission Control Protocol,传输控制协议) 是一种面向连接、可靠
的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接
2、客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目
的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道
3、TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)


二、TCP数据报结构

1 序号:Seq(Sequence Number)序号占32位,用来标识从计算机A发送到计算
机B的数据包的序号,计算机发送数据时对此进行标记。
2确认号:Ack(Acknowledge Number)确认号占32位,客户端和服务器端都可
以发送,Ack = Seq + 1。
3标志位:每个标志位占用1Bit,共有6个,分别为 URG、ACK、PSH、RST、
SYN、FIN,具体含义如下:
URG:紧急指针(urgent pointer)有效
ACK:确认序号有效
PSH:接收方应该尽快将这个报文交给应用层
RST:重置连接
SYN:建立一个新连接
FIN:断开一个连接

三、名词术语


IP+端口=套接字 (Socket)
SYN (Synchronzation) 同步
ACK (Acknowledgment) 确认
FIN (Finish)结束


四、TCP的三次握手


✍️过 程描述:


1. 首先 
Client 端发送请求报文
2. Server  段接受连接后回复  ACK  报文,并为这次连接分配资源
3. Client  端接收到 ACK 报文后也向  Server  端发送  ACK 报文,并分配资源,这样TCP连接就建立了

举例说明:

在中国机长中机长与控制中心的交流就是一个简单的TCP三次握手
1. 四川8633请求建立连接(SYN),并且发送出序号
2. 服务端接受到信号,即有确认号(ACK),此时并同样返回请求序号Seq
3. 客户端接受到信号,即有确认号(ACK),连接已经建立

总结:


三次握手的关键是要确认对方收到了自己的数据包 ,这个目标就是通过“确认号(Ack)”字段实现
的。计算机会记录下自己发送的数据包序号Seq,待收到对方的数据包后,检测“确认号(Ack)”字
段, 看 Ack = Seq + 1 是否成立,如果成立说明对方正确收到了自己的数据包  。

思考 🤔 :

为什么需要第三次通信,两次建立连接后直接进行通信不可以吗?
1、在第一次通信过程中,A向B发送信息之后,B收到信息后可以确认自己的收信能力和A的发信
能力没有问题。
2、在第二次通信中,B向A发送信息之后,A可以确认自己的发信能力和B的收信能力没有问题,
但是B不知道自己的发信能力到底如何,所以就需要第三次通信。
3、在第三次通信中,A向B发送信息之后,B就可以确认自己的发信能力没有问题。
4、 小结:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已
准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

五、TCP的四次挥手

建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资
源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资
源,如果并发量高,服务器压力堪忧

✍️ 过 程描述:


第一次挥手 👋 : Clien发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态
第二次挥手 👋 :Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态
第三次挥手 👋 :Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态
第四次挥手 👋 :Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,Server进入
CLOSED状态,完成四次握手

☕️ 川 航图举例:


1客户端申请断开连接即FIN (我这边准备断开连接了)
● 2服务端接收信息返回,表示我已经接收到 (收到,请稍等,我这边准备一
下)
● 3服务端发送信息表示可以断开连接 (我准备好了,你可以断开连接了)
● 4客户端接受信息,同时返回信息通知服务端自己收到信息,开始断开 连接
(好的,拜拜!)

数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状
态,然后客户端主动关闭,服务器被动关闭。

通俗的来讲此连接过程:
三次握手
1. 客户端:我想发送请求
2. 服务端:好的,我知道你要发送请求了,同意发送
3. 客户端:好的,我知道你同意了,那我开始发送了
...
四次挥手
1. 客户端:我不需要请求了,可以关闭连接了
2. 服务端:好的,我知道你要关闭了
3. 服务端:我发送完成了,可以关闭了
4. 客户端:好的,我知道你发送完成了,确认关闭

思考 🤔:

为什么连接的时候是三次握手 🤝 ,关闭的时候却是四次挥手?
1.因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其
中ACK报文是用来应答的,SYN报文是用来同步的
2.但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只
能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”



3.只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。
故需要四步握手。
TCP的三次握手一定能保证传输可靠吗?  
不 能 
三次握手比两次更可靠,但也不是完全可靠,而追加更多次握手也不能使连接更可靠了。因此
选择了三次握手。
世界上不存在完全可靠的通信协议。从通信时间成本空间成本以及可靠度来讲,选择了“三次
握手”作为点对点通信的一般规则


http://www.ppmy.cn/embedded/147074.html

相关文章

本机(Windows)和服务器(Linux)之间传输文件的命令

在本机上打开命令行(按 win R 键后输入CMD并回车)根据需求运行以下命令即可。 将本机文件上传至服务器的命令: scp -P 端口号 "D:\test\1.txt" rooti-2.gpushare.com:/hy-tmp/datasets 功能为将D盘根目录下test文件夹中的1.txt…

【Unity/HFSM】使用UnityHFSM实现输入缓冲(预输入)和打断机制

文章目录 前言预输入Animancer的InputBuffer:在UnityHFSM中实现InputBuffer: 打断机制 前言 参考Animancer在状态机中的InputBuffer,在UnityHFSM中实现类似的InputBuffer机制,同时扩展一个状态打断机制 插件介绍: A…

fastAPI接口(普通流式响应和大模型流式响应)

1. 流式输出和非流失输出: 大模型的流式输出(Streaming Output)和非流式输出(Non-streaming Output)是指在生成文本或其他输出时,如何将结果返回给用户或下游系统。 流式输出 (Streaming Output)&#xf…

[C++]C++工具之对异常情况的处理(throw、catch、try)以及用命名空间避免同名冲突

一、C 异常处理😊 1.1 定义 C 中的异常处理用于应对程序运行中的异常情况(如除零、数组越界等),通过 try-catch 机制捕获和处理错误,防止程序崩溃。 异常是程序运行时意外发生的事件,可以通过抛出&#xf…

ruoyi-nbcio的vue项目中控制台报出[vue-router] Duplicate named routes definition错误

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbci…

期末复习-数据库原理(全英教材)

目录 第二章:关系模型 1.Candidate key 2.superKey 3.关系代数表达式 选择(Selection): 投影(Projection): 自然连接(Natural Join): 笛卡尔积(Cartesian Product&#xff09…

linux上vlc安装

方式一:linux可以连外网的 直接使用命令 sudo snap install vlc方式二:linux连不上外网的 我是在虚拟机中下载的,不太好连接外网,可以直接在Ubuntu Software 中进行搜索下载

【现代服务端架构】传统服务器 对比 Serverless

在现代开发中,选择合适的架构是至关重要的。两种非常常见的架构模式分别是 传统服务器架构 和 Serverless。它们各有优缺点,适合不同的应用场景。今天,我就带大家一起对比这两种架构,看看它们的差异,并且帮助你选择最适…