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

    文章

    1417

    浏览量

    82999
  • TCP协议
    +关注

    关注

    1

    文章

    101

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    为什么会有TCP/IP协议

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

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

    DCQCN ( Data Center Quantized Congestion Notification),数据中心量化拥塞通知。它是一种专门为数据中心网络设计的端到端拥塞控制协议
    的头像 发表于 09-15 11:45 1487次阅读
    <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 584次阅读
    <b class='flag-5'>协议</b><b class='flag-5'>解析</b>网关是什么?有什么功能?

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

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

    什么是Modbus TCP协议

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

    TCP协议的性能测试与评估方法

    的、基于字节流的传输层通信协议。它通过三次握手建立连接,使用序列号和确认应答机制保证数据的有序传输,并通过滑动窗口机制控制数据流量,以避免网络拥塞
    的头像 发表于 01-22 10:03 2200次阅读

    TCP协议的常见应用场景

    在现代通信网络中,TCP协议因其可靠性和稳定性而被广泛应用于各种场景。 1. 网页浏览 1.1 HTTP和HTTPS HTTP(超文本传输协议) :TCP是HTTP
    的头像 发表于 01-22 09:55 3294次阅读

    如何优化TCP协议的性能

    优化TCP协议的性能可以从多个方面入手,以下是一些关键的策略和方法: 一、调整TCP参数 TCP窗口大小 : 重要性 :
    的头像 发表于 01-22 09:52 1446次阅读

    TCP协议在网络通信中的应用

    的、基于字节流的传输层通信协议。它的主要任务是确保数据能够正确、完整地从一个网络端点传输到另一个端点。TCP通过三次握手建立连接,通过序列号和确认应答机制保证数据的顺序和完整性,通过滑动窗口
    的头像 发表于 01-22 09:50 1118次阅读

    TCP协议的安全性分析

    使用确认机制来确保数据段被正确接收。如果一个段丢失,发送方将重新发送该段。 流量控制TCP使用窗口大小来控制发送方发送数据的速率,以避免接收方被过多的数据淹没。
    的头像 发表于 01-22 09:48 1220次阅读

    TCP协议与UDP协议的区别

    。 UDP(用户数据报协议) : 无连接 :UDP不建立连接,数据可以直接发送,不需要任何握手过程。 不可靠性 :UDP不保证数据的可靠传输,数据包可能会丢失,不会重传。 2. 数据传输 TCP : 流控制
    的头像 发表于 01-22 09:44 1730次阅读

    什么是TCP协议及其工作原理

    协议之一。它提供了一种可靠的、有序的、基于字节流的数据传输服务。TCP协议的主要特点包括: 面向连接 :在数据传输之前,TCP需要在通信双方之间建立一个连接。 可靠传输 :
    的头像 发表于 01-22 09:41 2193次阅读

    TCP三次握手协议的作用

    在计算机网络中,数据的传输需要在发送方和接收方之间建立一个稳定的连接,以确保数据的完整性和顺序。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它通过三次握
    的头像 发表于 01-03 17:15 1438次阅读

    TCP-UART数据透传技术,居然如此简单!

    连接的、可靠的、基于字节流的传输层通信协议。它主要用于在不可靠的网络环境中提供稳定的数据传输服务,确保数据能够按照顺序、无错误地到达接收端。 TCP通过三次握手建立连接,使用滑动窗口
    的头像 发表于 12-30 16:46 917次阅读
    <b class='flag-5'>TCP</b>-UART数据透传技术,居然如此简单!

    TCP-UART透传示例~看完就会源码开放!

    连接的、可靠的、基于字节流的传输层通信协议。它主要用于在不可靠的网络环境中提供稳定的数据传输服务,确保数据能够按照顺序、无错误地到达接收端。 TCP通过三次握手建立连接,使用滑动窗口
    的头像 发表于 12-30 16:43 928次阅读
    <b class='flag-5'>TCP</b>-UART透传示例~看完就会源码开放!