47、TCP的流量控制

这篇具有很好参考价值的文章主要介绍了47、TCP的流量控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

从这一节开始,我们学习通信双方应用进程建立TCP连接之后,数据传输过程中,TCP有哪些机制保证传输可靠性的。本节先学习第一种机制:流量控制。


窗口与流量控制

首先,我们要知道的是:什么是流量控制?使用流量控制是为了解决什么问题?

在这之前,我们学习过“接收窗口”的概念,其实也就是接收缓存的大小,能够容纳多少字节的数据,这个数值是有限的。所以接收窗口在容纳了足够的数据量之后,就没有缓存再接收对方发来的数据了。如果这时对方还在不断地发来数据,那么这些数据到达接收方之后,接收方由于没有空余的空间来容纳,来不及接收,就只能把它们丢弃掉。

所以,必须要有一种机制能够解决这种问题,这就是流量控制。流量控制就是为了能够控制发送方的发送速率,使其不要太快,要能够让接收方来得及处理

可以用比较经典的原理图来说明流量控制,如下图:

47、TCP的流量控制,计算机网络(TCP/IP原理),tcp/ip,网络

在这个图中,为了方便叙述原理,假设发送方只简单的发送数据,接收方只简单的接收数据,并设置接收方的接收窗口大小为400个字节。

一开始,发送方发送了两个大小为100字节数据的报文段,接收方收到后进行确认回复:ack=201,rwnd=200。意思是,截止到序号为200的报文,我已经都收到了,我期望你下一个发来的报文的序号是201,现在我的接收窗口大小是200字节,你最多再给我发200字节的数据。

发送方知道这个情况之后,接着发送了200个字节的数据。这时候接收方给出接收窗口大小为0的确认报文,告诉发送方:我目前已经没有接收缓存了,暂时先不要发送数据了。

接收方通过在确认报文中给出自己当前接收窗口的大小,使发送方知道应该向对方发送多少数据量,就是TCP流量控制的方法。


“零窗口”死锁现象

了解了上面流量控制的过程之后,可能会想一个问题:接收方最后发送窗口值大小为零的确认报文之后,发送方就会暂停发送数据,等待接收方告诉缓存有空间了再继续发送。可是如果接收方将“缓存有空间”的消息告诉发送方的时候,这个消息不巧在传输过程中丢失了,那么发送方会不会一直等下去呢?

这个现象就叫做“零窗口”死锁现象,由于发送方没收到“接收方缓存有空间”的消息,所以发送方一直以为接收方当前接收缓存没有空间。所以双方就会产生这样一种“死锁”的局面

为了解决这种死锁问题,所以每一个TCP连接都会设置有一个“坚持定时器”。这个定时器的作用是:从收到对方发来“窗口大小为零”的报文开始,启动定时器,等到定时器到期如果还没有收到对方发来“接收缓存有空间”的消息,那么就主动向对方发送一个“零窗口探测”报文,这个探测报文只带有一个字节的数据,目的就是为了探测一下对方窗口大小有没有改变。

对方收到这个探测报文后,给出确认报文,其中包含了当前窗口值,如果当前窗口值已经不是零了,这个死锁的局面就打破了,发送方可以继续发送数据;但如果当前窗口值仍然为零,那么发送方将再次启动“坚持定时器”,时间到就再次发送探测报文。

学到这里,又出现一个问题:既然接收方的窗口值都为零了,也就意味着接收方不能再接收数据了,那么为什么发送方的“零窗口探测”报文能被接受呢?

这其实是TCP的一个规定:当接收窗口大小为零时,也必须接收“零窗口探测”报文。还有一个前面学过的,首部中URG位被设置为1的紧急报文,也是即使窗口值为零时必须被接收。


糊涂窗口综合症

糊涂窗口综合症主要反映的是:接收方应用进程和接收缓存交互数据的时候效率低下,从而导致TCP传输效率低下的问题。

比如这样一个情景:接收方的窗口值为零,意味着当前接收缓存已满,但是上层的应用进程一次只读取一个字节的数据,这样缓存中就有了一个字节的空间,这时接收方给发送方发出确认,表明自己的接收窗口值是1,你可以发来1个字节的数据。

这样的话,可以想一下,发送方要把这一个字节的数据加上至少20字节的TCP首部,再加上至少20字节的IP首部,层层封装,就会造成传输首部信息的开销大,而实际的有用数据才只有一个字节。如此反复,一次只有一个字节的有效数据在传输,就导致TCP传输效率的低下,这就是糊涂窗口综合症的现象。

要解决这种问题,可以在接收方和发送方分别设置一些机制,双方配合起来,使得接收方不要有了一点空间就立即发送确认报文,同时发送方也不要每次只发送一个很小的报文段。

可以在接收方设置:等到缓存中有了能够容纳一个最大长度报文段的空间时,或者缓存空间有一半是空余的,就可以给发送方发去确认,通告自己的接收窗口大小。

