《TCP/IP详解 卷一》第15章 TCP数据流与窗口管理

news2024/10/24 6:58:05

目录

15.1 引言

15.2 交互式通信

15.3 延时确认

15.4 Nagle 算法

15.4.1 延时ACK与Nagle算法结合

15.4.2 禁用Nagle算法

15.5 流量控制与窗口管理

15.5.1 滑动窗口

15.5.2 零窗口与TCP持续计时器

15.5.3 糊涂窗口综合征

15.5.4 大容量缓存与自动调优

15.6 紧急机制

15.7与窗口管理相关的攻击

15.8总结


15.1 引言

两类TCP传输:

        交互式传输:

                单个报文小,如ssh,网络游戏中账号信息,鼠标操作等信息。

        批量传输:

                即大量数据传输。如文件共享下载,web访问。

                需流量控制,防止接收端溢出。

15.2 交互式通信

网络中大部分是大批量传输,少部分是交互式传输。

ssh是典型交互式数据。

        特点:小包。

ssh每个输入一个字符会生成4个TCP数据段:

        1. 客户端指令输入

        2. 服务器ACK

        3. 服务器执行结果

        4. 客户端ACK

其中2,3可合并一起发送,即ACK报文携带回显数据,这叫延迟ACK。

TCP段PSH标志含义:

        表示发送端没有其他数据需要传输。而接收端收到数据后应立即传递给应用层。

因为SSH客户端产生的都是短小信息,通常SSH TCP报文都带PSH标志。

15.3 延时确认

延迟ACK:

        TCP不会对收到的每个数据都回复一个ACK,而是通过累积ACK后将延迟的ACK和后续需要传的数据结合发送。

        常用于批量数据传输中。

好处:减少ACK数目,减轻网络负载。

而快速ACK,即每个报文都会回复一个ACK。

15.4 Nagle 算法

SSH客户端一个单击动作会产生四个TCP报文,其中包含TCP头,IP头等开销,代价很高,会加重广域网阻塞。

        解决方法:Nagle算法

Nagle翻译:突然

Nagle原理:

        若发送端没有收到所有数据的ACK时,不发送小报文。直到所有在传数据收到ACK,在这个等待期间会整合多个小数据,通过一个更大报文发送。

        所以ACK返回越快,数据发送越快。

优点:在高延迟网络中可整合小数据,减少小包数目。

缺点:增加了时延。

Nagle算法适用场景:

        频繁传输小数据块,并延迟不敏感。

15.4.1 延时ACK与Nagle算法结合

延时ACK:延迟发送ACK,用于减少ACK包的数量,降低网络开销。

Nagle算法:等待收到所有已发送数据的ACK后,期间合并小包成大包再发送数据。

所以可知,两者结合使用导致短暂死锁。

所以如果SSH服务器开启了延迟ACK功能,客户端最好禁用Nagle。

15.4.2 禁用Nagle算法

Nagle算法增加了时延,对实时应用不适合。

        如SSH,实时网络游戏。

内核协议栈禁用Nagle:

        net.ipv4.tcp_no_delay = 1

应用程序禁用:

        设置socket TCP_NODELAY选项

        setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, sizeof(int))

15.5 流量控制与窗口管理

每个TCP报文段包含:序列号,ACK号,窗口大小。

        ACK号:下一次期待收到的报文序列号,说明之前的数据已全部接收。

        窗口大小:向对方指示,自己的接收缓冲区还剩多少空间。

15.5.1 滑动窗口

每对TCP连接的两端都维护一个发送窗口和接收窗口。

        其中发送窗口大小由对端的接收窗口通告。

在没收到数据的ACK情况下,最多可发送的数据量就是发送窗口大小。

滑动窗口作用:

        优化网络利用率:

                滑动窗口允许发送方连续发送多个数据段而不必等待每个数据段ACK。提高网络利用率。

        避免拥塞:

                发送方根据接收方通告的窗口大小来控制发送量,避免发送过快而引起拥塞。

发送窗口:

一旦收到已发送数据的ACK后,就移动窗口,可继续发送更多数据。

接收窗口:

把接收窗口值给通告给发送方。

        收到数据的序列号小于左边界RCV.NXT,就是重复报文,丢弃数据。

        收到数据的序列号大于右左边界RCV.NXT+RCV.WND,超出处理范围,丢弃数据。

15.5.2 零窗口与TCP持续计时器

TCP通过接收端的窗口通告实现流量控制。指示接收端缓冲区可接收数量。

通告的接收窗口为0时,可阻止对方发送。

接收端缓冲区重新有可用空间时,可传输一个窗口更新给发送端。该窗口更新是一个纯ACK,不包含数据。

问题:

        如果接收端的窗口更新报文丢失,而发送方需要等到窗口更新报文才可继续发送。造成死锁。

解决方法:

        周期向接收端查询窗口值,即发送窗口探测,接收端回复一个ACK报文,其中包含窗口大小。

