TCP速率与窗口,带宽,RTT之间的关系

转自:http://blog.csdn.net/bad_sheep/article/details/6158676


以下部分内容是自己的理解,可能会有差错,如有发现,欢迎指正。


窗口:
TCP是一个滑动窗口协议,即一个TCP连接的发送端在某个时刻能发多少数据是由滑动窗口控制的,而滑动窗口的大小实际上是由两个窗口共同决定的,一个是接收端的通告窗口,这个窗口值在TCP协议头部信息中有,会随着数据的ACK包发送给发送端,这个值表示的是在接收端的TCP协议缓存中还有多少剩余空间,发送端必须保证发送的数据不超过这个剩余空间以免造成缓冲区溢出,这个窗口是接收端用来进行流量限制的,在传输过程中,通告窗口大小与接收端的进程取出数据的快慢有关。另一个窗口是发送端的拥塞窗口(Congestion window),由发送端维护这个值,在协议头部信息中没有,滑动窗口的大小就是通告窗口和拥塞窗口的较小值,所以拥塞窗口也看做是发送端用来进行流量控制的窗口。滑动窗口的左边沿向右移动称为窗口合拢,发生在发送的数据被确认时(此时,表明数据已被接收端收到,不会再被需要重传,可以从发送端的发送缓存中清除了),滑动窗口的右边沿向右移动称为窗口张开,发生在接收进程从接收端协议缓存中取出数据时。随着发送端不断收到的被发送数据的ACK包,根据ACK包中的确认序号和通告窗口大小使滑动窗口得以不断的合拢和张开,形成滑动窗口的向前滑动。如果接收进程一直不取数据,则会出现0窗口现象,即滑动窗口左边沿与右边沿重合,此时窗口大小为0,就无法再发送数据。

下面附一个TCP协议头的格式和滑动窗口的示意图(截自TCPIP协议详解):

 

                                                  图1.TCP头部结构

 

                                                图2.滑动窗口示意图

 

 

带宽:
这里带宽是指单位时间内从发送端到接收端所能通过的“最高数据率”,是一种硬件限制。TCP发送端和接收端的数据传输数率不可能超过两点间的带宽限制。

 

RTT:
即Round Trip Time,表示从发送端到接收端的一去一回需要的时间,tcp在数据传输过程中会对RTT进行采样(即对发送的数据包及其ACK的时间差进行测量,并根据测量值更新RTT值,具体的算法TCPIP详解里面有),TCP根据得到的RTT值更新RTO值,即Retransmission TimeOut,就是重传间隔,发送端对每个发出的数据包进行计时,如果在RTO时间内没有收到所发出的数据包的对应ACK,则任务数据包丢失,将重传数据。一般RTO值都比采样得到的RTT值要大。

 

带宽时延乘积:
带宽时延乘积=带宽*RTT,实际上等于发送端到接收端单向通道的数据容积的两倍,这里单向通道的数据容积可以这样来理解,单向通道看成是一条单行道马路,带宽就是马路的车道数,路上跑的汽车就是数据(不过这里所有汽车的速率都是一样的,且不会有人想超车,大家齐头并进),那么单向通道的数据容积就是这条单行道上摆满车,一共可以摆多少辆。当路面上已经摆满的时候,就不能再往里面放了。这里顺便再说一下发送时延和传播时延的差别,单位数据量发送时延是由带宽决定的,就是带宽的倒数,以马路来类比,比如有10辆车,如果车道数为1,那么这10辆车只能首尾相接的顺序上路,从第一辆车的车头到最后一辆车的车尾可以看作是发送时延,此时就是10辆车的车长,如果把车道数改成10,那么这10辆车可以并排上路,发送时延就变成了一辆车的车长了,由此可见,带宽越高,则发送时延越短,反之则反。传播时延则是由电的传播速度(可以看做是一个)常量以及发送和接收端线路的物理长度决定的,比如从美国到中国,传播时延就很大,而一个局域网内部,传播时延就很小。因为发送时延是与数据量大小有关系的,RTT其实只是考虑传播时延。

 

 

 

