TCP拥塞控制原理

TCP拥塞控制原理TCP拥塞控制原理:TCP使用的是端到端的拥塞控制而不是网络辅助的拥塞控制,因为IP曾不想端系统提供显示的网络拥塞反馈。TCP采用的方法是让每一个发送方根据所感知到的网络拥塞的程度,来限制其能向连接发送流量的速率。这种方法有三个问题: 一个TCP发送方是如何限制向连接发送流量的速率? 一个TCP发送方是如何感知它到目的地之间的路径上存在拥塞的呢?

大家好,又见面了,我是你们的朋友全栈君。

TCP拥塞控制原理:


TCP使用的是端到端的拥塞控制而不是网络辅助的拥塞控制,因为IP层不向端系统提供显示的网络拥塞反馈。

TCP采用的方法是让每一个发送方根据所感知到的网络拥塞的程度,来限制其能向连接发送流量的速率。


这种方法有三个问题:
  <1>一个TCP发送方是如何限制向连接发送流量的速率?
  <2>一个TCP发送方是如何感知它到目的地之间的路径上存在拥塞的呢?
  <3>当发送方感知网络拥塞时,采用什么算法来改变其发送速率的?


对于问题<1>:

  TCP连接的每一端都由一个接收缓存,一个发送缓存和几个变量(LastByteRead,RcvWindow等)组成。TCP拥塞控制机制让连接的每一端都记录一个额外的变量,即拥塞窗口(congestion window)。拥塞窗口表示为congwin,他能限制一个TCP发送方向网络中发送流量的速率。特别是在一个发送方中从未被确认的数据量不会超过congwin与RcvWindow中的最小值,即:LastByteSent-LastByteAcked <= min{congwin, RcvWindow};

上面约束了发送方中未被确认的数量,因此间接地限制了发送方的发送速率。

拥塞窗口(congestion window)指某一源端数据流在一个RTT内可以最多发送的数据包数。发送端根据网络拥塞程度所预设的一个大小值,这个值就是拥塞窗口。


对于问题<2>:

  我们定义一个TCP发送方的“丢包事件”为:要么出现超时,要么收到来自接收方的3个冗余ACK。

当出现过度拥塞时,这条路径上一台(或多台)路由器的缓存会溢出,导致数据报(包含一个TCP报文段)被丢弃。丢弃的数据包会引起发送方的丢失事件(要么超时,要么收到3个冗余ACK),发送方就此认为在源到目的的路径上出现了拥塞指示。


对于问题<3>:

  TCP拥塞控制算法(TCP congestion control algorithm),包含三个部分:1、加性增(additive-increase)、乘性减(multiplicative-decrease)。2、慢启动(slow start)。3、对超时事件做出反应


