TCP/IP三次握手的过程,为什么要3次?

news2025/5/19 16:37:44

一:过程

第一次(SYN):

客户端发送一个带有SYN标志的TCP报文段给服务器,设置SYN=1,并携带初始序列号Seq=x(随机值),进入SYN_SENT状态。等待服务器相应。

第二次(SYN+ACK):

服务器收到客户端发送的SYN报文段后,如果同意建立连接,会发送报文段给客户端:

设置SYN=1,携带服务器的初始序列号Seq=y(随机值)。

设置ACK=1,确认号Ack=x+1,表示已收到客户端的Seq=x。

服务器进入SYN_RVCD状态。

第三次(ACK):

客户端收到服务器发送的SYN+ACK报文段后,会发送报文段给服务器:

设置ACK=1,确认号Ack=y+1,表示已收到服务器的Seq=y。

序列号Seq=x+1,继续之前的序列。

客户端进入ESTABLISHED状态。

收到客户端的ACK后,服务器也进入ESTABLISHED状态,连接建立成功,可以开始进行数据传输。

二:为什么要3次?

1.确认双方都能发送和接收数据:

第一次握手确认客户端的发送能力和服务器的接受能力。

第二次握手确认服务器的发送能力和客户端的接受能力。

第三次握手确认客户端的发送能力和服务器的接受能力。

2.防止旧的连接请求误导对方:

通过三次握手,双方都能确认对方的状态是最新的,有效避免了网络中旧的、延迟的SYN包造成的错误连接。

3.防止重复数据包干扰:

三次握手确保双方都能有效处理重复的数据包,并建立一个唯一的连接。

三:为什么不是2次?

无法确认双向通信

TCP是全双工协议,需要确保客户端和服务器都能发送和接收数据。

两次握手过程:客户端->SYN->服务器  服务器->ACK->客户端

问题
服务器发送ACK后,认为连接已建立,但客户端可能未收到ACK(比如网络丢包)。

服务器无法确认客户端是否收到ACK。

后果

服务器单方面认为连接成功,可能开始发送数据,而客户端未准备好,导致数据丢失。

无法同步服务器的序列号

TCP使用序列号确保数据按序传输。

两次握手中,服务器的ACK只确认了客户端的序列号(x),但未发送自己的序列号(y)。

问题:客户端无法知道服务器的初始序列号,后续数据传输可能因为序列号不同步而混乱。

后果缺乏双向序列号同步,无法保证可靠传输。

无法防止旧连接干扰

网络中可能存在延迟的旧数据包,比如之前的SYN。

两次握手时:

客户端发送旧SYN,服务器收到后返回ACK。

服务器认为连接建立,但客户端未发送新连接。

问题:两次握手无法区分新旧连接,服务器可能误处理旧包。

后果旧数据干扰新连接,导致不可靠性。

四:为什么不是四次握手?

四次也可以,但是多余,效率低。

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

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

相关文章

Centos6安装nerdctl容器运行时

Centos6安装nerdctl容器运行时 前言Centos6安装docker---失败--不可拉取镜像docker配置国内镜像加速 Centos6安装nerdctl-full容器管理工具为Centos6配置containerd服务开机自启动设置nerdctl自动补全 前言 本文写于2025年3月22日,因一些特殊业务需要用到Centos6Docker,但Cent…

登录验证码的接口实习,uuid,code.

UID是唯一标识的字符串,下面是百度百科关于UUID的定义: UUID是由一组32位数的16进制数字所构成,是故UUID理论上的总数为16322128,约等于3.4 x 10^38。也就是说若每纳秒产生1兆个UUID,要花100亿年才会将所有UUID用完。 UUID的标准…

用fofa语法搜索漏洞

FOFA是一款非常强大的搜索引擎 关于对于fofa的描述是:FOFA(网络空间资产检索系统)是世界上数据覆盖更完整的IT设备搜索引擎,拥有全球联网IT设备更全的DNA信息。 探索全球互联网的资产信息,进行资产及漏洞影响范围分析…

20242817李臻《Linux⾼级编程实践》第6周

20242817李臻《Linux⾼级编程实践》第6周 一、AI对学习内容的总结 Linux进程间通信(IPC) 1. 进程间通信基本概念 作用: 数据传输:进程间传递数据(字节到兆字节级别)。共享数据:多个进程操作同一数据&…

深入解析SQL2API平台:数据交互革新者

在数字化转型持续深入的当下,企业对数据的高效利用与管理的需求愈发迫切。SQL2API平台应运而生,成为助力企业突破数据交互困境的有力工具,特别是它由麦聪软件基于DaaS(数据即服务)产品创新衍生而来,备受业界…

Java 中装饰者模式与策略模式在埋点系统中的应用

前言 在软件开发中,装饰者模式和策略模式是两种常用的设计模式,它们在特定的业务场景下能够发挥巨大的作用。本文将通过一个实际的埋点系统案例,探讨如何在 Java 中运用装饰者模式和策略模式,以及如何结合工厂方法模式来优化代码…