介绍了上面的概念后,现在再来看看TCP发送数据时,其速率和这些有什么关系,下边用一些符号表示前面提到过的值,
设滑动窗口大小为W, 发送端和接收端的带宽为B, RTT为Tr。


前面已经说过了,TCP发送数据时受滑动窗口的限制,当TCP将滑动窗口中的数据都发出后,在收到第一个ACK之前,滑动窗口大小是0,不能再发送数据了,必须等待ACK包使滑动窗口移动。那么在理想情况下,ACK包应该在什么时候到达呢?显然,就是在数据发出后的RTT时间后,ACK包到达。这也就是说,现在在不考虑丢包和拥塞情况下,TCP在一个RTT时间内能发出的最大数据量为W,所以不考虑带宽限制下,TCP能一个时刻能达到的最大速度是 V = W/Tr


由此可以看出,如果假设Tr是一个定值,那么决定TCP速率的唯一因素就是TCP的滑动窗口大小。现在再考虑带宽限制,前面说过当马路上摆满车的时候,就无法再往里放车了,同理,TCP发送端在Tr/2时间内,能往通道上放的数据量为 V*Tr/2,当 V*Tr/2<=B*Tr/2时,单向通道容积不构成瓶颈,速率的限制主要来源于窗口大小限制。而当V*Tr/2>B*Tr/2时,则就受到容积限制,即此时速率限制来源于带宽限制。
把V*Tr/2<=B*Tr/2和V*Tr/2>B*Tr/2两边的Tr/2约掉,再把V = W/Tr代入,则可以得到 :

 

W <= B*Tr 及 W > B*Tr


B*Tr就是带宽时延乘积,取W为TCP能支持窗口的最大值Wmax,当Wmax <= B*Tr时,此时发送和接收端之间的通道就是所谓的长肥管道,即带宽时延乘积大的通道。在我们平时生活中使用的宽带网络,ADSL等环境下,因为带宽都比较小,从而B*Tr也比较小,再加上网络情况比较复杂,拥塞情况比较常见,所以这些网络环境下,TCP速率的主要限制因素在于带宽,丢包率等。长肥管道一般不太常见,多见于一些单位使用的专线网络,在这些网络中速率的主要限制因素就是窗口大小了,这也是传统TCP在这些网络环境中不能充分利用带宽的原因所在(因为传统TCP的窗口大小是用2字节表示的,所以最大只有65535(不考虑窗口扩大选项)),除了专线网络外,随着网络硬件技术的发展,万兆交换机的出现,局域网中也可能会出现带宽时延乘积较大的情况。

 

 

总结,在W<B*Tr时,影响TCP发送数据速率的最直接的因素是滑动窗口的大小,TCP的流量控制策略(比如超时时窗口设置为1,重复ACK时窗口减半)最终都是通过控制窗口大小来控制速率,而慢启动,拥塞避免这些流量控制算法实际上就是控制窗口增长方式的算法,也就是控制的是加速度大小。当W>B*Tr时,则影响速率的因素就是带宽了。
现在出现很多基于UDP的可靠传输技术,因为UDP在IP的上层除了加了端口号之外基本上没做其他什么事,所以提供给应用层控制的空间就很大,这些技术也大致都是通过在应用层添加可靠性保证,并扩大窗口大小和改变流量控制策略来克服传统TCP的缺点。

 

BTW,开源项目UDT其实是个好东西,也是基于UDP的可靠传输,还没来得及深入研究。但是看了下文档知道它给外部提供了流量控制策略定制化接口,这点很好,留给了使用者相当大的灵活性,有时间要研究研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18911.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET 7 新增速率限制 (Rate Limiting) 功能,轻松限制请求数量

