确认应答、Nagle算法和延时确认应答

article/2025/7/23 4:28:27

目录

确认应答

延时确认应答

Nagle算法


确认应答

TCP在传输数据的时候,每次接受方收到来自发送方的数据包后,接受方对都会发送一个确认应答(ACK)报文作为回应,发送方收到来自接受方的确认应答(ACK)报文,就表明发送的数据已经被对方收到。

但是网络传输存在拥堵的情况,是很有可能出现"后来者居上"的情况,这个时候就不能只通过收到数据的顺序来的确定发送数据的情况。

那有没有好的办法来解决这个问题? 通过序列号seq和确认序列号ack

由于TCP是面向字节流传输的数据,所以序列号seq和确认序列号ack是以字节为单位进行编号的。针对每个字节分别编号,依次进行累加。

以字节为单位进行累加

 那么初始的序列号seq和确认序列号ack是是如何确定的呢?

就是通过TCP三次握手

序列号和确认序号是如何工作的呢?

举个例子

客户端向服务发送了1000个字节的数据。假设这个数据报的序列号为1,那么服务器给客户端回应的确认应答(ACK)报文的确认序列号ack则为1001。

意思就是1001之前的数据,服务器已经收到,下次发送数据的时候,请从1001开始发送。

seq和ack

但序列号的作用不仅仅是应答的作用。接收方可以根据序列号将接收到的数据进行排序,并且去掉重复的数据。

延时确认应答

接收方如果每次收到来自发送发的数据包后都立刻回复确认应答的话,可能会返回一个较小的窗口,这个窗口是用来通知发送方下次发送数据的大小。主要是因为接收方会先将数据放到缓冲区,待上层应用层将这些数据取走。而由于刚收到数据,应用层还没来得及取,此时缓冲区的可用空间变小,就会通知发送方要减少下次发送的数据长度。

当接收端收到这个小窗口的通知以后,会以它为上限发送数据,从而又降低了网络的利用率。

除此之外,如果只是单纯的发送一个确认应答,代价又会很高。因为IP头部有20字节,TCP头部也有20字节(此处不计选项)。

那么有没有好的办法解决这个问题呢?

延时确认应答 Delay ACK

延时确认应答将几个ACK应答组合在一起成为单个应答,或者希望应用程序会对刚刚收到的数据进行应答,这样就可以用新数据将ACK应答捎带过去,就像做顺风车一样。

这里有个捎带应答的概念

TCP的确认应答和回执数据可以通过一个包发送。这种方式叫做捎带应答

  • 当有回执数据要发送时,TCP的确认应答会随回执数据通过一个包发送。
  • 如果没有回执数据时,TCP的确认应答会等待一段时间,看看稍后是不是有回执数据要发送。Windows默认等待时间为200ms,Linux默认等待时间为40ms。
  • 如果在等待回执数据的时候,第二个数据包又到达了,这是要立即发送确认应答。

Nagle算法

Nagle怎么读?

Nagle算法是TCP为了提高网络利用率和减少网络发送数据包经常使用的算法。

如果发送一字节有用的数据,就会产生至少41个字节长的数据包,20字节的IP头部和20字节的TCP头部(这里没有算上选项,所以说至少41字节),这样就导致了为了发送一字节有用的数据,却浪费掉了40字节的的头部信息,这会导致网络效率非常的低。

而且在广域网上,大量TCP Small Packet(数据包)会很有可能造成网络的拥塞。

Nagle算法为了减少TCP Small Packet(数据包)的出现和提高网络利用率,它要求一个TCP连接上最多只能有一个未被确认的小数据段。

在该小数据段的确认应答到达之前不能发送其他小数据段。

而且TCP会收集小的数据段,等之前的数据段的确认应答收到后,将这些收集小的数据段打包成一个数据段发送出去。

Nagle算法的伪代码:

        if (有数据要发送){if(可用窗口的大小 >= MSS && 可发送的数据 >= MSS){立即发送MSS长度的数据}else {if (有未确定的数据){将数据放入缓存等待未确定数据的ACK}else {立即发送数据}}}

虽然Nagle算法可以提高网络的利用率和减少小的数据包,但是这也是要分情况的。因为Nagle算法会造成某种程度上的延迟。

所以在实时性要求很高的交互上,比如网络游戏、机器控制等领域使用TCP时往往会关闭对该算法的启用。


http://chatgpt.dhexx.cn/article/XcKvDiRS.shtml

相关文章

TCP/IP卷一:80---TCP数据流与窗口管理之(延时确认(延迟ACK)、Nagle算法)