无人设备遥控器之调度自动化技术篇

一、技术原理 信息采集与处理: 通过传感器、仪表等设备采集无人设备的各种数据,如位置、速度、状态等。 将采集到的数据传输到调度自动化系统中进行处理和分析,以获取设备的实时状态。 系统建模与优化: 调度自动化系统会根据…

【AI】Orin Nano+ubuntu22.04上移植YoloV11,并使用DeepStream测试成功

【AI】郭老二博文之:AI学习目录汇总 1、准备工作 使用 sdk-manager 烧写 OrinNano, JetPack版本为6.0 DP,对应操作系统为:Ubuntu22.04 参见博客:【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04 2、安装 PyTorch 2.1 下载依赖 1)安装onnx pip install onnx -i h…

K8S学习之基础四十五:k8s中部署elasticsearch

k8s中部署elasticsearch 安装并启动nfs服务yum install nfs-utils -y systemctl start nfs systemctl enable nfs.service mkdir /data/v1 -p echo /data/v1 *(rw,no_root_squash) >> /etc/exports exports -arv systemctl restart nfs创建运行nfs-provisioner需要的sa账…

如何在 Windows 上安装并使用 Postman?

Postman 是一个功能强大的API测试工具,它可以帮助程序员更轻松地测试和调试 API。在本文中,我们将讨论如何在 Windows 上安装和使用 Postman。 Windows 如何安装和使用 Postman 教程?

Axure RP 9.0教程: 基于动态面板的元件跟随来实现【音量滑块】

文章目录 引言I 音量滑块的实现步骤添加底层边框添加覆盖层基于覆盖层创建动态面板添加滑块按钮设置滑块拖动效果引言 音量滑块在播放器类APP应用场景相对较广,例如调节视频的亮度、声音等等。 I 音量滑块的实现步骤 添加底层边框 在画布中添加一个矩形框:500 x 32,圆…

WPF 与 C# 开发深度剖析

一、引言 在当今的软件开发领域,Windows 平台依旧占据着重要的地位。而 WPF(Windows Presentation Foundation)作为微软推出的一款强大的用户界面(UI)框架,为开发者提供了丰富的功能和灵活的设计方式&…

好消息!软航文档控件(NTKO WebOffice)在Chrome 133版本上提示扩展已停用的解决方案

软航文档控件现有版本依赖Manifest V2扩展技术支持才能正常运行,然而这个扩展技术到2025年6月在Chrome高版本上就彻底不支持了,现在Chrome 133开始的版本已经开始弹出警告,必须手工开启扩展支持才能正常运行。那么如何解决这个技术难题呢&…

通过仿真确定抗积分饱和策略的最佳系数

通过仿真确定抗积分饱和策略的最佳系数(如PID参数 ( K_p, K_i, K_d ) 以及抗饱和参数 ( K_{\text{back}} )、积分限幅值等)是一个系统化的过程。以下是具体步骤和示例: — 1. 建立仿真模型 1.1 模型组成 被控对象:例如电机、温…

消息队列(Kafka及RocketMQ等对比联系)

目录 消息队列 一、为什么使用消息队列?消息队列有什么优点/缺点?介绍下Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优点缺点,如何取舍? 1.公司业务场景是什么,这个业务场景有什么挑战,如果不用MQ有什么麻…

GitHub开源的容器管理面板-Dpanel

dpanel Docker安装部署二进制部署 GitHub官网 一块轻量化docker可视化管理面板,由国人开发,个人觉得是比较好用的,功能都很齐全,并且可以通过修改源码,自定义前端样式等。 Docker安装部署 官网 部署环境&#xff1…

【HarmonyOS Next】三天撸一个BLE调试精灵

【HarmonyOS Next】三天撸一个BLE调试精灵 一、功能介绍 BLE调试精灵APP属于工具类APP,在用户使用的过程中,负责调试BLE设备从机端,比如蓝牙耳机、低功耗设备、带有BLE的空调等设备,可以在页面中清晰看到设备的厂商,…

java 批量下载doc\excle\pdf

指定图片集合 下载到指定文件夹 import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.Arrays; import java.util.List;public class OfficeFileDownloader {/*** 需要下载的Office文档URL列表*/private static final List<Strin…

软件性能效率测试工具有哪些?专业第三方软件检测机构推荐

在软件开发的新时代&#xff0c;软件性能效率测试已经成为每个企业不可或缺的一部分。无论是在竞争激烈的市场中&#xff0c;还是在追求卓越用户体验的过程中&#xff0c;都需要进行有效的性能测试。 一、软件性能效率测试的目标   1、响应时间&#xff1a;确保用户请求的响…

使用flask_restful快速构建接口

Flask-RESTful 是一个用于快速构建 RESTful API 的 Flask 扩展。它简化了创建、管理和文档化 REST API 的过程。利用 Flask-RESTful&#xff0c;你可以更容易地将你的 Flask 应用程序组织成 RESTful 原则的风格 安装包 pip install flask_restful 快速构建接口 from flask im…