TCP三次握手、四次挥手(简易版)

TCP是面向连接的:在真正通讯之前,必须先建立一条通讯线路,必须先完成连接。
TCP完成连接的过程:(保证通讯线路畅通)

建立连接:
   三次握手基本过程
   ①客户端首先向服务器发送一个建立连接的请求,SYN被设置为1,为请求建立连接报文段。
   ②服务器在接收到建立连接的请求后会给客户端回馈消息,传回ACK=1,告诉客户端服务器收到了SYN,防止客户端重传SYN。服务器再向客户端回馈SYN,回馈可以连接。
   ③ 客户端向服务器发送ACK,对SYN的确认。

在这里插入图片描述
   三次握手状态变化
   ①客户端发起连接,将状态设置为SYN_SENT不同状态代表不同阶段
   ②服务器接收到SYN,将ACK,SYN发送出去后处于SYN_RCVD状态,即接收到客户端发送的SYN
   ③当客户端将ACK发送出去并且接收到了ACK,SYN处于已连接(ESTABLISHED)状态
   ④ 当服务收到ACK后,也处于已连接(ESTABLISHED)状态

在这里插入图片描述
问题:为什么是三次握手,不能是两次握手?
1.如果没有最后的一个ACK,则服务器会不断地超时重传ACK/SYN(第二个报文段)
2.若为2次会浪费服务器的资源(SYN溢出攻击或网络环境影响 客户端的SYN会被重传多次)

断开连接:
   四次挥手基本过程
   不分服务器与客户端,因为服务器与客户端都有可能断开,所以我们将其分为主动断开方与被动断开方。
   ①主动断开方向被动断开方发送一个请求断开连接报文FIN。(关闭主动方到被动方的传输通道)
   ②被动方收到FIN后,向主动断开方只回馈一个ACK消息。
   ③ 当过了一段时间以后,被动断开方向主动断开方再发送一个请求断开连接FIN报文。(关闭被动方到主动发的传输通道)
   ④主动断开方接收到FIN向被动断开方再回馈一个ACK,连接断开。

   问题:为什么要进行两次FIN?
   因为为全双工信道,任意时刻双方互相通讯,至少有2条通讯信道,一个FIN只能关一条,所以得有两个FIN。
在这里插入图片描述
   四次挥手状态变化
   ①主动方将FIN发送出去后处于FIN_WAIT_1状态
   ②当被动方接收到FIN并将ACK发出去后处于CLOSE_WAIT(等待关闭)状态
   ③当主动断开方接收到ACK后处于FIN_WAIT_2状态
   ④当被动方将最后一个FIN发出去后处于LAST_ACK(等待最后一个ACK)状态
   ⑤当主动方在收到了FIN并且将ACK发送出去后,处于TIME_WAIT状态
   ⑥当被动方接收到ACK后处于CLOSED状态
   ⑦主动断开方必须再等待一段时间到达CLOSE状态

   TIME_WAIT的意义(存在时间大约是2MSL:MSL为报文段在网络中最大生存时间):
         1.保证迟来的数据能被识别并丢弃
         2.保证可靠的终止TCP连接,防止对后续运行的程序造成影响(TIME_WAIT存在时间内,主动断开方无法用相
         同的IP地址端口号再启动一个网络通讯)

   TIME_WAIT与CLOSE_WAIT的区别:
         CLOSE_WAIT:处于被动断开方,仅仅属于断开过程中的一种状态
         TIME_WAIT:处于主动断开方,是一种特殊的状态

在这里插入图片描述
问题:有没有可能是三次挥手?有可能!
被动断开方的ACK与FIN在一起发向主动断开方,即它们同时断开连接,中间等待时间为0,即为三次挥手。

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

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

相关文章

基于PSO优化的LSTM多输入时序回归预测(Matlab)粒子群优化长短期神经网络时序回归预测

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、 部分代码展示: 四、完整代码数据下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matalb平…

vivado Shift Registers、Dynamic Shift Registers

移位寄存器是一个触发器链,允许数据在固定(静态)数字上传播延迟阶段。相反,在动态移位寄存器中,传播链的长度在电路操作期间动态变化。从“coding”下载编码示例文件示例。 静态移位寄存器元件 静态移位寄存器通常包…

机器学习---HMM前向、后向和维特比算法的计算

1. HMM import numpy as np# In[15]:class HiddenMarkov:def forward(self, Q, V, A, B, O, PI): # 使用前向算法N len(Q) # 状态序列的大小M len(O) # 观测序列的大小alphas np.zeros((N, M)) # alpha值T M # 有几个时刻,有几个观测序列,就有…

Github 2024-02-16 开源项目日报 Top9

根据Github Trendings的统计,今日(2024-02-16统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4TypeScript项目3Rust项目3Jupyter Notebook项目1JavaScript项目1 Black:不妥协的Pytho…

五、DataX源码分析、性能参数优化

DataX源码分析 一、总体流程二、程序入口1.datax.py2.com.alibaba.datax.core.Engine.java3.切分的逻辑并发数的确认 3.调度3.1 确定组数和分组算法3.2 数据传输 三、DataX性能优化1.关键参数2.优化:提升每个 channel 的速度3.优化:提升 DataX Job 内 Ch…

npm使用国内淘宝镜像(最新地址)

目录 前言 一、命令配置 二、使用cnpm安装 三、常见包地址 四、总结 往期回顾 前言 我们前端程序员在使用国外的镜像源速度很慢并且容易下载失败,有时候需要尝试多次才有可能下载成功,很麻烦,但是可以切换为国内镜像源,下…

【Java多线程】Thread类的基本用法

目录 Thread类 1、创建线程 1.1、继承 Thread,重写run 1.2、实现 Runnable,重写run 1.3、使用匿名内部类,继承 Thread,重写run 1.4、使用匿名内部类,实现 Runnable,重写run 1.5、使用 lambda 表达式…

基于四叉树的图像分割算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ........................................................... Imgs(dx 1 : dx R1, dy 1 …

搜索专项---双端队列广搜模型

文章目录 电路维修 一、电路维修OJ链接 本题思路: #include <bits/stdc.h>#define x first #define y secondtypedef std::pair<int,int> PII;constexpr int N510;int n,m; char g[N][N]; int dist[N][N]; bool st[N][N]; std::deque<PII> dq;char cs[] &q…

vscode运行C/C++时候cmd.exe界面显示

写了一些命令行传参的程序&#xff0c;需要终端输入参数&#xff0c;默认是输出结果显示在它自己的终端界面 Code-runner: Run In Terminal 打勾就行 效果&#xff1a;

机器学习2---逻辑回归(基础准备)

逻辑回归是基于线性回归是直线分的也可以做多分类 ## 数学基础 import numpy as np np.pi # 三角函数 np.sin() np.cos() np.tan() # 指数 y3**x # 对数 np.log10(10) np.log2(2) np.e np.log(np.e) #ln(e)# 对数运算 # log(AB) log(A) logB np.log(3*4)np.log(3)np.log(4) #…

【AIGC】Stable Diffusion的采样器入门

在 Stable Diffusion 中&#xff0c;采样器&#xff08;Sampler&#xff09;是指用于生成图像的一种技术或方法&#xff0c;它决定了模型如何从潜在空间中抽样并生成图像。采样器在生成图像的过程中起着重要作用&#xff0c;影响着生成图像的多样性、质量和创造性。以下是对 St…