.NET 7 内置了速率限制&#xff08;Rate Limiting&#xff09;功能&#xff0c;速率限制指的是限制可访问资源的请求数。例如数据库每分钟可以安全处理 1000 个请求&#xff0c;再多不确定会不会崩。这时就可以在应用程序中放一个速率限制器&#xff0c;规定每分钟只允许 1000…

天津到广州海运货柜船期

天津到广州海运&#xff0c;一般的集装箱运输路线是从天津新港走船到广州南沙港&#xff0c;有直达的船&#xff0c;运输时间一个星期&#xff0c;集装箱大柜或者小柜&#xff0c;每周从天津发出的船有4班左右。

GPT-4原论文详细解读(GPT-4 Technical Report)

GPT-4原论文详细解读&#xff08;GPT-4 Technical Report&#xff09; 返回论文和资料目录 1.导读 相比之前的GPT-3.5等大型语言模型&#xff08;这里可以看我的InstructGPT解读&#xff0c;也方便理解本文内容&#xff09;&#xff0c;GPT-4最大的不同在于变成了多模态&…

IBM加入战局!任意大模型低成本变ChatGPT方法开源,个别任务超GPT-4

衡宇 发自 凹非寺量子位 | 公众号 QbitAI 科幻中有机器人三原则&#xff0c;IBM说不够&#xff0c;要十六原则。 最新大模型研究工作中&#xff0c;以十六原则为基础&#xff0c;IBM让AI自己完成对齐流程。 全程只需300行&#xff08;或更少&#xff09;人类标注数据&#xff0…

git获取ssh密钥

桌面右击&#xff0c;选择 “Git Bash” 切换到 .ssh 路径下&#xff0c;如果不存在&#xff0c;则直接创建一个&#xff08;本人在家目录即用户目录下&#xff09; 添加用户名和密码 使用下面的命令创建ssh密钥 ssh-keygen一路回车即可 此时.ssh文件夹下便会包含两个文件&…

作为一名开发工程师,我对 ChatGPT 的一些看法

ChatGPT 又又火了。 ChatGPT 第一次爆火是2022年12月的时候,我从一些球友的讨论中知道了这个 AI 程序。 今年2月,ChatGPT 的热火更加猛烈,这时我才意识到,原来上次的热火只是我们互联网圈子内部火了,这次是真真正正的破圈了,为大众所熟悉了。 这个 AI 程序是一个智能问…

新版Web of science 如何导出全记录与引用的参考文献到Hisecite

Question&#xff1a; 我导开“查”文献科研培训会的时候提到Hisecite文献引用分析软件&#xff0c;在看录频的时候顺便了解这个软件&#xff0c;遇到了一个问题&#xff1a;目前网上关于hisecite的参考资料很多都是关于旧版WOS(Web of Science)&#xff0c;本人经过翻阅资料&…

利用Web of Science进行文献检索

官网链接 Web of Science 1 基本检索 若要执行文献检索&#xff0c;可选择要检索的字段&#xff0c;然后在检索字段中输入检索词 可以通过主题|摘要|标题|作者|出版物名称|出版年等进行检索 注意&#xff1a;一般默认是主题&#xff08;其中包括标题、摘要和索引&#xff09…

如何检索外文文献

目录 一、知网就能搞定的外文文献 1、检索 2、下载 二、知网中查不到或者下载不了的外文文献 一般&#xff0c;我们要查找中文文献很方便&#xff0c;知网就能下载&#xff0c;但是对于一些外文文献&#xff08;最常见就是英文&#xff09;&#xff0c;如果知网里面找不到或…

如何搜索得到综述文献?

我们应该要怎样才能了解到这个研究方向究竟有什么成果&#xff0c;现如今的研究现状如何呢&#xff1f;这就需要我们对综述文献进行研读了。可是综述文献并不是随便可以找得到的&#xff0c;那我们要怎么样才能搜索到综述文献呢&#xff1f; 今天我从以下几点和大家分享&#…

如何进行文献检索?

