0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TCP协议拥塞控制的滑动窗口协议解析

西西 来源: Chinaunix 作者:windhawkgyang 2020-10-08 17:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。

一、滑动窗口协议

关于这部分自己不晓得怎么叙述才好,因为理解的部分更多,下面就用自己的理解来介绍下TCP的精髓:滑动窗口协议。

所谓滑动窗口协议,自己理解有两点:1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”;2. “滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”。在引入一个例子来说这个协议之前,我觉得很有必要先了解以下前提:

-1. TCP协议的两端分别为发送者A和接收者B,由于是全双工协议,因此A和B应该分别维护着一个独立的发送缓冲区和接收缓冲区,由于对等性(A发B收和B发A收),我们以A发送B接收的情况作为例子;

-2. 发送窗口是发送缓存中的一部分,是可以被TCP协议发送的那部分,其实应用层需要发送的所有数据都被放进了发送者的发送缓冲区;

-3. 发送窗口中相关的有四个概念:已发送并收到确认的数据(不再发送窗口和发送缓冲区之内)、已发送但未收到确认的数据(位于发送窗口之中)、允许发送但尚未发送的数据以及发送窗口外发送缓冲区内暂时不允许发送的数据;

-4. 每次成功发送数据之后,发送窗口就会在发送缓冲区中按顺序移动,将新的数据包含到窗口中准备发送;

TCP建立连接的初始,B会告诉A自己的接收窗口大小,比如为‘20’:

字节31-50为发送窗口

A发送11个字节后,发送窗口位置不变,B接收到了乱序的数据分组:

只有当A成功发送了数据,即发送的数据得到了B的确认之后,才会移动滑动窗口离开已发送的数据;同时B则确认连续的数据分组,对于乱序的分组则先接收下来,避免网络重复传递:

二、流量控制

流量控制方面主要有两个要点需要掌握。一是TCP利用滑动窗口实现流量控制的机制;二是如何考虑流量控制中的传输效率。

1. 流量控制

所谓流量控制,主要是接收方传递信息给发送方,使其不要发送数据太快,是一种端到端的控制。主要的方式就是返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送:

这里面涉及到一种情况,如果B已经告诉A自己的缓冲区已满,于是A停止发送数据;等待一段时间后,B的缓冲区出现了富余,于是给A发送报文告诉A我的rwnd大小为400,但是这个报文不幸丢失了,于是就出现A等待B的通知||B等待A发送数据的死锁状态。为了处理这种问题,TCP引入了持续计时器(Persistence timer),当A收到对方的零窗口通知时,就启用该计时器,时间到则发送一个1字节的探测报文,对方会在此时回应自身的接收窗口大小,如果结果仍未0,则重设持续计时器,继续等待。

2. 传递效率

一个显而易见的问题是:单个发送字节单个确认,和窗口有一个空余即通知发送方发送一个字节,无疑增加了网络中的许多不必要的报文(请想想为了一个字节数据而添加的40字节头部吧!),所以我们的原则是尽可能一次多发送几个字节,或者窗口空余较多的时候通知发送方一次发送多个字节。对于前者我们广泛使用Nagle算法,即:

*1. 若发送应用进程要把发送的数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发送出去,把后面的字节先缓存起来;

*2. 当发送方收到第一个字节的确认后(也得到了网络情况和对方的接收窗口大小),再把缓冲区的剩余字节组成合适大小的报文发送出去;

*3. 当到达的数据已达到发送窗口大小的一半或以达到报文段的最大长度时,就立即发送一个报文段;

对于后者我们往往的做法是让接收方等待一段时间,或者接收方获得足够的空间容纳一个报文段或者等到接受缓存有一半空闲的时候,再通知发送方发送数据。

三、拥塞控制

网络中的链路容量和交换结点中的缓存和处理机都有着工作的极限,当网络的需求超过它们的工作极限时,就出现了拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。常用的方法就是:

1. 慢开始、拥塞控制

2. 快重传、快恢复

一切的基础还是慢开始,这种方法的思路是这样的:

-1. 发送方维持一个叫做“拥塞窗口”的变量,该变量和接收端口共同决定了发送者的发送窗口;

-2. 当主机开始发送数据时,避免一下子将大量字节注入到网络,造成或者增加拥塞,选择发送一个1字节的试探报文;