TCP报文是纯ACK,则不会重传ACK。

TCP报文不是纯ACK,会重传ACK和数据。

15.5.3 糊涂窗口综合征

糊涂窗口综合征SWS

出现原因有:

        接收端没等到窗口变大就通告,导致通告的窗口小。

        发送端没等到将小数据合成更大报文就方法,导致发送数据小。

坏处:

        传输的TCP数据很小。传输效率低。

解决方法:

        接收端不通告小窗口值。

        发送端不发送小报文段,由Nagle控制如何发送。

15.5.4 大容量缓存与自动调优

不必提前设置一个过大发送/接收缓存。而是根据待传数据大小,不断估算缓存大小,不断通告窗口大小。

        即窗口自动调优。

如何设置窗口的自动调优范围:

        接收窗口:

                net.ipv4.tcp_rmem= 4096 87380 174760

        发送窗口:

        net.ipv4.tcp_wmem= 4096 87380 174760

上述三个值分别是最小值,默认值,最大值。

最小值:

        应用程序设置发送缓冲区小于最小值时,内核自动扩大到最小值,如4096。

默认值:

        应用程序未指定发送缓冲区大小时,内核会使用这个默认值。

最大值:

        应用程序不能设置发送缓冲区的大小超过最大值。

自动调优:

        当接收端根据接收缓存区剩余大小,动态发送窗口更新报文给发送端,控制发送端发送速率。

若TCP的接收缓存区太小,会严重限制TCP吞吐量。

小结:接收窗口和发送窗口值会根据网络环境和系统配置而动态调整,通常范围为几KB到几MB。

15.6 紧急机制

TCP URG标志:

        指示该TCP报文包含紧急数据。

MSG_OOB标志可发送接收带外数据。

        带外数据:使用带外(额外)通道来传输数据,可不受滑动窗口控制,实现传输紧急数据。

MSG_OOB使用方法如:

        send(socket_fd, buff, buff_len, MSG_OOB);

        recv(socket_fd, buffer, MAX_BUFFER_SIZE, MSG_OOB);

MSG_OOB数据比普通数据有更高优先级。

15.7与窗口管理相关的攻击

通告非常小的窗口,让发送方缓慢发送,并保持忙碌发送,耗尽资源。

15.8总结

延迟ACK:

        使用场景:交互式通信中,当接收方收到数据后,延迟回复ACK,等到有数据发送时再一起携带ACK发送。

        优点:减少包数量。

        缺点:延时增大。

Nagle算法:

        使用场景:广域网中RTT较大的环境中,采用Nagle算法,可以合并多个小数据包成一个,再发送。

        优点:减少包数量,降低传输开销。

        缺点:延时增大。

延迟ACK和Nagle算法会短暂死锁,有的会禁用Nagle算法。

        通常延时不敏感的交互式应用可使用Nagle。

当接收端的接收缓存为空,会通告窗口为0。此时发送端会停止发送,并周期发送窗口探测,直到通告不为0。

糊涂窗口综合症:

        接收端通告了小窗口,发送端立即发送小数据,导致网络太多小数据。

        解决方法:

                接收端不通告小窗口。

                发送端不发送小数据。

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

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

相关文章

汽车小车车灯无痕修复用的胶是什么胶?

汽车小车车灯无痕修复用的胶是什么胶? 可以使用在小车车灯无痕修复中的胶水,通常使用的车灯无痕修复专用UV胶。 车灯无痕修复专用胶主要成份是改性丙烯酸UV树脂,主要应用在车灯的专业无痕修复领域。它可以用于修复车灯壳的裂缝或破损&#xf…

阿珊解析Vuex:实现状态管理的利器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

如何将字体添加到 ONLYOFFICE 桌面编辑器8.0

作者:VincentYoung 为你写好的文字挑选一款好看的字体然而自带的字体列表却找不到你喜欢的怎么办?这只需要自己手动安装一款字体即可。这里教你在不同的桌面操作系统里的多种字体安装方法。 ONLYOFFICE 桌面编辑器 ONLYOFFICE 桌面编辑器是一款免费的办…

第一讲 计算机组成与结构(初稿)

