TCP常见问题

文章目录

      • 一、两种状态图
      • 二、常见问题
        • 1、MSL是什么
      • 3、为何等待2MSL
      • 3、为何三次握手,不握手、握手一次、两次行吗
      • 4、为何四次挥手,三次行吗,两次行吗

一、两种状态图

在这里插入图片描述

四次挥手

在这里插入图片描述

二、常见问题

1、MSL是什么

MSL是Maximum Segment Lifetime的英文缩写,可译为“最长报文段寿命”,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

3、为何等待2MSL

为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在 LAST-ACK 状态的服务器收不到对 FIN-ACK 的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。即:
保证客户端发送的最后一个ACK报文段能够到达服务端。

这个ACK报文段有可能丢失,使得处于 LAST-ACK 状态的B收不到对已发送的 FIN+ACK 报文段的确认,服务端超时重传 FIN+ACK 报文段,而客户端能在2MSL时间内收到这个重传的FIN+ACK 报文段,接着客户端重传一次确认,重新启动2MSL计时器,最后客户端和服务端都进入到 CLOSED 状态,若客户端在 TIME-WAIT 状态不等待一段时间,而是发送完ACK报文段后立即释放连接,则无法收到服务端重传的 FIN+ACK 报文段,所以不会再发送一次确认报文段,则服务端无法正常进入到 CLOSED 状态。

(2)防止“已失效的连接请求报文段”出现在本连接中。

客户端在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生 的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。

3、为何三次握手,不握手、握手一次、两次行吗

1、无法确保双方通信能力
在三次握手过程中,客户端和服务器都发送和接收了数据包,以此来确认彼此具备发送和接收数据的能力。如果缺少握手步骤,服务器可能无法确认客户端的接收能力,这可能导致通信过程中的数据丢失或错误.
2、可能导致过期连接请求被接受
网络中数据包可能因网络拥塞、路由错误等原因延迟到达 。若只有两次握手,客户端可能因等待服务器响应超时而重发连接请求,服务器可能会接收到多个连接请求,导致资源浪费和数据混乱。而三次握手的第三次握手可以避免这种情况,确保双方确认通信状态是新的,而非旧连接.
3、难以同步初始序列号
三次握手过程中,客户端和服务器会交换彼此的初始序列号,该序列号在后续数据传输中用于确保数据的顺序性和完整性。若缺少第三次握手,可能无法正确地同步这些序列号,从而影响数据的可靠传输.
4、容易出现半开连接状态
只进行两次握手,可能会导致半开连接状态的出现,即一端已经准备好发送数据,但另一端却没有确认连接建立。这种状态可能会导致资源浪费或者连接泄漏。而第三次握手可以确保双方都已经确认了连接的建立,避免了半开连接状态的出现.
5、存在安全隐患
减少握手次数会增加遭受攻击的风险,例如 SYN 洪泛攻击。攻击者可能会发送大量伪造的 SYN 请求,导致服务器建立大量半连接,消耗服务器资源,甚至使服务器瘫痪.

4、为何四次挥手,三次行吗,两次行吗