-3. 当收到第一个字节的数据的确认后,就发送2个字节的报文;

-4. 若再次收到2个字节的确认,则发送4个字节,依次递增2的指数级;

-5. 最后会达到一个提前预设的“慢开始门限”,比如24,即一次发送了24个分组,此时遵循下面的条件判定:

*1. cwnd 《 ssthresh, 继续使用慢开始算法;

*2. cwnd 》 ssthresh,停止使用慢开始算法,改用拥塞避免算法;

*3. cwnd = ssthresh,既可以使用慢开始算法,也可以使用拥塞避免算法;

-6. 所谓拥塞避免算法就是:每经过一个往返时间RTT就把发送方的拥塞窗口+1,即让拥塞窗口缓慢地增大,按照线性规律增长;

-7. 当出现网络拥塞,比如丢包时,将慢开始门限设为原先的一半,然后将cwnd设为1,执行慢开始算法(较低的起点,指数级增长);

上述方法的目的是在拥塞发生时循序减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完毕。慢开始和拥塞控制算法常常作为一个整体使用,而快重传和快恢复则是为了减少因为拥塞导致的数据包丢失带来的重传时间,从而避免传递无用的数据到网络。快重传的机制是:

-1. 接收方建立这样的机制,如果一个包丢失,则对后续的包继续发送针对该包的重传请求;

-2. 一旦发送方接收到三个一样的确认,就知道该包之后出现了错误,立刻重传该包;

-3. 此时发送方开始执行“快恢复”算法:

*1. 慢开始门限减半;

*2. cwnd设为慢开始门限减半后的数值;