文献检索可以看作是贯穿于论文写作全过程的一种“术”&#xff0c;当你学会文献检索的实践操作后&#xff0c;一定程度上你的互联网搜索能力也会有所提升&#xff0c;这种能给你带来双重作用的工具&#xff0c;还不赶紧来学会它&#xff01; 文献检索主要包括5个步骤&#xff1…

Python编程基础

前言 前面基础知识部分的知识点较为杂乱&#xff0c;后面有总结好的知识点和例题&#xff0c;可以直接在目录里跳转。如果忘记了可以再跳转回去看详解的知识点。还有一些看起来不大聪明的问题&#xff0c;都是博主在学习过程中的疑问&#xff0c;如果知道的话可以直接跳过。 对…

Android自定义控件 - 彩虹表盘

说实话写代码久了&#xff0c;本能的会避免一些不熟悉的领域&#xff0c;而去做一些擅长的领域&#xff0c;这样使工作显得得心应手&#xff0c;但殊不知这是一种逃避行为&#xff0c;只有不断的面临问题甚至主动制造问题&#xff0c;好比说我偏偏不用setVisible这种老旧的显影…

半个月时间把MySQL重新巩固了一遍,梳理了一篇几万字 “超硬核” 文章!

MySQL 是最流行的关系型数据库管理系统&#xff0c;在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一 MySQL实战文章目录 MySQL必会知识点梳理 (必看)【介绍】什么是数据库MySQL数据库RDBMS 术语数据库…

为什么只有涨价才能救小米?

作者&#xff1a;仙人JUMP 来源&#xff1a;https://www.xttblog.com/?p4777 01 小米10发布了&#xff0c;虽然各项参数都已经早就被剧透完了&#xff0c;那个充电器淘宝各路品牌都卖了大半年了&#xff0c;不过价格还是香的。 产品本身没什么惊喜&#xff0c;吊打友商几个月前…

不一样的母爱

文/爱笑的王阿哥(ISmileLi) 每个人都有自己的母亲 每位母亲都爱自己的孩子 我们也爱自己的母亲 但却和母亲爱我们不一样 我们对母亲的爱 像小桥流水 母亲对我们的爱 像江河湖海 每位母亲不同 表达爱的方式也不同 她们的爱 或平静 或深沉 或直白 每位母亲不同 表达爱的思想…

想要艺术气质高逼格,不吹牛真的有捷径可走

文中呈现出的经典西方作品&#xff0c;足以让你大脑空缺的西方美术史部分得以补充&#xff0c;想要艺术气质高逼格&#xff0c;读完是关键&#xff0c;你懂得&#xff01; 达芬奇蒙娜丽莎 达芬奇的《蒙娜丽莎》成功地塑造了资本主义上升时期一位城市有产阶级妇女形象。据记载…

【码歌】代码歌颂人生----怎样给Swagger换皮肤?

上文我们讲到在Spring Boot中集成Swagger2的组件&#xff0c;那今天我们就来聊聊怎样给Swagger换个皮肤呢&#xff1f;环境搭建&#xff1a;使用Spring Boot依赖swagger-spring-boot-starter进行快速构建。具体swagger-spring-boot-starter可以参考&#xff1a;https://github.…

Spring中的Aop简单实例讲解

注重版权&#xff0c;转载请注明原作者和原文链接 作者&#xff1a;码农BookSea 原文链接&#xff1a;https://editor.csdn.net/md?articleId107092569 Aop&#xff0c;即面向切面编程&#xff0c;面向切面编程的目标就是分离关注点 比如&#xff1a;一个骑士只需要关注守护…

七夕我们在歌颂什么

“七夕节”是我国最具有浪漫色彩的节日&#xff0c;也是古代少女、闺妇最看重的节日。因主要的参与者是少女&#xff0c;活动以乞巧为主&#xff0c;也被称为“乞巧节”或“少女节”、“女儿节”。 农历七月初七&#xff0c;正值夏秋&#xff0c;晴朗夜空&#xff0c;明亮的牵牛…