3.7 TCP拥塞控制

在3.5.5流量控制中有,接收方通过维护一个rwnd来控制流量,本节中考虑三个问题:

  第一,  一个TCP发送方如何限制它向其他连接发送流量的速率。

  第二,  一个TCP发送方如何感知从发送方到目的方产生了拥塞。

  第三,  当发送方感知到拥塞,采取什么算法来改变发送速率。

第一个问题,一个TCP发送方如何限制它向其他连接发送流量的速率?

TCP连接每一端都由一个发送缓存,接收缓存和几个变量组成(这些在TCP连接的时候分配的),在发送方TCP拥塞控制机制跟踪一个额外的变量,拥塞控制窗口(cwnd),它对发送方能向网络中发送流量的速率进行了限制:

LastByteSent – LastByteAcked <= min { cwnd, rwnd};

上式左边表示是的未确认量,这个很容易理解,未被确认的就是还在传输过程中,或者是ACK还在传输过程中的未被确认的一定要小于rwnd这个必须得,多了就会丢包,发送端控制不了rwnd(因为是接收端的变量),所以通过可控制cwnd来控制发送方的速率。

第二个问题,一个TCP发送方如何感知从发送方到目的方产生了拥塞?

TCP把丢包定义为:超时和收到3个冗余ACK。拥塞时,可能是路由器的缓存满了,来了数据传输速率太快了,来不及发,只能存到缓存里,但是缓存也满了只能丢弃,这样就造成了丢包。当出现丢包的时候,发送方就会意识到已经遇到拥塞了。

第三个问题,感知到拥塞后,什么算法改变发送速率?

这就是下面要将的了!

1.  慢启动

  发送方通过控制cwnd来控制发送速率。

开始的时候cwnd的值通常初始置为一个MSS的最小值,发送方想快速的找到可用带宽的数量。

每当报文段首部被确认,cwnd就会增加一个MSS,所以一个拥塞窗口的报文段都被确认之后,cwnd会增加一倍。就会是1,2,4,8…这样增长。

什么时候停止增长呐?

当出现超时或者丢包(拥塞了),TCP发送方会将cwnd设置为1,同时用变量ssthresh(“慢启动阈(yu)值”的速记)设置为拥塞窗口值得一半。当cwnd超过ssthresh时再翻倍就可能会拥塞了,所以此时转入拥塞避免。

2.  拥塞避免

拥塞避免就是在拥塞窗口内的报文全部确认后增加的长度为1MSS,也就是说每收到一个确认报文就增加MSS / cwnd。

何时停止增长?

和慢启动一样,拥塞了,cwnd置1,然后ssthresh标记为cwnd / 2,当cwnd大于等于ssthresh时进入快速恢复。

3.快速恢复

在快速恢复中,初始cwnd不置为1(也就是说不会在进行慢启动),首先cwnd = cwnd / 2,ssthresh = cwnd,,然后开始快速恢复:

1. 设置cwnd = ssthresh+ACK个数*MSS(一般情况下会是3个dup ACK)

2. 重传丢失的数据包

3. 如果只收到Dup ACK,那么cwnd = cwnd + 1, 并且在允许的条件下发送一个报文段

4. 如果收到新的ACK, 设置cwnd = ssthresh, 进入拥塞避免阶段