1、为什么三次挥手不太合适
在 TCP 连接关闭过程中,需要考虑到双向的数据传输通道。假设客户端(A)和服务器(B)之间有数据传输,当 A 想要关闭连接时,A 发送一个 FIN(结束标志)给 B,此时 A 到 B 这个方向的数据传输通道 A 认为可以关闭了,这是第一次挥手。
B 收到 FIN 后,会回复一个 ACK(确认标志)给 A,这表示 B 已经收到了 A 的关闭请求,此时这个 ACK 只是确认了 A 到 B 方向的通道关闭请求,这是第二次挥手。但是 B 可能还有数据要发送给 A,所以不能直接关闭 B 到 A 方向的通道。
只有当 B 发送完自己的数据后,B 再发送一个 FIN 给 A,这是第三次挥手,表示 B 到 A 这个方向的数据传输通道也可以关闭了。
最后 A 收到 FIN 后,回复一个 ACK 给 B,这是第四次挥手,确认 B 到 A 方向的通道关闭。
如果只有三次挥手,就可能出现 B 还有数据没发送完,但是连接却被强制关闭的情况,导致数据丢失。
2、两次挥手存在的问题
如果只有两次挥手,当 A 发送 FIN 给 B 后,B 回复 ACK,然后直接关闭连接。这就完全没有考虑 B 到 A 方向的数据传输情况。
例如,B 可能还有大量的数据正在发送给 A 的途中,或者 B 还没来得及处理 A 的关闭请求(比如 B 的接收缓冲区还有数据没处理完),这种情况下直接关闭连接会导致数据丢失、数据不完整等问题。
而且从网络状态的维护角度来看,两次挥手不能准确地告知双方两个方向的连接都已经妥善处理完毕,会使得网络状态变得混乱,不利于网络资源的合理回收和再利用。

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

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

相关文章