一、延迟确认(延迟ACK) 在许多情况下,TCP并不对每个到来的数据包都返回ACK,利用TCP的累积ACK字段(参见TCP报文格式https://blog.csdn.net/qq_41453285/article/details/104016416)就能实现该功能累积确认可…

禁用 Nagle 算法

有没有发现一个很奇怪的组合,即 Nagle 算法和延时 ACK 的组合。这个组合为什么奇怪呢? 我举一个例子你来体会一下。比如,客户端分两次将一个请求发送出去,由于请求的第一部分的报文未被确认,Nagle 算法开始起作用&…

TCP Nagle算法及示例

TCP nagle算法是说,一个TCP连接只允许有一个未被确认的小数据包,如果有小数据包未被确认,其他要发送的小数据包先被缓存起来,等收到确认后, 把这些数据包再一块发送出去。注意算法中说的是小数据包,也就是n…

TCP-IP详解:Nagle算法

参考书籍:TCP/IP详解,卷1:协议 Small Packet Problem 在使用一些协议通讯的时候,比如Telnet,会有一个字节字节的发送的情景,每次发送一个字节的有用数据,就会产生41个字节长的分组&#xff0c…

TCP-Nagle:代码版本重新解释Nagle算法

开年来的第一份工作,就是在最新的内核上打补丁。 可没想到Nagle算法也被我冲进了去年的垃圾桶里。 在网上找了一些资料,理论很快被消化,但看了看内核的实现,久久没能动弹。坐了一天,才摸索出来点什么,觉得…

Nagle算法原理与实现详解

文章目录 背景Nagle算法详解算法实现实现开启与关闭Nagle算法 Nagle算法与延迟ACK参考 背景 TCP的数据流大致可以被分成两类: 交互式数据流 TCP交互数据流指的是:TCP连接中传输的所有数据的总和,包括控制命令(用于管理网络中连接…

TCP详解 (三)Nagle算法和延迟确认

文章目录 延迟确认Nagle算法Nagle算法遇上延迟确认关闭Nagle算法 一些有关TCP通信量的研究如[Caceresetal.1991]发现,如果按照分组数量计算,约有一半的TCP报文段包含成块数据(如 FTP、电子邮件和 Usenet新闻),另一半则…

复指数信号正交性的简单证明

复指数信号为: . 写成矢量形式: 复指数信号两两正交,也就是两个复指数信号的内积有如下表示: 将上式内积形式展开: 当kl时,所有cos项1,sin项0,求和为N。 当时,将求和符…

三角函数正交性的推导

定理: 一个三角函数系:1 cosx sinx cos 一个三角函数系:1,cosx , sinx , cos2x , sin2x , … , cosnx , sinnx , … 如果这一堆函数(包括常数1)中任何两个不同函数的乘积在区间[-π, π]上的积分等于…

OFDM时频脉冲形状与子载波正交性的理解

从多载波调制的角度来理解子载波间正交,首先要明确OFDM默认的脉冲成型是时域矩形窗,时域上每个子载波 e j 2 π f n t e^{j2πf_nt} ej2πfn​t 都被一个矩形窗脉冲 g T ( t ) g_T(t) gT​(t)成型。其次,OFDM子载波间隔 等于 OFDM符号周期的…

正交性原理与维纳霍夫(正则)方程

有期望信号d(n),纯净信号x(n),以及噪声信号g(n); 有滤波器h(m),以及滤波器输出信号y(n),滤波器输出纯净信号x的估计值y&a…

三大变换与自控(五)三角函数的正交性证明

在本系列文章的第一篇中,我们提到任何信号都可以被分解为三角函数,是因为三角函数的正交性,因此在三角函数构建的坐标系中可以绘制任何图形。现在我们就来证明一下三角函数的正交性,以完善我们整个推导过程。 教材上的三角函数系…

机器学习的数学基础(3):正交性原理(orthogonality principle)

思考这样一个问题,令S为一个希尔伯特空间,而空间S的一个子空间 当我们给定了,如何求最近上距离x最近的点。 则我们用数学语言表示该问题为一个优化问题: 该问题的解可以直接通过一个定理给出,即正交性定理&#xff0…

傅里叶级数与傅里叶变换_Part1_三角函数系的正交性

傅里叶级数与傅里叶变换_Part1_三角函数系的正交性 参考链接: DR_CAN老师的原视频 0、复习Part0的内容 参考链接:傅里叶级数与傅里叶变换_Part0_欧拉公式证明三角函数和差公式证明 三角函数的和差公式如下 sin ⁡ ( α β ) sin ⁡ ( α ) cos ⁡ …

09 正交性

09 正交性 9-1 空间,向量空间和欧几里得空间 9-2 广义向量空间 9-3 子空间 9-4 维度 9-5 行空间和矩阵的行秩 9-6 列空间 9-7 矩阵的秩和矩阵的逆 9-8 零空间与看待零空间的三个视角 9-9 零空间与秩-零化度定理 9-10 左零空间,四大子空间和研究子空间的…

CSS正交性分析

Refer: 为什么 CSS 这么难学? 我先来解释一下什么是正交。你调过显示器的「亮度」、「色调」和「饱和度」吧。 「亮度」就是明暗程度,值越大,屏幕越亮。 「色调」就是颜色,你通过调色调,可以把红色调成绿色。 「饱和度…

勒让德多项式的正交性和归一化

罗德里格斯公式正交性归一化应用 这学期上数学课时老师布置了一道习题:计算勒让德多项式的模。翻看本科数学物理方法教材,发现计算方法较复杂,且用到了生成函数 为了方便理清整个计算过程,这一博客直接从罗德里格斯公式出发并避免…

向量组的正交性

向量的内积定义 运算: 向量的正交性: 正交向量组的性质: 向量组的正交规范化 正交矩阵 定义: 正交矩阵的判定

拉盖尔多项式的正交性

标准拉盖尔多项式 拉盖尔多项式可以表示为: 拉盖尔多项式的正交性是指 当 时 上式的积分运算结果为0。这是一种加权的正交性。 证明: (1) 采用变换 容易得到,当 上式的结果为0是因为在进行微分运算后,各项均包含 , 各项的上下限均为0。 …