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

    文章

    1269

    浏览量

    78270
  • TCP协议
    +关注

    关注

    1

    文章

    83

    浏览量

    12004
收藏 人收藏

    评论

    相关推荐

    TCP协议中的拥塞控制机制与网络稳定性

    TCP协议中的拥塞控制机制与网络稳定性的深度探讨 随着互联网的快速发展,网络流量呈现爆炸式增长,网络拥塞问题逐渐凸显。为了维护网络的稳定运行
    的头像 发表于 04-19 16:42 96次阅读

    TCP协议技术之拥塞控制算法

    拥塞控制是在网络层和传输层进行的功能。在网络层,拥塞控制可以通过路由算法来控制数据包在网络中的传输,以降低网络
    的头像 发表于 02-03 17:06 1006次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>协议</b>技术之<b class='flag-5'>拥塞</b><b class='flag-5'>控制</b>算法

    TCP协议技术之自适应重传

    自适应重传是TCP协议中的一种拥塞控制机制,旨在通过智能的方式处理网络拥塞,并进行相应的数据重传,以提高网络的可靠性和性能。
    的头像 发表于 02-03 17:03 816次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>协议</b>技术之自适应重传

    TCP传输控制协议知识科普拓展

    传输控制协议TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
    的头像 发表于 11-27 17:46 636次阅读
    <b class='flag-5'>TCP</b>传输<b class='flag-5'>控制</b><b class='flag-5'>协议</b>知识科普拓展

    TCP 协议深度解析

    从字面上来看,很多人会认为 TCP/IP 是 TCP、IP 这两种协议,实际上TCP/IP 协议族指的是在 IP
    的头像 发表于 11-09 11:19 382次阅读
    <b class='flag-5'>TCP</b> <b class='flag-5'>协议</b>深度<b class='flag-5'>解析</b>

    TCP协议详细解析

    TCPTCP/IP协议族中一个最核心的协议,它向下使用网络层IP协议,向上为应用层HTTP、FTP、SMTP、POP3、SSH、Telne
    的头像 发表于 11-03 09:14 1553次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>协议</b>详细<b class='flag-5'>解析</b>

    TCP/IP协议和OPC协议的区别

    随着计算机网络技术的飞速发展,网络通信已经成为现代工业自动化控制系统中不可或缺的一部分。在众多的网络通信协议中,传输控制协议TCP)和网际
    的头像 发表于 10-20 17:34 1746次阅读

    Mobdus_TCP协议如何使用?

    网关支持标准的__Modbus-TCP__协议,支持Modbus-TCP协议的设备(例如智能仪表、电表等),都可以通过此协议直接通讯,实现远
    的头像 发表于 08-16 16:57 534次阅读
    Mobdus_<b class='flag-5'>TCP</b><b class='flag-5'>协议</b>如何使用?

    TCP/IP协议不止是两个协议

    TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的
    的头像 发表于 07-31 23:07 783次阅读
    <b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b>不止是两个<b class='flag-5'>协议</b>

    TCP/IP协议进阶课程:6、TCP协议

    电子发烧友网站提供《TCP/IP协议进阶课程:6、TCP协议.pdf》资料免费下载
    发表于 07-31 11:47 1次下载
    <b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b>进阶课程:6、<b class='flag-5'>TCP</b><b class='flag-5'>协议</b>

    TCP/IP协议包括哪些协议 一文详解TCP/IP协议

    TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的
    发表于 07-21 09:56 6525次阅读
    <b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b>包括哪些<b class='flag-5'>协议</b> 一文详解<b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b>

    网络通信OSI协议TCP/IP协议

    TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的
    发表于 05-06 17:06 1790次阅读

    TCP/IP协议的特点

    可靠性和性能: TCP/IP协议的传输层TCP协议,提供了高可靠的数据传输服务,保证数据的完整性和顺序性,并且具有流量控制
    发表于 05-06 15:15 7513次阅读

    TCP/IP协议的组成

    TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议
    发表于 05-06 15:05 1792次阅读

    什么是TCP/IP协议

    TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/网际互联协议,又名网络通讯
    发表于 05-06 15:01 2522次阅读