写在前面:本文章是针对《计算机网络第七版》的学习笔记

运输层1——运输层协议概述

运输层2——用户数据报协议UDP

运输层3——传输控制协议TCP概述

运输层4——TCP可靠运输的工作原理

运输层5——TCP报文段的首部格式

运输层6——TCP可靠传输的实现

运输层7——TCP的流量控制和拥塞控制

运输层8——TCP运输连接管理

1. TCP的流量控制

所谓流量控制,就是让发送方的发送速率不要太快,要让接收方来得及接收。

利用滑动窗口实现流量控制

  • 设A向B发送数据,在建立连接时,B告诉A它的接收窗口大小是rwnd = 400,发送方的发送窗口的大小不能超过接收方的接收窗口的大小。设每一个报文段的大小是100字节,初始时序号为1。

  • B进行了3个流量控制。第一次将窗口大小降为300,第二次降为100,第三次降为0。降为0时,发送方A将停止发送直到B发送新的窗口值为止。B向A发送的三个报文段的ACK=1,只有在ACK=1时确认字段才有效。

  • 但是如果B一直没有发送新的窗口值,这种死锁情况会一直持续。为了解决这个问题,TCP为每一个连接设有一个持续计时器。只要发送方收到窗口为0的确认报文就开启,若持续计时器设置的时间到了,就发送一个零窗口的探测报文段(仅仅一个字节),而对方在接收到了这个报文段后就确认并发送新的窗口值,如果窗口值仍为0,则重置持续计时器,继续计时。

2. TCP的拥塞控制

为什么出现拥塞?

  • 网络中的带宽资源、交换节点的缓存以及处理机等资源有限,当对资源的需求大于可用的资源时,则会出现拥塞。

拥塞控制与流量控制的区别?

  • 拥塞控制与流量控制关系密切。拥塞控制就是防止过多的数据注入到网络,这样使网络中的链路或路由器不至于过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程。

  • 而流量控制往往是点对点的控制,是端到端的问题(接收到控制发送端)。流量控制就是抑制发送端发送数据的速率,以便接收端来得及接收。

拥塞控制的方法

TCP进行拥塞控制的方法主要有四种:慢开始、拥塞避免、快重传、快恢复。我们先假定:

  • 数据是单方面传输的,对方只传送确认报文;

  • 接收方总是有足够大的缓存空间,因而发送窗口的大小由网络的拥塞程度确定。

我们讨论的是基于窗口的拥塞控制。首先,发送方维持一个叫做拥塞窗口cwnd的状态变量。发送方让自己的发送窗口等于拥塞窗口。

判断网络出现拥塞的依据:是否出现了超时。

慢开始算法: 当主机开始发送数据时,由小到大的增大窗口值。初始窗口值设为不超过2-4个SMSS(最大报文段)的数值。慢开始规定,每收到一个对新的报文段的确认后:

拥塞窗口cwnd每次增加的量 = min(N,SMSS)

其中N是原先未被确认的,但是刚刚收到的确认报文段所确认的字节数。

  • 一开始设置cwnd = 1,发送第一个报文段M1,接收方收到后确认M1;

  • 收到M1的确认后,cwnd设置为2,并发送M2,M3,接收方确认M2,M3;

  • 收到M2,M3的确认后,cwnd设置为4,并发送M4,M5,M5,M7;

  • ......

在TCP的实际运行中,发送方只要收到一个对新报文段的确认,其拥塞窗口cwnd就立即加1,并可以立即发送新的报文段,而不需要等这个轮次中所有的确认都收到后再发送新的报文段。

为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。慢开始门限ssthresh的用法:

  • 当cwnd<ssthresh时,使用上述的慢开始算法;

  • 当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法;

  • 当cwnd=ssthresh时,既可以使用慢开始算法,也可以使用拥塞避免算法。

拥塞避免算法 :让cwnd缓慢的增大(线性),即每次经过一个RDD时间就把发送方的拥塞窗口加1。因此,拥塞避免阶段就有“加法增大”的特点。

如图:

  • 初始时,将cwnd设为1,慢开始门限值设为ssthresh = 16,一开始先采用慢开始算法进行指数增长,直到cwnd=16;

  • 当cwnd=16时,采用拥塞避免算法,cwnd开始线性增长;

  • 当cwnd=24时,网络出现的超时,判断为拥塞情况。于是将ssthresh设为当前cwnd的一半,也就是12,同时设置cwnd为1,重新开始慢开始算法;

  • 当cwnd=12时,开始执行拥塞避免算法;

  • 假设在cwnd=16时,出现了一个新的情况,就是发送方一连收到三个对同一个报文段的重复确认。这是因为:个别报文会在网络中丢失,但是网络并未发生拥塞,如果发送方迟迟收不到确认,就会产生超时,就会误认为网络发生了拥塞,错误的导致发送方启动慢开始,降低了传输效率。

快重传算法: 采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是立即发送确认,即使收到失序的报文段也发送对已收到报文段的重复确认。如上图,M1和M2都收到了确认,但是M3丢失了,因此在发送M4,M5,M6时接收方要重复发送对M2的确认。当发送方收到3个连续的M2确认后,就知道M3丢失了,因此立即重传M3,这时就不会出现超时。快重传算法使网络吞吐量增大20%。