计算机组成与结构 计算机指令常见CPU寄存器类型有哪些?存储器分类?内存?存储器基本组成: 控制器的基本组成主机完成指令的过程以取数指令为例以存数指令为例ax^2bxc程序的运行过程 机器字长存储容量小试牛刀(答案及解析…

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折

同志们,云服务器行业大内圈,腾讯云各个活动都已开始卷中卷,我整理一下各个活动,加油冲了 【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折,最低只要51 【腾讯云】多款热门AI产品新春巨惠&…

计网《一》|互联网结构发展史|标准化工作|互联网组成|性能指标|计算机网络体系结构

计网《一》| 概述 计算机网络在信息时代的作用什么是互联网呢?互联网有什么用呢?为什么互联网能为用户提供许多服务 互联网基础结构发展的三个阶段第一个阶段:第二阶段:第三个阶段: 互联网标准化的工作互联网的组成边缘…

CCF-B推荐会议 Euro-Par‘24延期10天! 3月25日截稿!抓住机会!

会议之眼 快讯 第30届Euro-Par(International European Conference on Parallel and Distributed Computing)即国际欧洲并行和分布式计算会议将于 2024 年 8月26日-30日在西班牙马德里举行!Euro-Par是欧洲最主要的会议之一,提供了一个广泛而综合的平台&a…

数字孪生10个技术栈:数据处理的六步骤,以获得可靠数据。

一、什么是数据处理 在数字孪生中,数据处理是指对采集到的实时或历史数据进行整理、清洗、分析和转化的过程。数据处理是数字孪生的基础,它将原始数据转化为有意义的信息,用于模型构建、仿真和决策支持。 数据处理是为了提高数据质量、整合数…

Java面试挂在线程创建后续,不要再被八股文误导了!创建线程的方式只有1种

写在开头 在上篇博文中我们提到小伙伴去面试,面试官让说出8种线程创建的方式,而他只说出了4种,导致面试挂掉,在博文中也给出了10种线程创建的方式,但在文章的结尾我们提出:真正创建线程的方式只有1种&…

Kakarot:当今以太坊的未来

1. 引言 前序博客: Kakarot:部署在Starknet上的ZK-EVM type 3 随着 Kakarot zkEVM 即将发布测试网,想重申下 Kakarot zkEVM 的愿景为: 为什么在rollup空间中还需要另一个 zkEVM? 开源代码见: https:/…

第三百八十七回

文章目录 1. 概念介绍2. 使用方法3. 示例代码 我们在上一章回中介绍了DateRangePickerDialog Widget相关的内容,本章回中将介绍Radio Widget.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里说的Radio Widget是指单选按钮,没有选中时是圆形…

PEIS源码 健康体检中心源码 C/S

目录 一、系统概述 二、系统开发环境 三、系统功能 检前管理 检中管理 检后管理 设备对接-PACS 设备对接-彩超 LIS-结果录入、审核、外送结果自动导入 一、系统概述 体检系统,是专为体检中心/医院体检科等体检机构,专门开发的全流程管理系…

创建Net8WebApi自动创建OpenApi集成swagger

问题:用Net8创建WebAPI时勾选启动OpenAPI,项目自动集成了Swagger,但是接口注释没有展示? 解决: 1.需要生成Api项目的XML文件。操作如下: 2.生成XML文件后,还需要在启动类Program.cs里面配置Sw…

快速批量将图片变成圆角怎么弄?教你一键将图片批量加圆角

在我们日常工作中,在设计图片的时候会要求将直角变成圆角,那么为什么要这么做呢?首先从圆角的设计语言上来说说,圆角看起来很现代,传达给人的感觉是温和友善的,被广泛的应用在产品中的图标、按钮等地方。而…

代码随想录day15(2)栈与队列:滑动窗口最大值(leetcode239)

题目要求:给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。 思路:首先的想法就是暴力方法,遍历一遍…

SSD LDPC软错误探测方案解读

上一篇文档中,基于SSD LDPC(Low-Density Parity-Check Codes)原理背景和纠错能力作了简单的介绍。 扩展阅读: 关于SSD LDPC纠错能力的基础探究 浅析LDPC软解码对SSD延迟的影响 本篇结合SMI发布的研究成果,通过SSD控制内部LDPC更底层的架构,来解读如何增强软错误探测能力…

ucrtbased.dll丢失的解决方法,分享5种有效的解决方法

ucrtbased.dll是一个在Windows操作系统中至关重要的系统文件,它隶属于Universal C Runtime库(UCRT),是Microsoft Visual Studio编译器为了支持C标准库功能而引入的一个动态链接库文件。这个文件内包含了大量通用且关键的运行时函数…

Navicat安装破解教程

蓝奏云下载地址https://wws.lanzoux.com/b01tqirzc或者链接https://pan.baidu.com/s/15cfQAFdQsn8xSg_2LiQZHg 提取码:q3rd链接:https://pan.baidu.com/s/1WwyCC03qcnqnWKGo-m6ZjA 提取码:pg9uNavicat16目前没有破解方法,15可以&a…

MES+APS难度地狱级,搞定它就是劫后余生呀。

一、什么是MES和APS MES(Manufacturing Execution System)和APS(Advanced Planning and Scheduling)是两种在制造业中常用的软件系统,用于优化生产过程和提高生产效率。 MES是一种用于管理和监控制造过程的系统。它与…

数学建模【模糊综合评价分析】

一、模糊综合评价分析简介 提到模糊综合评价分析,就先得知道模糊数学。1965年美国控制论学家L.A.Zadeh发表的论文“Fuzzy sets”标志着模糊数学的诞生。 模糊数学又称Fuzzy数学,是研究和处理模糊性现象的一种数学理论和方法。模糊性数学发展的主流是在…