1、加性增、乘性减(additive-increase multiplicative-decrease,AIMD
  TCP拥塞控制的思想:当出现丢包事件时,让发送方降低其发送速率(通过减小拥塞窗口congwin的大小)。

(因为:通过该相同的拥塞路由器的其他TCP连接也很可能出现丢包事件,所以他们也可能会减小其congwin的值来降低发送速率,因此该整体作用是让所有通过这一拥塞路由器路径的源降低他们向网络发送数据的速率,从而减轻了拥塞路由器的拥塞程度)


但是当出现丢包事件后,TCP发送方应将其拥塞窗口减少多少呢?
  TCP采用一种“乘性减”的方法,即每发生一次丢包事件,就将当前的congwin值减半。但是不能降低到低于1个MSS。


那么当网络无拥塞的时候,即对前面的还没有确认的数据有ACK到达时,他应该怎样来扩大其发送速率?

   增大发送速率的基本原理是:如果没有检测到拥塞,则可能有可用(未使用的)宽带可被该TCP连接使用。这种情况下TCP缓慢地拥塞窗口的长度,谨慎地探测端到端路径上的额外的可用宽带。TCP发送方是这样做的,即每次它接收到一个确认后就把congwin增大一点,其目标是在每个往返时延内congwin增加一个MSS。
总而言之,当TCP发送方感受到端到端路径无拥塞时就加性地增加其发送速率,当察觉到路径拥塞时(通过丢包事件)就乘性地减小其发送速率,因此被称为加性增、乘性减算法


TCP拥塞控制协议的线性增长阶段被称为避免拥塞(congestion avoidance)。congwin值重复地经历一种升降循环,即重复地线性增长,然后又突然降至其当前值的一半(当发生丢包事件时),这种循环是的长寿命TCP连接的congwin变化呈锯齿形状。


             
TCP拥塞控制原理

2、慢启动(slow start,SS):
  当一个TCP连接开始时congwin的值初始设置为1一个MSS,这就使得初始发送速率大约为:MSS/RTT。


  TCP发送方初始阶段不是线性地增加其发送率,而是以指数的速度增加,即每过一个RTT将congwin值翻倍。TCP发送方继续以指数速度增加其发送速率,知道发生一个丢包事件为止,此时congwin将被降为一半,然后再线性地增长,这个被称为慢启动(slow start,SS)的初始化阶段。在慢启动阶段,每过一个RTT,congwin的值将有效地增加一倍。


3、对超时事件做出反应:

  TCP拥塞控制对因超时而检测到的丢包事件做出的反应与因受到3个冗余ACK而检测到的丢包事件做出的反应是不同的。收到3个冗余ACK后,TCP将拥塞窗口减小一半,然后先行地增长。但是超时事件发生时TCP发送方进入一个慢启动阶段,即他将拥塞窗口设置为1MSS,然后窗口以指数速度增长。拥塞窗口持续以指数速率增长,直到congwin达到超时事件前窗口值得一半为止。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152756.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Hadoop入门(八)——本地运行模式+完全分布模式案例详解,实现WordCount和集群分发脚本xsync快速配置环境变量 (图文详解步骤2021)[通俗易懂]

    Hadoop入门(八)——本地运行模式+完全分布模式案例详解,实现WordCount和集群分发脚本xsync快速配置环境变量 (图文详解步骤2021)[通俗易懂]Hadoop运行模式1)Hadoop官方网站:http://hadoop.apache.org/2)Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。完全分布式模式:多台服务器组成分布式环境。生产环境使用。本地运行模式(官方WordCount案例)1

    2022年6月2日
    40
  • Root apk 2021_proguard混淆jar包

    Root apk 2021_proguard混淆jar包backdoor-apk从名字上我们就能知道它的用途了,没错就是用来制作APK后门的。这款工具使用起来非常方便,而且功能也很强大!话不多说,下面我们直接进入正题。首先,让我们对它进行安装,在安装前我们需要先安装它的一些依赖lib库文件:apt-getinstalllib32stdc++6lib32ncurses5lib32z1这里询问我们,对这些安装的服务,当他们更新时不再进行询…

    2022年8月20日
    9
  • webservice示例

    webservice示例webservice示例:webservice是什么:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序

    2022年7月1日
    28
  • 0范数 无穷范数 上确界[通俗易懂]

    无穷范数——向量中最大元素的绝对值0范数——向量中非0的元素的个数(或#表示)1范数参考上篇文章:范数概念 “上确界”的概念是数学分析中最基本的概念。考虑一个实数集合M.如果有一个实数S,使得M中任何数都不超过S,那么就称S是M的一个上界。  在所有那些上界中如果有一个最小的上界,就称为M的上确界。  一个有界数集有无

    2022年4月8日
    96
  • 特殊文字符号小动物

    特殊文字符号小动物特殊符号[“????”,“????”,“????”,“????”,“????”,“????”,“????”,“????”,“????”,“????”,“????”,“????”,“????”,“????”]

    2022年5月22日
    96
  • 在这个被欲望和利益所支配的世界里英文_每个人都想着自己的利益

    在这个被欲望和利益所支配的世界里英文_每个人都想着自己的利益剩下的那点酒精再次滑过嘴角,才感觉到一丝凉意。谁说酒精可以麻醉人的思维,可以暂时忘掉想忘的一切,骗人的,都是骗人的。我依然很清醒。 不可否认,这的确是一个被欲望和利益所支配的世界,无数人这样告诉我。现在终于看明白了。没有谁是能让我相信的了。人们的脑子里想的只有自己的欲望。无休止的欲望,肮脏的欲望。朋友一直告诉我,反反复复的告诉我,不要相信别人,至少不要这么轻易的相信一个人,没有人知道谁的好或者坏。

    2022年9月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号