*3. 执行拥塞避免算法(高起点,线性增长);

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1433

    浏览量

    83763
  • TCP协议
    +关注

    关注

    1

    文章

    101

    浏览量

    12819
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TCP/IP(Socket)协议深度剖析

    TCP/IP协议作为互联网通信的基础架构,其核心机制Socket编程承载着全球数据交换的使命。本文将深入剖析这一协议的七层架构、三次握手与四次挥手的精妙设计、流量控制
    的头像 发表于 03-03 17:06 785次阅读

    制药装备制造企业生产线自动化焊接设备通过EtherNet/IP转Modbus TCP协议转换网关与中央控制室的TCP协议控制系统

    一、项目背景与行业痛点  案例背景 华东地区某大型制药装备制造企业,生产线配备12台采用EtherNet/IP协议的自动化焊接设备作为从站,需要与中央控制室的TCP协议
    的头像 发表于 01-09 17:39 1304次阅读
    制药装备制造企业生产线自动化焊接设备通过EtherNet/IP转Modbus <b class='flag-5'>TCP</b><b class='flag-5'>协议</b>转换网关与中央<b class='flag-5'>控制</b>室的<b class='flag-5'>TCP</b><b class='flag-5'>协议</b><b class='flag-5'>控制</b>系统

    工业智能网关支持IEC104协议

    。工业智能网关通过内置协议栈或模块化设计,能够直接解析IEC104协议报文,支持以下核心功能: 数据采集 :实时采集电力设备(如变电站、发电厂)的遥测(电压、电流、功率等)、遥信(开关状态、故障信号)数据。 双向通信 :支持
    的头像 发表于 12-18 14:42 652次阅读
    工业智能网关支持IEC104<b class='flag-5'>协议</b>吗

    为什么会有TCP/IP协议

    见了面,完全不能交流信息。因而他们需要定义一些共通的东西来进行交流,TCP/IP就是为此而生。TCP/IP不是一个协议,而是一个协议族的统称。 里面包括了IP
    发表于 12-03 06:28

    生物疫苗生产精度保障依托总线协议的Modbus TCP 转 RTU案例

    在工业自动化领域的生物疫苗生产车间中,某企业采用威纶通 HMI(Modbus RTU 协议)负责发酵罐、纯化设备的实时操作监控与参数设定,搭配罗克韦尔 Micro800 系列 PLC(Modbus TCP 协议
    的头像 发表于 11-14 15:14 564次阅读
    生物疫苗生产精度保障依托总线<b class='flag-5'>协议</b>的Modbus <b class='flag-5'>TCP</b> 转 RTU案例

    智能物流立体仓库通讯困境:基于协议转换的Modbus TCP 转 Modbus RTU解决方案

    在工业自动化领域的智能物流自动化立体仓库中,塔讯 TX 131-RE-RS/TCP在某企业采用研华工控机(Modbus RTU 协议)负责仓储管理系统(WMS)的订单下发、库存统计,搭配三菱 Q 系列 PLC(Modbus TCP
    的头像 发表于 11-08 11:25 541次阅读
    智能物流立体仓库通讯困境:基于<b class='flag-5'>协议</b>转换的Modbus <b class='flag-5'>TCP</b> 转 Modbus RTU解决方案

    Modbus TCP与RTU协议详解:网关采集如何选?

    深控网关如何工作: 我们的高端系列网关具备多串口 + 网口的配置,可以同时接入RS-485总线上的RTU设备和网络上的TCP设备。网关作为一个数据汇聚点,将不同协议的数据统一采集、处理,并转换成标准协议(如MQTT、OPC UA
    的头像 发表于 11-04 10:34 640次阅读

    Modbus协议转HTTP协议,实现JSON格式对接MES等系统平台

    消息如下图: 此时即可用Modbus协议TCP客户端,或者RTU主站连接智能网关进行数据测试。在TCP客户端或者RTU主站根据寄存器地址写入数据,然后给HR9写入新的数值,就可以读取下载数据所对应
    发表于 10-27 10:33

    如何理解工业物联网网关的协议解析功能

    工业物联网网关的协议解析功能是其核心能力之一,它通过将不同工业设备使用的多样化通信协议转换为统一格式,实现异构设备间的无缝互联与数据交互。以下从功能定位、技术实现、应用场景三个维度展开分析: 一
    的头像 发表于 10-15 11:40 651次阅读

    解析DCQCN:RDMA在数据中心网络的关键拥塞控制协议

    DCQCN ( Data Center Quantized Congestion Notification),数据中心量化拥塞通知。它是一种专门为数据中心网络设计的端到端拥塞控制协议
    的头像 发表于 09-15 11:45 2084次阅读
    <b class='flag-5'>解析</b>DCQCN:RDMA在数据中心网络的关键<b class='flag-5'>拥塞</b><b class='flag-5'>控制</b><b class='flag-5'>协议</b>

    协议解析网关是什么?有什么功能?

    协议解析网关是一种位于不同网络或设备之间的中间件设备或软件系统,主要作用是解决不同通信协议之间的不兼容性问题。它能够接收来自不同设备或系统的数据包,识别其携带的协议格式(如Modbus
    的头像 发表于 08-13 14:04 1029次阅读
    <b class='flag-5'>协议</b><b class='flag-5'>解析</b>网关是什么?有什么功能?

    GraniStudio : TCP/IP(Socket)协议深度剖析

    在工业自动化与物联网领域,TCP/IP(Socket)协议作为应用最广泛的网络通信标准,是实现设备间数据交互的核心技术。GraniStudio 软件作为工业级零代码开发平台,其内置的 TCP/IP
    的头像 发表于 08-03 22:20 1357次阅读
    GraniStudio : <b class='flag-5'>TCP</b>/IP(Socket)<b class='flag-5'>协议</b>深度剖析

    如何测试协议分析仪的实时响应效率?

    )。 对复杂协议解析,优先使用专用协议芯片(如USB 3.x分析仪内置专用控制器)。 示例测试报告片段 [td]测试项目测试方法实测结果理论值性能达标率 10Gbps以太网吞吐量信号发
    发表于 07-24 14:19

    什么是Modbus TCP协议

    Modbus TCP是一种基于TCP/IP协议的Modbus通信协议,用于在客户机和服务器之间进行数据通信。它常用于工业自动化控制、电力监控
    的头像 发表于 07-23 17:18 4779次阅读
    什么是Modbus <b class='flag-5'>TCP</b><b class='flag-5'>协议</b>

    协议分析仪能监测哪些异常行为?

    。 检测方法:协议分析仪可解析非标准字段内容,结合威胁情报匹配已知隐蔽通道模式。 隧道攻击(Tunneling Attack) 实例: HTTP:将Modbus TCP流量封装在HTTP POST
    发表于 07-22 14:20