TCP为什么需要三次握手?两次握手或四次握手可以吗?

server/2024/11/25 17:09:29/

(1)三次握手可以保证双方具有接收和发送的能力

第一次握手服务端可以确认客户端的发送能力和服务端的接收能力是正常的;第二次握手客户端可以确认客户端和服务端的收发能力是正常的,但是服务端无法确认客户端的接收能力是正常的;第三次握手服务端可以确认客户端和服务端的收发能力都是正常的。

(2)三次握手可以防止历史连接的建立(最主要原因)

如果客户端有一个请求,但由于网络拥塞先后发送了两个SYN报文,其中旧的SYN报文有可能先到达服务器。如果是两次握手,服务器收到了旧的SYN报文就会立刻建立连接。旧的SYN报文引起的第二次握手到达客户端,客户端会比较确认应答号字段是否是新的SYN报文的序列号+1,如果是旧的SYN报文发起的,那么会给服务器发送RST报文中止连接。服务器中止后,新的SYN报文又到达了服务器,此时建立起正确的连接。对比三次握手的相同情况,二次握手多建立起了一次连接,造成了资源的浪费。

(3)三次握手可以同步双方的初始序列号

TCP协议的通信双方,都必须维护一个序列号,才能保证按序可靠传输。也就是发送了携带了初始序列号的SYN报文,必须用携带了应答序列号的ACK报文来接收。四次握手其实也能够可靠的同步双方的初始化序号,可以把ACK和SYN报文合并在一起进行优化,所以就成了三次握手,这样减少了一次通信。二次握手少了一次ACK报文,也无法可靠的同步双方序列号。

(4)三次握手可以避免资源浪费

当客户端发的 SYN 报文在网络中阻塞,可能会超时重发多个SYN报文。如果多个SYN报文到达了服务端,这样会建立多个冗余的无效链接,造成不必要的资源浪费。

因此,通过三次握手能确认客户端和服务器的收发能力,防止历史连接的建立,能减少不必要的资源开销,能帮助双方同步初始化序列号。不使用两次握手是因为两次握手无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;不使用四次握手是因为三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。


http://www.ppmy.cn/server/144849.html

相关文章

使用php和Xunsearch提升音乐网站的歌曲搜索效果

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…

FastAPI和SQLModel结合的优点

FastAPI和SQLModel的结合为现代Web应用开发带来了一系列显著的优势,特别适合需要与SQL数据库交互的场景。以下是它们结合的一些主要优点: 简短的代码:SQLModel通过使用Python类型注解来定义数据模型,最小化代码重复,无…

原生微信小程序在顶部胶囊左侧水平设置自定义导航兼容各种手机模型

无论是在什么手机机型下,自定义的导航都和右侧的胶囊水平一条线上。如图下 以上图iphone12,13PRo 以上图是没有带黑色扇帘的机型 以下是调试器看的wxml的代码展示 注意:红色阔里的是自定义导航(或者其他的logo啊,返回之…

wpf处理C1FlexGrid 表格合计统计项处理,新增和查询都要生效

控件的两个事件都需要调用这个方法&#xff0c;新增的时候不写CellEditEnded&#xff0c;不然不会生效 ItemsSourceChanged"DetailGrid_ItemsSourceChanged" CellEditEnded"DetailGrid_ItemsSourceChanged" /// <summary> /// 列表1合计 …

蓝桥杯疑似例题解答方案(打印任意阶杨辉三角)

题目&#xff1a;输入n&#xff0c;打印n阶的杨辉三角 杨辉三角是一种特殊的由数字构成的三角形&#xff0c;边缘上的数字都是1&#xff0c;内部的数字则是左上角和右上角数字的加和。它本质上其实是二项展开的系数序列&#xff08;我们通过这个性质可以给出一种与本篇文章的方…

力扣-位运算-2【算法学习day.42】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

从RNA测序数据中推断差异RNA编辑位点的统计推断

从RNA测序数据中推断差异RNA编辑位点的统计推断 描述 本仓库包含两个R函数,用于运行REDITs(RNA编辑测试)来调用差异RNA编辑位点: 在病例-对照(或条件1 vs 条件2)队列之间显著不同的RNA编辑位点 由REDIT-LLR(RNA编辑测试 - 对数似然比)处理显著与分类变量(例如性别、…

神经网络(系统性学习四):深度学习——卷积神经网络(CNN)

相关文章&#xff1a; 神经网络中常用的激活函数神经网络&#xff08;系统性学习一&#xff09;&#xff1a;入门篇神经网络&#xff08;系统性学习二&#xff09;&#xff1a;单层神经网络&#xff08;感知机&#xff09;神经网络&#xff08;系统性学习三&#xff09;&#…