也可以在发送方使用Nagle算法:当数据已达到发送窗口大小的一半或已达到报文段的最大长度时,就立即发送一个报文段。

两种方法配合起来使用,可以有效避免糊涂窗口综合症的现象发生。


本节内容我们学习了TCP规定在数据传输过程中的流量控制的方法原理,另外还介绍了“零窗口”死锁和糊涂窗口综合症两个可能会发生的问题和相应的解决办法。下一节,我们学习TCP的可靠传输。

参考教材:杨英鹏《计算机网络原理与实践》文章来源地址https://www.toymoban.com/news/detail-695331.html

到了这里,关于47、TCP的流量控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机网络TCP篇之流量控制

    今天谈一谈我对于tcp流量控制的看法 在网络拓扑中如果发送方节点的发送速率大于接受方节点的接受速率,数据会不断在接受方的缓冲区累积,直到接受方的缓冲区满的时候,发送方继续发送数据,这时候接受方无法存放这些数据,就只能将数据包丢掉,这样就消耗了网络资

    2024年02月07日
    浏览(51)
  • TCP/IP 下的计算机网络江湖

            在当今数字化时代,计算机网络宛如广袤江湖,涵盖着五大门派:物理层、数据链路层、网络层、传输层和应用层。每个门派独具技能,共同构筑着现代网络的框架。物理层宛如江湖基石,将比特流传输;数据链路层如武林传承,组织数据帧传递;网络层则像导航

    2024年02月13日
    浏览(39)
  • 计算机网络笔记:TCP的拥塞控制方法

    TCP的拥塞控制算法有四种,分别是慢开始、拥塞避免、快重传和快恢复。 拥塞窗口 : 基本概念 :发送方维持一个叫做拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且是动态变化着的。发送方让自己的发送窗口等于拥塞窗口。 发送方控制拥塞窗口的原则

    2024年02月10日
    浏览(47)
  • 计算机网络笔记:计算机网络体系结构(OSI七层模型、TCP/IP五层协议)

    计算机网络是一个复杂的、具有综合性技术的系统,它由计算机系统、通信处理机、通信线路和通信设备、操作系统以及网络协议等组成。为了更好地描述计算机网络结构,使计算机网络系统有条不紊地处理工作,需要定义一种较好的网络体系结构。分层结构就是一种较好地

    2024年02月07日
    浏览(55)
  • 【计算机网络】TCP传输控制协议——三次握手

    一开始,客户端和服务端都处于CLOSE状态,先是服务端监听某个端口,处于LISTEN状态。 然后客户端主动发起连接SYN,之后处于SYN-SEND状态。 服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,之后处于SYN-RECV状态。 客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,之后处

    2024年02月09日
    浏览(49)
  • 计算机网络—网络原理之<TCP/IP 五层协议 >图解+详述

    当应用程序间需要进行网络通讯,在 TCP/IP 五层协议的应用层需要做的工作是,程序员 自定义应用层协议 。 当前要开发一个关于“点外卖软件”的一个项目,其中有一个功能为:获取用户的订单历史(后端服务器从数据库中取出数据返回给前端页面),类似像这样的功能,

    2024年02月07日
    浏览(62)
  • 计算机网络学习01-TCP/IP 五层模型概述

    谈论计算机网络模型之前,我们先来谈谈,为什么要分层,这样的好处是什么。 当谈到Internet 时,我们总能听到的一个词汇就是 协议 (protocol)。协议定义了发送者、接收者和所有中间设备为了高效通信需要遵循的规则。当通信简单时,我们可能只是需要一个简单的协议:当通

    2024年02月08日
    浏览(40)
  • 计算机网络之TCP/IP协议第一篇:网络基础知识

    😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824   📚📚  工作微信:BigTreeJava 拉你进微信群,免费领取! 🍎🍎4:本文章内容出自上述:Spring应用课程!💞💞

    2024年02月09日
    浏览(66)
  • 计算机网络参考模型(OSI七层与TCP/IP协议)

    目录 1 为什么要分层 1.1 层次划分的必要性 1.2 层次划分的方法 1.2 层次划分的优点 2 七层和四层的定义 2.1 七层的介绍 2.1.1 OSI七层参考模型 2.1.2 OSI七层工作原理 2.1.3 PDU 2.2 四层的介绍 2.2.1 TCP/IP 参考模型 2.2.2 TCP/IP协议族的组成 2.2.3 数据封装和解封过程 2.2.4 设备与层的对应

    2024年02月08日
    浏览(55)
  • 【网络奇缘】- 计算机网络|分层结构|深入探索TCP/IP模型|5层参考模型

    ​ 🌈个人主页:  Aileen_0v0 🔥系列专栏:  一见倾心,再见倾城  ---  计算机网络~ 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\" 目录 OSI参考模型与TCP/IP参考模型相同点 OSI参考模型与TCP/IP参考模型不同点 面向连接三阶段(建立,传输,释放) 面向无连接(直传) 通用的5层参考

    2024年02月05日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包