最后给出流程图(摘自博客园:http://www.cnblogs.com/stemon/p/4784142.html):

3.7 TCP拥塞控制的更多相关文章

  1. TCP拥塞控制

    TCP必须使用端到端拥塞控制而不是使网络辅助的拥塞控制,因为IP层不向端系统提供显式的网络拥塞反馈.TCP采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率. 几个相关 ...

  2. [置顶] NS2中TCP拥塞控制仿真过程中盲点解析

    最近利用NS2做TCP拥塞控制协议的仿真,发现很多变量的方法含义都是解释的不清楚,给核心模块修改带来很多麻烦,所以决定用最准确的语言解释成员变量.方法,术语等的含义.限于个人水平,若有错误请留言指正! ...

  3. s6-8 TCP 拥塞控制

    TCP 拥塞控制  虽然网络层也试图管理拥塞,但是,大多数繁重的任务是由TCP来完成的,因为针对拥塞的真正解决方案是减慢数据率  分组守恒:当有一个老的分组离开之后才允许新的分组注入网络  TC ...

  4. TCP/IP 笔记 - TCP拥塞控制

    拥塞控制是TCP通信的每一方需要执行的一系列行为,这些行为有特定算法规定,用于防止网络因为大规模的通信负载而瘫痪.其基本方法是当有理由认为网络即将进入拥塞状态(或已由于拥塞而出现路由丢包情况)时减缓T ...

  5. TCP拥塞控制机制

     研究TCP的拥塞机制,不仅仅是想了解TCP如何的精巧,更多的是领悟其设计思想,即在一般情况下,我们该怎样处理问题.   一.拥塞的发生与其不可避免    拥塞发生的主要原因:在于网络能够提供的资源不 ...

  6. TCP拥塞控制及连接管理

    在阅读此篇之前,博主强烈建议先看看TCP可靠传输及流量控制. 一.TCP拥塞控制 在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion ...

  7. 牛客网Java刷题知识点之拥塞发生的主要原因、TCP拥塞控制、TCP流量控制、TCP拥塞控制的四大过程(慢启动、拥塞避免、快速重传、快速恢复)

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  8. 计算机网络概述 传输层 TCP拥塞控制

    TCP拥塞控制 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就 ...

  9. 现代互联网的TCP拥塞控制(CC)算法评谈

    动机 写这篇文章本质上的动机是因为前天发了一个朋友圈,见最后的写在最后,但实际上,我早就想总结总结TCP拥塞控制算法点点滴滴了,上周总结了一张图,这周接着那些,写点文字. 前些天,Linux中国微信公 ...

随机推荐

  1. R Language Learn Notes

    One #install package install.packages("ggplot2") #load library library(ggplot2) #update.pa ...

  2. html学习第一天

    由于之后想做个网站,所以web前端的也要学习一下. 昨天看了一下html,今天做一下记录. 首先是安装工具,用文本编辑器有点麻烦,我选择的是强大的 Dreamweaver CS6,不过大家喜欢文本编辑 ...

  3. Spring 定时任务Scheduled 开发详细图文

    Spring 定时任务Scheduled 开发 文章目录 一.前言 1.1 定时任务 1.2 开发环境 1.3 技术实现 二.创建包含WEB.xml 的Maven 项目 2.1 创建多模块项目task ...

  4. 前端基础HTML

    web的服务本质 浏览器发送请求>>>HTTP协议>>>服务端接受请求>>>服务端返回响应>>>服务端把HTML文件内容发给浏览 ...

  5. Blockchain For Dummies(IBM Limited Edition

    Blockchain For Dummies(IBM Limited Edition)笔记 该系列内容主要介绍用于商业的区块链,有人说区块链之于贸易,犹如因特网之于信息.在商业领域区块链可以用于交易任 ...

  6. HTML5+Bootstrap 学习笔记 4

    HTML5 <map> <area> 标签 <map> 标签定义客户端的图像映射.图像映射是带有可点击区域的图像. <area> 标签定义图像映射内部的 ...

  7. ntp时钟服务器配置

    集群中时间不同步有可能会让大数据的应用程序运行混乱,造成不可预知的问题,比如Hbase,当时间差别过大时就会挂掉,所以在大数据集群中,ntp服务,应该作为一种基础的服务,以下在演示在CentOS 7. ...

  8. php memcache 使用学习

    Memcache是什么Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力.它可以应对任 ...

  9. 3. IP地址转换函数

    一.字符串表示的IP地址需要被转化为整数(二进制数)方能使用 IPv4地址:点分十进制字符串 IPv6地址:十六进制字符串 有时(如记录日志),我们则要把整数(二进制数)表示的IP地址转化为可读的字符 ...

  10. Cube Stacking P0J 1988(加权并查集)

    Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes ...