TCP流量控制,简单来说就是让数据传输端传输的速率不要太快,让数据接收端来得及接收,利用滑动窗口机制可以很方便的在TCP连接上实现对数据传输端的流量控制。TCP的窗口单位是字节,不是报文段,数据传输端的发送窗口不能超过接收端给出的接收窗口的数值,流量控制的机制是控制丢包率,主要目的:让数据传输端了解数据接收端当前的接收能力,可灵活调整传输速率。流量控制机制图如下图所示:

滑动窗口:

TCP采用大小可变的滑动窗口进行流量控制,窗口大小的单位是字节。

数据传输窗口在连接建立时由双方商定。但在通信的过程中,数据接收端可根据自己的资源情况,随时动态地调整对方的传输窗口大小。滑动窗口实例图如下图所示:

滑动窗口引进原由:

我们可以把窗口理解为缓冲区(但是有些窗口和缓冲区又不太一样)。

如果没有这些“窗口”,那么TCP每发送一段数据后都必须等到数据接收端确认后才能发送下一段数据,这样做的话TCP传输的效率实在是太低了。

解决的办法就是在发送端等待确认的时候继续发送数据,假设发送到第X个数据段是收到数据接收端的确认信息,如果X在可接受的范围内那么这样做也是可接受的。这就是窗口(缓冲区)引入的缘由。

滑动窗口:

A、数据接收端窗口 X
接收端缓冲区大小。接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。

B、拥塞窗口 Y
发送端缓冲区大小

C、数据传输窗口 Z
发送窗口的上限值 = Min [X, Y]
① 当 X < Y 时,是接收端的接收能力限制数据传输窗口的最大值。
② 当 Y < X 时,则是网络的拥塞限制数据传输窗口的最大值。

滑动窗口实例介绍:

数据传输端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。还可发送 300 字节。

数据传输端收到了对方对前 400 字节数据的确认,但对方通知数据传输端必须把窗口减小到 400 字节。现在数据传输端最多还可发送 400 字节的数据。

滑动窗口需掌握的知识点:

A、数据接收端将自己可以接受的缓冲区大小放入TCP首部中“窗口大小”字段,通过ACK来通知数据传输端。

B、窗口大小字段越大,说明网络的吞吐率越高

C、窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,即就是说不需要数据接收端的应答,可以一次连续的发送数据。

D、操作系统内核为了维护滑动窗口,需要开辟发送缓冲区,来记录当前还有哪些数据没有应答,只有确认应答过的数据,才能从缓冲区删除。PS:发送缓冲区如果太大,会有空间开销。

E、数据接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给数据传输端,数据传输端收到这个值后,就会减慢自己的发送速度。

F、如果数据接收端发现自己的缓冲区满了,就会将窗口大小设置为0,此时数据传输端不再传输数据,但是需要在定期发送一个窗口探测数据段,使数据接收端把窗口大小告诉数据传输端。

PS:在TCP的首部,有一个16为窗口字段,此字段就是用来存放窗口大小信息的。

TCP报文段发送时机的选择

1、TCP维持一个变量,它等于最大报文段长度MSS,只要缓存中存放的数据达到MSS字节就组装成一个TCP报文段发送出去。

2、由发送方的应用程序指明要求发送报文段,即TCP支持的推送操作。

3、是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段发送出去。

TCP传输协议如何进行流量控制?相关推荐

  1. 利用TCP传输协议实现基于Socket的聊天程序(高级版_多线程)

    大家好,在上篇<利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版)>博客中,所写程序只是实现简单的连接通信,基于控制台实现,运用了TCP和UDP两种传输协议.今天我和大家分 ...

  2. 服务器传递文件丢包怎么回事,TCP传输协议中如何解决丢包问题

    一.回答这个问题之前,要考虑TCP协议为什么会丢包,在什么样的情况下会丢包. 1. TCP协议定义(Transimission Control Protocol)是以一种面向连接的.可靠的.基于字节流 ...

  3. 树莓派TCP传输协议(socket通信) 一发一收与多发多收

    项目场景: 一个物联网系统中,硬件与Web后端的通信肯定是必不可少的.笔者在每个项目中都会自己模拟发送端与接收端来实现树莓派收到的各模块数据能通过TCP协议上传给电脑.笔者在这里提供自己一直都有在用的 ...

  4. TCP/UDP协议基本概念

    TCP和UDP协议是TCP/IP协议的核心. TCP 传输协议:TCP 协议是一TCP (Transmission Control Protocol)和UDP(User Datagram Protoc ...

  5. TCP/IP协议模型和OSI协议模型的概念

    什么是网络协议? 网络协议是网络上所有设备(网络服务器.计算机及交换机.路由器.防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义.大多数网络都采用分层的体系结构,每一层都 ...

  6. 两类传输协议:TCPUDP总结

    两类传输协议:TCP:UDP TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方 ...

  7. 视频传输协议之MPEG-DASH

    1.简介 DASH的全称是Dynamic Adaptive Streaming over HTTP.DASH是一种新的视频传输协议,由微软.苹果.Adobe等公司共同主导完成,该标准于2012年制定完 ...

  8. 服务器电子邮件传输是靠什么协议,电子邮件(e-mail)传输协议和接收协议

    一.电子邮件传输协议 SMTP:SMTP是Simple Mail Transfer Protocol的缩写,意思就是简单邮件传输协议,SMTP是一种提供可靠且有的电子邮件传输协议.SMTP是一种建模在 ...

  9. Android TCP/TP协议

    在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...

最新文章

  1. python发送邮件带附件_Python发送邮件(带附件)
  2. 防火墙先锋 Check Point 进军汽车数据防护领域
  3. Struts2+Spring+Hibernate环境搭建
  4. 《ASP.NET Core 微服务实战》-- 读书笔记(第5章)
  5. 精打细算油盐_Java:ChronicleMap第1部分,精打细算
  6. idea出现找不到实体类
  7. 王道考研 计算机网络16网络层功能 数据交换方式 电路交换 报文交换 分组交换 路由算法 OSPF RIP AS自治系统 IGP内部网关协议 EGP外部网关协议
  8. 二十一.激光、视觉和惯导LVIO-SLAM框架学习之相机与雷达外参标定(1)
  9. spring 主从表_听听京东架构师浅谈,MySQL binlog 主从同步
  10. PHP19 PHPStorm2018和GitHub的使用
  11. Java中swing使用ImageIcon类添加图片
  12. 知识图谱构建流程原型、工具、数据、表示、推理以及可视化
  13. 卫星通信(SATCOM)设备的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. JavaScript数组你都掰扯不明白,简历上你敢写精通JavaScript?
  15. 《Python金融大数据风控建模实战》 第8章 Logistic回归模型
  16. python网络爬虫框架内容_Python网络爬虫-Scrapy框架
  17. 解题报告 之 HDU5336 XYZ and Drops
  18. IDEA社区版详细安装2022最新版(保姆式)
  19. 第07章 文本信息提取
  20. 2.5 新建一个工程

热门文章

  1. 计算机科学导论学习笔记(三)
  2. 田字格字帖生成器、孩子取名系列工具
  3. 保持低调融合为上策!
  4. 深入Android 【一】 —— 序及开篇 序
  5. Golengate管理--OGG|利用 OGG 迁移 Oracle11g 到 19C
  6. Oracle19c安装goldengate
  7. 《信息系统项目管理师》第十一章项目风险管理
  8. C语言完整课程设计代码(简单职工管理系统)
  9. vue如何实现记住密码功能?
  10. 剑网三问题汇总+答疑(2023年7月25日)(长期有效)