发送方知道只是丢失了个别报文段,因此不重启慢开始算法,而是使用快恢复算法。

快恢复算法: 发送方将门限值ssthresh设为cwnd的一半,并将cnwd设为门限值,开始执行拥塞避免算法。快恢复算法具有“乘法减小”特点。

当然也有的快恢复算法是把cwnd再增大一些(+3),因为受到3个重复的确认,表明有三个分组离开了网络,这三个分组不占用网络的资源而是存储在接收方的缓存中,因此cwnd可以扩大3。

另外,发送窗口的大小不能大于接收窗口的大小。

运输层7——TCP的流量控制和拥塞控制的更多相关文章

  1. TCP的流量控制与拥塞控制小结

    概述 为了提高信道的利用率TCP协议不使用停止等待协议,而是使用连续ARQ协议,意思就是可以连续发出若干个分组然后等待确认,而不是发送一个分组就停止并等待该分组的确认.其中TCP的流量控制与拥塞控制是 ...

  2. TCP 的三次握手和四次挥手,TCP 的流量控制和拥塞控制

    70.TCP协议的三次握手与四次挥手70.1.TCP报文结构   1.源端口号:表示发送端端口号,字段长为16位.  2.目标端口号:表示接收端口号,字段长为16位.  3.序列号:表示发送数据的位置 ...

  3. TCP的流量控制和拥塞控制

    1.TCP的流量控制 一般说来,我们总是希望数据传输的更快一些.但如果发送方吧数据发送的过快,接收方就可能来不及接收,就会造成数据的丢失.所谓的流量控制就是让发送方的发送速率不要太快,要让接收方来的及 ...

  4. TCP/IP详解学习笔记(15)-- TCP的流量控制和拥塞控制

    TCP的流量控制 1.概述      所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接受.利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制.TCP的窗口单位是字节,不是报 ...

  5. 【计算机网络】TCP的流量控制和拥塞控制

    TCP的流量控制 1. 利用滑动窗口实现流量控制 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失.所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收. 利用滑动 ...

  6. NetWork——TCP的流量控制和拥塞控制

    ,然后开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大. 这里为什么替换掉了慢开始算法呢,这是因为收到重复的ACK不仅仅告诉我们一个分组丢失了,由于接收方只有在收到另一个报文段时才会产生重复的ACK,所 ...

  7. 快速了解TCP的流量控制与拥塞控制

    有关TCP你不能不知道的三次握手和四次挥手问题,点我跳转 流量控制 1. 滑动窗口 数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失.利用滑动窗口机制可以很方便 ...

  8. 运输层5——TCP报文段的首部格式

    写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3--传输控制协议TCP概述 运输层4--TCP可靠运输的工作原理 ...

  9. 运输层8——TCP运输连接管理

    目录 1. TCP的连接建立 2. TCP的连接释放 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3--传输控 ...

随机推荐

  1. Tools - 在线编译环境和工具汇总

    菜鸟教程 https://www.runoob.com/ 支持语言种类丰富,无需注册,包含教程.笔记.手册等内容. 菜鸟在线工具:https://c.runoob.com/ 菜鸟在线编译器:https ...

  2. CentOS 7 搭建 GitLab

    概述 GitLab 是我在日常工作中使用的代码仓库管理系统,它带有非常友好的 Web 界面,并且功能丰富.下面将介绍我在 CentOS 7 上搭建 GitLab 的步骤,以及遇到的一些问题. 关于不同 ...

  3. css 修改placeholder样式

    input::-webkit-input-placeholder{ color:red; } input::-moz-placeholder{ /* Mozilla Firefox 19+ */ co ...

  4. php面向对象(文件操作)

    文件操作 1.只能操作服务器的文件 2.文件包含目录和文件 判断文件类型 var_dump(filetype("../0529")); //返回文件的类型:目录dir 文件file ...

  5. lnmp 是不是该吐吐槽

    lnmp 提供提供了便捷 , 并且手也伸的挺长的,它已不仅仅是个服务器环境那么简单 作为服务器继承环境来讲,可能每个人的认知程度不一,总之用了它需要服从它的规则 但从个人感觉上,其埋的坑还是让人不适, ...

  6. Python-05-字符串格式化

    一.百分号方式 %[(name)][flags][width].[precision]typecode (name)      可选,用于选择指定的key flags          可选,可供选择 ...

  7. nmap使用帮助翻译

    Nmap 7.60 ( https://nmap.org )Usage: nmap [扫描类型] [操作] {目标说明}目标说明:  可以识别主机名.IP地址.网络,等等.  例如: scanme.n ...

  8. js 自定义加减乘除方法(防止js自身计算错误)

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. (转) 嵌入式 Linux 利用 udev 实现自动检测挂载U盘

    本文链接:https://blog.csdn.net/cfl927096306/article/details/95180940 udev配置文件是/etc/udev/udev.conf,也许长这样: ...

  10. Nokia5130不能上网

    说明 我是一个挺怀旧的人,一直想入手一个好几年前买的Nokia5130. 于是昨天在淘宝上买了一个,花了我一百多.不过早就停产了,买到的自然是翻新机. 收到货的时候,看似一切美好,但是下载了个uc的j ...