****三次握手和四次挥手

一、三次握手

1.简要描述TCP三次握手的过程

第一次握手,客户端发送SYN到服务器;
第二次握手,服务器收到SYN包,回复一个SYN+ACK包;
第三次握手,客户端收到服务器的SYN+ACK包后,回复一个ACK,完成三次握手。

2.为什么TCP连接需要三次握手,2次不行吗?

三次握手可以确保双方都能够发送和接收数据,防止因网络延迟导致的问题。两次握手可能会导致服务器资源被浪费。

3.在TCP三次握手中,客户端和服务器分别扮演什么角色?

客户端发送连接请求,服务器接收并回复确认。

4.在TCP连接过程中,客户端发送SYN包丢失了,会发生什么情况?

服务器会超时等待,然后重新发送SYN+ACK包,进行连接。

5.三次握手的各个状态

一开始,建立连接之前服务器和客户端的状态都为CLOSED
服务器创建socket后开始监听,变为LISTEN状态;
客户端请求建立连接,向服务器发送SYN报文,客户端的状态变味SYN_SENT
服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD
然后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED
服务器端收到客户端的ACK后变为ESTABLISHED。此时3次握手完成,连接建立!

二、四次挥手

1.简要描述四次挥手的过程

第一次挥手,客户端发送FIN到服务器;
第二次挥手,服务器收到FIN包,回复一个ACK
第三次挥手,服务器发送FIN到客户端;
第四次挥手,客户端收到FIN包,回复一个ACK,完成四次挥手。

2.为什么TCP连接需要四次挥手,不能三次挥手吗?

四次挥手是为了确保双方都能够完全关闭连接,防止因网络延迟导致的数据丢失或重发问题。

3.如果TCP连接过程中,服务器收到客户端FIN包立即回复ACK包,会发生什么?

客户端可能还有数据需要发送,服务器需要等待客户端发送完数据后再发送FIN包,进行关闭连接

4.为什么创建连接是三次握手,断开连接是四次挥手?

在TCP/IP协议中,四次挥手是终止TCP连接的标准过程,它确保了双方都能正确地关闭连接并释放资源。如果在内网传输中试图减少这一过程到三次挥手,可能会导致连接状态不一致或其他未定义的行为,从而影响数据传输的可靠性和稳定性。TCP在建立连接时要进行三次握手,在断开连接时要进行四次挥手,这是由于TCP的半关闭造成的。因为TCP 连接是全双工的(即数据可在两个方向上同时传递),所以在进行关闭时对每个方向都要单独进行关闭,这种单方向的关闭叫作半关闭。在一方完成它的数据发送任务时,就发送一个FIN来向另一方通告将要终止这个方向的连接。

5.四次挥手的各个状态

客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1
服务器收到FIN后向客户端发送ACK,服务器的状态变为CLOSE_WAIT
客户端收到ACK后就进入FIN_WAIT2状态,此时连接已经断开了一半了。如果服务器还有数据要发送给客户端,就会继续发送;
直到发完数据,就会发送FIN报文,此时服务器进入LAST_ACK状态;
客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态;
再过了2MSL长的时间后进入CLOSED状态。服务器收到客户端的ACK就进入CLOSED状态。
至此,还有一个状态没有出来:CLOSING状态。
CLOSING状态表示: 客户端发送了FIN,但是没有收到服务器的ACK,却收到了服务器的FIN,这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外。

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

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

相关文章

C++ 使用 nlohmann/json 库

C常用 json 库有: Jsoncpp boost ison Qt Json (不推荐使用) nlohman::json (推荐使用) 其中Qt中json解析的相关类只在qt中有用,为了避免以后不用qt无法解析json,建议使用nlohmann/json,适用于任何C框架。 1. 简介 nlohmann是一…

【vueCms】vueCms后台管理系统安装问题集合

开源项目地址: https://www.vuecms.cn/ 开源代码地址: https://gitee.com/derekgo/vue-cms_xg 问题一 如果出现提示少了个index.html。如下图 解决办法: 重新安装前端(vue3_vite)项目依赖 问题二 npm版本高无法解析依赖树导致依赖下载失败 解决方案: npm install --legacy…

Vue.use的实现原理

一、Vue.use 是做什么的? use 概念 如果你希望编写一个 Vue.js 插件来扩展应用的功能,需要提供一个 install 方法。如果插件是一个对象,那么这个对象必须包含 install 方法;如果插件是一个函数,那么这个函数将被作为 …

【Flask-app.py运行】已解决Cannot run program “D:\APP\python\python.exe”

文章目录 一、问题描述二、解决方法 一、问题描述 Cannot run program “D:\APP\python\python.exe” (in directory “F:\Codes\竞赛\大计赛\group\code\web\web”): CreateProcess error2, 系统找不到指定的文件。 这段报错源于运行 flask 项目的 app.py 时报错找不到程序&…

C++ | Leetcode C++题解之第119题杨辉三角II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> getRow(int rowIndex) {vector<int> row(rowIndex 1);row[0] 1;for (int i 1; i < rowIndex; i) {row[i] 1LL * row[i - 1] * (rowIndex - i 1) / i;}return row;} };

SNCScan:针对SAP安全网络通信(SNC)的安全分析与评估工具

关于SNCScan SNCScan是一款针对SAP安全网络通信&#xff08;SNC&#xff09;的安全分析与评估工具&#xff0c;该工具旨在帮助广大研究人员分析SAP安全网络通信&#xff08;SNC&#xff09;&#xff0c;并分析和检测SNC配置与SAP组件中的潜在问题。 SNC系统参数 SNC基础 SAP协…

