在文章TCP滑动窗口协议与流量控制中,我们已经理解了滑动窗口(发送窗口swnd和接收窗口rwnd)。

在发送端TCP通过发送窗口提高分组报文的传输效率,同时TCP也要求发送端维护一个接收窗口(rwnd)以提供流量控制,注意接收窗口的值是由接收方计算出来,并通报给发送方后,让发送方用来计算出接收窗口后主动做流量发送控制的。

因为TCP是全双工通信,所以两边的主机同时都是发送方和接收方,所以两边的主机都同时维护了自己的滑动窗口(发送窗口swnd和接收窗口rwnd)。注意在不考虑拥塞控制等算法的情况下,发送窗口swnd和接收窗口rwnd就会退化成完全相等的同一个窗口。

通常TCP有三个窗口,接收窗口 rwnd (receive window),发送窗口swnd(send window),拥塞窗口cwnd(congestion window)。

拥塞避免(cwnd)是发送方使用的流量控制,而滑动窗口(swnd, rwnd)则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的处理能力处理速度大小有关。

接收窗口 rwnd (receive window)

接收窗口rwnd使用图中的三个变量计算而来,即下图的下半个图的蓝色部分:

1应用程序已经读走的最后一个分组报文的最后一个字节序号,定义为LastByteRead

2从网络中收到的最后一个分组报文的最后一个字节序号,定义为LastByteRecv

3提供的窗口,定义为RecvBuffer

接收方的接收窗口rwnd = RecvBuffer - [LastByteRecv - LastByteRead]。

发送窗口swnd(send window)

发送窗口swnd和rwnd有类似的计算方法,是指上图中,上半个图里的蓝色部分。

1未收到确认的第一个分组报文的前一个分组的最后一个字节序号,定义为LastByteAcked

2下一个可发送的分组报文的前一个报文的最后一个字节序号,定义为LastByteSent

3提供的窗口,定义为SendBuffer

发送方的窗口swnd的初始值为:由拥塞窗口cwnd和rwnd两者中取小值,swnd是一定会小于等于rwnd, 然后系统会用 LastByteSent - LastByteAcked <= rwnd来控制流量的发送。

在网络足够好,即cwnd足够大的情况下, 我们可以简单的认为 swnd = rwnd - (LastByteSent - LastByteAcked) , 真实可用的发送大小还取决于剩余可用发送缓冲区SendBuffer - (LastByteSent - LastByteAcked)的大小。

在接收方能力足够强,即rwnd足够大的情况下,swnd <= cwnd。

这个告诉我们在发送方发送能力足够大的情况下,网络的吞量取决于网络状况cwnd和接收方的接收能力rwnd),cwnd和rwnd二个值都是随着网络的状态和接收方接收能力的变化而动态变化的。

拥塞窗口cwnd(congestion window)。

拥塞窗口是TCP中设计的一种用于避免网络拥塞发生的机制。拥塞窗口的大小取决于网络的拥塞程度,并且动态变化。发送方通过保证自己的发送窗口小于等于拥塞窗口以避免网络拥塞的发生。

发送方控制拥塞窗口的原则是:网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。只要网络一出现拥塞,拥塞窗口就减少一些,以减少注入到网络中的分组数,避免网络拥塞。

cwnd是随着网络状态的变化面变化的,它的大小与TCP慢启动门限,拥塞避免算法,快重传算法和快恢复算法相关,具体cwnd的产生算法,我们可以再开篇来讲。

通过本文,大家可以理解TCP的这三个窗口,以及TCP如何通过这三个窗口进行流程控制。

TCP的三个窗口:发送窗口swnd、接收窗口rwnd、拥塞窗口cwnd相关推荐

  1. 主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B。若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗

    主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B.若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗 ...

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

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

  3. 向某个窗口发送按键消息(包括后台隐藏的窗口)

    在一个项目中需要调用第三方的控制台程序进行录音,录音完成需要敲个回车键结束录音.控制台程序是在后台隐藏运行,使用 spy++可找到其窗口名,便可通过 findwindow 找到其句柄hWnd,本以为可 ...

  4. TCP的滑动窗口与拥塞窗口

    因此我们先了解一下16位的窗口大小究竟有什么作用. 窗口分为滑动窗口和拥塞窗口. 滑动窗口是接受数据端使用的窗口大小,用来告知发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制 ...

  5. TCP报文、滑动窗口、拥塞窗口解释

    部分参考:https://blog.csdn.net/zhangdaisylove/article/details/47294315 源端口号:占2个字节,就是发起方的port 目的端口号:占两个字节 ...

  6. TCP 拥塞窗口原理

    学过网络相关课程的,都知道TCP中,有两个窗口: 滑动窗口(在我们的上一篇文章中有讲),接收方通过通告发送方自己的可以接受缓冲区大小(这个字段越大说明网络吞吐量越高),从而控制发送方的发送速度. 拥塞 ...

  7. 窗口发送消息参数详解

    窗口发送消息参数详解 //    窗口.发送消息    函数功能: 将指定的消息发送到一个窗口,同win32 api 里面的SendMessage等同的效果 中文函数原型: 发送消息(hwnd,msg ...

  8. 关于TCP报文段以及拥塞窗口cwnd的理解纠正

    @(计算机网络) 在普通的拥塞控制算法中,我们总是粗粒度的关注每个RTT拥塞窗口的变化,比如初始报文段MSS = 1KB,在慢开始阶段增长规律是1→2→4→8...1\rightarrow 2\rig ...

  9. Windows 窗口发送消息参数详解

    窗口发送消息参数详解 // 窗口.发送消息 函数功能: 将指定的消息发送到一个窗口,同win32 api 里面的SendMessage等同的效果中文函数原型: 发送消息(hwnd,msg,wparam ...

最新文章

  1. nginx try_files的理解
  2. yaf mysql_Yaf框架的配置
  3. 渝粤题库]西北工业大学组成与系统结构
  4. 模板库 | 销售管理类报表,邀您提反馈
  5. python设计与调试[摘自笨方法学python]
  6. java迭代器输入的结果_Java学习之Iterator(迭代器)的一般用法 (转)
  7. osm数据导入mysql_OSM(OpenStreetMap) poi、路网 数据导入 PostgreSQL
  8. java Flink使用addSink方法保存流到mysql数据库中
  9. Javascript交互式金融股票基金图表JavaScript Stock Chart
  10. 本特利330505-02-02-02-00速度传感器
  11. 无线通信设备安装工程概预算编制_浙江正规设备安装工程安装-设计安装_天霖工程...
  12. UTC时间转成北京时间
  13. TPM设备管理系统对企业生产有何作用?
  14. Apple M1(Mac Arm64) 安装开发工具
  15. Linux CentOS7 备份及还原系统
  16. 群英服务器网站,群英网
  17. 有感觉,有深意的说辞
  18. 趣图 | 程序员的白天 vs 夜晚?
  19. LAMP—Mysql数据库
  20. 在线沙盒(恶意软件行为分析工具)整理介绍

热门文章

  1. 一文讲清楚以太坊的nonce
  2. 6 款顶级 Android 数据恢复软件列表
  3. 八、DOM(一) -- DOM对象
  4. Redis(上)基础及8种数据类型
  5. 将cookie字符串转成editthiscookie插件的json格式
  6. Android 应用清单简介1
  7. 2021年中国日用玻璃生产现状及竞争格局分析,行业朝“五化”方向发展「图」
  8. 打印机后台程序服务没有运行该怎么办
  9. 网页html通过隐藏域传送数据给web服务器
  10. 盛金公式解一元三次方程_盛金公式解一元三次方程