我们知道TCP有流量控制和拥塞控制的功能。首先两者是有区别的:流量控制只与发送者和接收者之间的端-端通信有关,也就是它是一个局部的控制;但是拥塞控制是一个全局的问题,涉及所有主机、路由器及路由器的存储-转发能力。通俗来说,一个城市,为了缓解拥堵,那么对应应该采取的办法是拥塞控制;但是如果仅仅对于市中心的某一条路避免堵车,那么就是流量控制。

这篇文章先介绍TCP的流量控制,拥塞控制在下一篇文章中详细介绍。

TCP采用大小可变的滑动窗口协议,由接收端通过window size字段反馈当前可接收的字节数。

win反映的是窗口的剩余大小,ACK表示目前接收端接收到的数据的序号。发端根据这个序号和收端剩余的大小就可以调整自己下一步发送多少,这就是流量控制的基本思想。

对于发送端的数据缓冲区有这些量:LastByteSent是目前发送的最后1比特的数据编号;LastByteAckd是目前接收到确认的最后1比特的数据编号;Revwin是窗口大小。鉴于每次发送方都是收到ACK之后滑动窗口继续发送,发送到LastByteSent这个位置,LastByteSent-LastByteAckd也就是这次发送数据的多少,那么只要满足:LastByteSent–LastByteAckd<=RcvWin(接收端空闲窗口大小) 就会保证不会溢出了。

那么接收端RcvWin怎么算呢?假设接收端缓冲区大小为RcvBuffer。LastByteRead:上层应用程序接收的最后一个字节序号,LastByteRcvd:接收端从网络接收的最后一个字节序号,那么LastByteRcvd–LastByteRead就是已经接受但是还没有传递给上层的数据。所以空闲区域RcvWin= RcvBuffer-(LastByteRcvd–LastByteRead).

接收端通过计算出空闲区域Recwin,在把这个消息反馈给发送方,发送方借此调整发送速率,进而实现TCP的端端流量控制。

拓展阅读

TCP协议的拥塞控制

数据链路层的流量控制

TCP协议的流量控制相关推荐

  1. c++tcp接收文件缓存多大合适_网易面经:深剖TCP协议的流量控制和拥塞控制,你懂了吗?...

    1.自我介绍+项目 2.RPC框架和普通http有什么区别和优势? 基于Tcp封装还是http封装的 3.rpc是长连接吗?如果要传输一个特别大的文件 底层还是基于流吗? Nio是一个什么IO模型? ...

  2. 4-7:TCP协议之流量控制

    文章目录 一:流量控制 一:操作系统缓冲区与滑动窗口的关系 (1)若应用程序没有及时读取缓冲区 (2)操作系统直接减少缓冲区大小 本文大部分内容来自小林coding<图解网络>,感谢分享, ...

  3. 【计算机网络】传输层 : 总结 ( TCP / UDP 协议 | 寻址与端口 | UDP 协议 | TCP 协议特点 | TCP 连接释放 | TCP 流量控制 | TCP 拥塞控制 ) ★★★

    文章目录 一.传输层 TCP / UDP 协议 ★ 二.寻址端口号 ★ 三.UDP 协议特点 四.UDP 协议首部格式 五.UDP 校验 六.TCP 协议 特点 ★ 七.TCP 报文段首部格式 八.T ...

  4. TCP协议可靠性保证(确认应答机制,超时重传机制,流量控制,拥塞窗口)

    上一次我们知道了TCP协议通过连接管理机制保证可靠性,今天我们继续来看一看TCP协议中其他几种保证可靠性的方法. · 确认应答机制  · 超时重传机制  · 流量控制  · 拥塞窗口 确认应答机制  ...

  5. 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)

    TCP协议 TCP协议概念 TCP全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制 TCP协议 ...

  6. TCP滑动窗口协议与流量控制

    谈到TCP的滑动窗口协议与流量控制,便会想起当年面试时的场景.那时刚刚毕业,匆匆学了一点TCP的皮毛,仅仅是知道了TCP是面向连接的协议,以对每个报文都进行确认+超时重传的机制来保证端到端的可靠传输: ...

  7. 详解TCP协议(四)——传输中的流量控制

    文章目录 一.流量控制是什么 二.理解TCP流量控制基础 2.1发送缓存与接收缓存 2.2TCP报文结构中接收窗口字段 2.3滑动窗口协议基础 三.综合应用层.套接字及滑动窗口协议的具体步骤 四.总结 ...

  8. TCP协议-TCP的流量控制

    一.前言 一般来说,我们总是希望数据传输能尽可能快一点.但如果发送方把数据发送得过快的话,接收方就可能来不及接收,这就会造成数据的丢失.而TCP的流量控制机制就是为了解决这个端到端的数据传输速率问题. ...

  9. TCP协议--流量控制,拥塞控制,MSS

    MSS MSS(Maximum segment size): 最大报文段长度.MSS应用于TCP协议中,代表的是单个TCP报文的可传输的最大数据长度.MSS的大小,和通信中的另一个参数MTU息息相关. ...

最新文章

  1. 【leetcode】27.RemoveElement
  2. Yii的查询后缀限定
  3. 将excel里面的数据直接生成sql语句
  4. python 三维图片 任意切片_在python中实现将一张图片剪切成四份的方法
  5. 征稿延期 | 2019亚洲语言处理国际大会(IALP2019)征稿延期
  6. ASP.NET 2.0 Page的执行顺序
  7. dump 大文件分析工具Jprofile
  8. 新手如何学习FPGA技术
  9. coverity分析端软件环境搭建
  10. csm和uefi_uefi是什么意思?uefi和BIOS的区别是什么?
  11. php 改变页面背景颜色,PHP改变背景颜色
  12. Linux ---动态监控
  13. html文本下一页,Javascript html2canvas + jsPDF 导出PDF,解决一半文字在上一页一半文字在下一页的问题...
  14. 敏捷开发系列学习总结(8)——创业公司研发团队怎么建设
  15. 搭建系统|升级选股工具,多板块个股同时提取!个股行情走势存入数据库
  16. 数字图像处理(冈萨雷斯)学习 第3章 灰度变换与空间滤波
  17. 中文翻译泰文难吗?如何做好泰文翻译?
  18. CFD解决一维标量问题(迎风、Lax-Wendroff、TVD、WENO5+3阶Runge-Kutta)
  19. 一.了解 iOS 操作系统架构
  20. 使用Altium Designer软件绘制stm32的电路原理图

热门文章

  1. 回顾声智科技助力联想智能音箱MINI亮相CES Asia
  2. 大学计算机文档基本操作实验的效果,上海工程技术大学计算机实验报告5
  3. ajax传递timestamp,解决ajax请求自动增加时间戳问题
  4. Vuex的State核心概念
  5. 视频编码方案之间的比较(HEVC,H.264,MPEG2等)
  6. linux根据端口号找目录,linux篇---根据端口号查看进程位置
  7. java中的比较运算符_Java基础---Java中的比较运算符(十三)
  8. 我的世界java版_我的世界Java版1.15版本
  9. vue三种常用获取input值方法
  10. maven jsp报错javax.servlet.http.HttpServlet“ was not found on the Java Build Path