UG NX二次开发(C#)-机电概念设计-UIStyler中selection块选择信号等对象的过滤器设置

文章目录 1、前言2、创建机电概念设计的模型3、创建UIStyler4、在VS2022中创建NXOPEN CSHAP的工程5、设置信号与信号适配体的过滤器6、测试选择的对象1、前言 在UG NX二次开发过程中,经常会用到UIStyler中的Selection块,即是选择对象,选择对象由于其可以选择多种类型的对象…

线程知识总结(二)

本篇文章以线程同步的相关内容为主。线程的同步机制主要用来解决线程安全问题,主要方式有同步代码块、同步方法等。首先来了解何为线程安全问题。 1、线程安全问题 卖票示例,4 个窗口卖 100 张票: class Ticket implements Runnable {priv…

es 开启slowlog

在 Elasticsearch 中,slowlog(慢日志)是用来记录查询和索引操作的性能数据,帮助你诊断性能瓶颈。你可以为查询 (search slowlog) 和索引 (index slowlog) 配置慢日志。 数据准备 POST /products/_doc/1 {"product_name&quo…

前端yarn工具打包时网络连接问题排查与解决

最近线上前端打包时提示 “There appears to be trouble with your network connection”,以此文档记录下排查过程。 前端打包方式 docker启动临时容器打包,命令如下 docker run --rm -w /app -v pwd:/app alpine-node-common:v16.20-pro sh -c "…

【YOLO 项目实战】(10)YOLO8 环境配置与推理检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】(1)YOLO5 环境配置与检测 【YOLO 项目实战】(10)YOLO8 环境配置与推理检测 【YOLO5 项目实战】(10)YOLO8 环境…

【蓝桥杯】43699-四平方和

四平方和 题目描述 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。 比如: 502021222 712121222; 对于一个给定的正整数,可…

【5G】5G 无线协议 Radio Protocols(一)

长期演进(LTE)无线电协议主要设计用于通过扁平架构提供PS服务,相比之前的代际,这代表了一个重大改进,它消除了支持电路交换(CS)服务和复杂架构中固有的复杂性。许多原始的LTE原则自第8版以来一直…

VMware ubuntu虚拟机网络配置

首先分清2个情况: 1、在使用笔记本时,WiFi联网使用时,使用的是无线网卡设备上网的。 2、无论是笔记本还是台式机,当接插网线上网时,使用的是以太网卡设备上网的。 以Windows11为例: (1&#x…

Y3编辑器教程7:界面编辑器

文章目录 一、简介1.1 导航栏1.2 画板1.3 场景界面1.4 控件1.4.1 空节点1.4.2 按钮1.4.3 图片1.4.4 模型1.4.5 文本1.4.6 输入框1.4.7 进度条1.4.8 列表 1.5 元件1.5.1 简介1.5.2 差异说明1.5.3 元件实例的覆盖、还原与禁止操作1.5.4 迷雾控件 1.6 属性1.7 事件(动画…

分享一个把表格类型的数据转换成字符串,以表格样式输出,方便控制台和日志记录时更直观

调用实例&#xff1a; Console.WriteLine("Hello, World!");List<string[]> tabLog new List<string[]>(); tabLog.Add(new string[] { "编号", "姓名", "性别", "年龄","备注" }); tabLog.Add(new…

如何有效修复ffmpeg.dll错误:一站式解决方案指南

当您遇到提示“ffmpeg.dll文件丢失”的错误时&#xff0c;这可能导致相关的应用程序无法启动或运行异常。本文将详细介绍如何有效地解决ffmpeg.dll文件丢失的问题&#xff0c;确保您的应用程序能够恢复正常运行。 ffmpeg.dll是什么&#xff1f;有哪些功能&#xff1f; ffmpeg.…

精通Redis(一)

目录 1.NoSQL 非关系型数据库 2.Redis 3.Redis的java客户端 4.Jedis 4.1Jedis快速入门 4.2Jedis连接池及使用 5.SpringDataRedis和RedisTemplate 1.NoSQL 非关系型数据库 基础篇-02.初始Redis-认识NoSQL_哔哩哔哩_bilibili NoSQL与SQL的区别就在于SQL是结构化的、关联…

Arm Cortex-M处理器对比表

Arm Cortex-M处理器对比表 当前MCU处理器上主要流行RISC-V和ARM处理器&#xff0c;其他的内核相对比较少&#xff1b;在这两种内核中&#xff0c;又以Arm Cortex-M生态环境相对健全&#xff0c;大部分的厂家都在使用ARM的处理器。本文主要介绍Arm Cortex-M各个不同系列的参数对…

前端TypeScript学习day03-TS高级类型

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 TypeScript 高级类型 class 类 class继承? extends implements? 类成员可见性? public? protect…

pyQt5基本需求v1.0

TOC(需求界面) 1.主界面介绍 首先展示项目名称&#xff0c;几个文件上传按钮&#xff0c;滑动条&#xff0c;页面切换按钮&#xff0c;系统时间展示。 2.具体页面demo 2.下期预告 视频页面的各种逻辑展示&#xff0c;大家可以先思考一下

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程 产品介绍 仿东郊到家约玩系统是一种新兴的线上预约&#xff0c;线下社交、陪伴、助娱、助攻、分享、解答、指导等服务模式&#xff0c;范围涉及电竞、运动、音乐…

Android Stduio 2024版本设置前进和后退按钮显示在主界面

Android Studio 2024&#xff08;Ladybug&#xff09;安装后发现前进和后退按钮不显示在主界面的工具栏&#xff0c;且以前在View中设置的办法无效&#xff1a; Android Studio 2024&#xff08;Ladybug&#xff09;的设置方式&#xff1a; File->Settings->Appearance&…

Chapter 02 Python基础-1

1.Python语法 1.变量 从实例看Python代码&#xff1a; 输入圆的半径&#xff0c;计算圆面积&#xff0c;若面积大于等于10&#xff0c;则输出具体数值&#xff0c;若面积小于10&#xff0c;则只输出整数值。 分析&#xff1a; 1.圆面积计算需要用到PI&#xff0c;取什么样的…

vue预览和下载 pdf、ppt、word、excel文档,文件类型为链接或者base64格式或者文件流,

** 方法1&#xff1a;word、xls、ppt、pdf 这些文件&#xff0c; 如果预览的文件是链接可以直接打开&#xff0c;可用微软官方的预览地址 ** <iframe width"100%" :src"textVisibleURl " id"myFramePPT" style"border: none;backgroun…

OB删除1.5亿数据耗费2小时

目录 回顾&#xff1a;mysql是怎么删除数据的&#xff1f; 删除方案 代码实现 执行结果 结论 本篇是实际操作 批量处理数据以及线程池线程数设置 记录学习 背景&#xff1a;有一张用户标签表&#xff0c;存储数据量达4个亿&#xff0c;使用OceanBase存储&#xff0c;由于…