flutter sdk升级之空安全启用

公司项目flutter sdk需要从2.5升级到3.7。由于项目不支持空安全&#xff0c;所以升级sdk之前要做的第一件事就是启用空安全。以下为空安全适配过程记录。 启用空安全 将dart sdk设置成sdk: ">2.12.0 <3.0.0"&#xff0c;即可启用。代码如下&#xff1a; envi…

面向Java程序员的Go工程开发入门流程

对于一个像我这样没有go背景的java程序员来说&#xff0c;使用go开发一个可用的程序的速度是肉眼可见的缓慢。 其难点不在于go语言本身&#xff0c;而是搭建整个工程链路的过程&#xff0c;即所谓的“配环境”。 本文主要讲述如何配出一个适合go开发的环境&#xff0c;以免有同…

未来工厂新篇章:大型工厂3D可视化技术引领工业新潮流

在科技日新月异的今天&#xff0c;大型工厂不再是我们印象中机器轰鸣、尘土飞扬的钢铁丛林&#xff0c;而是变成了智慧与效率并存的现代化生产中心。这一切的改变&#xff0c;都离不开一项革命性的技术——3D可视化。 一、何为大型工厂3D可视化&#xff1f; 大型工厂3D可视化&…

MATLAB函数模块光显示zeros/poles怎么办?

出现下面这种图了怎么办&#xff1f;是做错了吗&#xff1f; 这种图就是它显示不完整了&#xff0c;把它拉大点就可以完全显示了。

K8s Ingress 详解

文章目录 K8s Ingress 详解Ingress 资源清单Ingress 基于URL 实现路由Ingress 基于名称虚拟主机Ingress 实现HTTPS创建TLS 证书创建Secrets配置ingress Ingress RewriteIngress 灰度发布Ingress 配置认证 K8s Ingress 详解 Ingress 资源清单 apiVersion: networking.k8s.io/v…

ubuntu22 部署nacos集群

#nacos集群 至少需要启动三个nacos &#xff08;这里我只有俩台虚拟机&#xff0c;故在一台上启动了俩个nacos服务&#xff09; https://github.com/alibaba/nacos/releases #下载编译后压缩包 nacos-server-$version.tar.gz cd /usr/local tar -zxvf nacos-server-2.3.2.tar.…

mysql 查询指定id的所有下级数据

为了查询指定ID所有下级数据&#xff0c;你可以使用递归的公用表表达式&#xff08;Common Table Expressions, CTEs&#xff09;。以下是一个例子&#xff0c;假设你有一个名为categories的表&#xff0c;它有id和parent_id字段&#xff0c;parent_id表示父级分类的ID。 WITH…

2024年人文发展与社会科学国际会议(ICHDSS 2024)

2024年人文发展与社会科学国际会议 2024 International Conference on Humanities Development and Social Sciences 【1】会议简介 2024年人文发展与社会科学国际会议是一个汇集全球人文科学和社会科学领域专家学者的盛会。本次会议旨在深入探讨人文发展的多元性、复杂性以及社…

如何查看本地sql server数据库的ip地址

程序连线SQL数据库&#xff0c;需要SQL Server实例的名称或网络地址。 1.查询语句 DECLARE ipAddress VARCHAR(100) SELECT ipAddress local_net_address FROM sys.dm_exec_connections WHERE SESSION_ID SPID SELECT ipAddress As [IP Address]SELECT CONNECTIONPROPERTY(…

SOLIDWORKS参数化开发 慧德敏学

传统的设计模式下大规模定制型产品结构设计周期长&#xff0c;问题多&#xff0c;以及大量重复性工作让工程师疲于应对&#xff0c;这些严重阻碍了公司订单承接能力和技术创新能力&#xff0c;难以响应市场需求。 什么是参数化设计&#xff1f; 1、它是一种设计的方式&#x…

科研项目书写作学习(持续更新中...)

写好一个科研项目书也是科研中很重要的一部分&#xff0c;所以借这篇博客做一个积累。还是以模块化的方式吧&#xff0c;后面慢慢那再整合逻辑。可能写的也不是很好&#xff0c;慢慢提升吧~ 背景 科研项目书的背景怎么写&#xff1f;首先要突出问题的价值(也就是做此研究的动…

华为设备RIP基础路由实验

华为设备RIP基础路由实验 实验拓扑&#xff1a; RIP&#xff1a;距离矢量的动态路由&#xff0c;路由通信有方向&#xff0c;度量值metric取值范围&#xff08;1-16&#xff09;16表示目标主机不可达。 路由的版本分为&#xff1a;RIPV1&#xff08;广播通信目标地址是255.255…

pytorch学习day2

1 数据加载Dataset PyTorch的数据读取机制主要依赖于Dataset和DataLoader这两个核心组件。它们用于加载和处理数据&#xff0c;以便在训练模型时进行高效的数据流动和处理。 Dataset Dataset是一个抽象类&#xff0c;用户可以继承这个类并重载以下两个方法来创建自定义的数据集…

吴恩达深度学习个人笔记

1. 上一个视频提到的房地产领域,我们不就使用了一个普遍标准神经网络架构吗 而对于图像识别处理问题,我们则要使用卷积神经网络(Convolution Neural Network),即CNN。 对于序列数据,例如音频,有一个时间组件,随着时间的推移,音频被播放出来, 所以音频是最自然的表…