TCP Flow Control

TCP Flow Control这里写自定义目录标题TCPFlowControlTCP简述TCP传输机制滑动窗口FlowControl计时器总结TCPFlowControl最近在学习《计算机网络》在TCP的FlowControl部分理解不太清楚,查阅了资料后有一些粗浅的理解,如有不准确的地方,请大佬指正。参考资料1.计算机网络2.TCPFlowControlTCP简述TCP(Transmissi…

大家好,又见面了,我是你们的朋友全栈君。

TCP Flow Control

最近在学习《计算机网络》在TCP的Flow Control部分理解不太清楚,查阅了资料后有一些粗浅的理解,如有不准确的地方,请大佬指正。

参考资料
1.计算机网络
2.TCP Flow Control

TCP简述

TCP(Transmission Communication Protocol)是作用于传输层的常用协议,以网络层IP协议为基础,在不可靠的IP协议上提供了可靠的TCP协议,保证了数据传输的可靠性。
为了提供这样可靠的服务,TCP有各种复杂的机制,包括本文的Flow Control机制。

TCP传输机制

从应用层来的数据通过TCP,经过下层传到目的IP的TCP,再传到目的IP的应用层。
在TCP中,有缓冲区(buffer)用于储存未被处理,等待处理的数据,被称为接收缓冲区(receive buffer)。在传输数据时,若接收缓冲区已满,则不能再接收信息,不然会导致丢包,使传输不可靠。
Flow Control就是一种保证不在缓冲区已满的情况下发送端继续传输数据的机制。

滑动窗口

滑动窗口(Sliding Window)是提高TCP传输效率的办法,这种机制不仅仅被TCP采用,再其他各种协议中都有广泛的应用。
TCP若是每次只传一个数据包,等收到接收端的ACK再发送就显得效率太低。为此,使用滑动窗口,每次发送多个数据,即利用传输线路存储数据,会提高传送效率。
图中的信封在传输途中,提高了传输效率
举一个例子,如果发送端要发送一个150000bytes的文件,TCP把它分成100个数据包,每个数据包1500bytes。
假设接收端的接收缓存区大小是45000bytes,所以window就可以是30个数据包大小。也就是说,在正常情况下,会有30个数据包在传输途中。当发送端收到接收端的最初的10个ACKs时,发送端就会把接下来的10个数据包发送出去。

Flow Control

以上是正常情况,然而,若是传输层传到应用层的速度过慢,则在传输层就会有排队,即数据包要被保存在接收缓冲区中,因此,接收缓冲区的空间就会变小,此时,在接收端发回给发送端的ACK中会标明缓冲区的剩余空间,以控制发送端减少发送数据以免数据包丢失。
举一个例子,同上,此时接收缓冲区中有10个数据包,即450000bytes中只剩下300000bytes。若此时发送端接收到了10个ACKs,表明现在线路上只有20个数据包,然而发送端也不会再发送数据包。
也就是说,满足以下不等式
最后发出的数据-最后接收到的ACK<=最后的ACK中标明的接收缓冲区剩余容量

计时器

然而,在此之上还有一个问题。
当接收缓存区没有空间时,如果接收端不发送ACK给发送端,或者ACK丢失了,那发送端永远不会知道什么时候再次发送数据包。
于是我们就陷入江局,接收端在等数据包,发送端没收到ACK不知道什么时候发数据包。
于是,当接收端收到一个标明接收缓存区不剩空间的ACK时,接收端就开始一个计时器(persist timer),时不时地发一个小数据包去check是不是接收缓存区有空间了。

总结

1.Flow Control是一种确保发送端不会发送过多数据导致接收端buffer溢出而丢包的机制。
2.每个ACK里都会标明现在buffer中的剩余空间。
3.接收端窗口的长度就是接收缓冲区的空余空间。
4.当接收缓冲区无剩余空间,发送端就停止发送数据包,开始计时。
5.开始计时后,发送端会间断地发送小数据包以确认缓冲区是否有空位。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134868.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql错误码2058_MySQL 1045

    mysql错误码2058_MySQL 1045配置新连接报错:错误号码2058,分析是mysql密码加密方法变了。解决方法:windows下cmd登录mysql-uroot-p登录你的mysql数据库,然后执行这条SQL:ALTERUSER’root’@’localhost’IDENTIFIEDWITHmysql_native_passwordBY’password’;(注意分号)#password是你…

  • 词向量表示[通俗易懂]

    词向量表示[通俗易懂]1、语言表示语音中,用音频频谱序列向量所构成的矩阵作为模型的输入;在图像中,用图像的像素构成的矩阵数据作为模型的输入。这些都可以很好表示语音/图像数据。而语言高度抽象,很难刻画词语之间的联系,比如“麦克风”和“话筒”这样的同义词,从字面上也难以看出这两者意思相同,即“语义鸿沟”现象。1.1、分布假说上下文相似的词,其语义也相似。1.2、语言模型文本学习:词频、词的共现、词的搭配。语言模型判定一句话是否为自然语言。机器翻译、拼写纠错、音字转换、问答系统、语音识别等应用在得到若干候…

  • web服务器有哪几种语言组合_服务器

    web服务器有哪几种语言组合_服务器  如今的Web服务器有很多种,大家在做项目的时候根据自己的需求进行灵活的选择。下面小编就给大家分享一下目前都有哪些Web服务器。  1.Apache  Apache也被叫做httpd服务器,是目前使用最广泛的web服务器,它被应用于各种平台之中。Apache刚开始被推出的时候有很多的缺陷,如今已经被修复的越来越完善,如果你是web服务器的钻研者,小编建议你一定要学习一下Apache的使用。  2.Nginx  Nginx是Linux平台下的优秀Web服务器,小编以前用过这个服务器,它…

  • OpenProcessToken LookupPrivilegeValue 和AdjustTokenPrivilege[通俗易懂]

    OpenProcessToken LookupPrivilegeValue 和AdjustTokenPrivilege[通俗易懂]OpenProcessToken函数功能用来打开与进程相关联的访问令牌函数申明WINADVAPIBOOLWINAPIOpenProcessToken(_In_HANDLEProcessHandle,_In_DWORDDesiredAccess,_Outptr_PHANDLETokenHandle);第一个参数ProcessHandle[in],输入参数,要打开的访问令牌所属的进程句柄,查询进程必须拥有PROCESS_QUERY_INF

  • IBM中枪后,下一个是谁?

    IBM中枪后,下一个是谁?

  • 软件实施工程师的经验之谈(适合新手,老鸟请指正)[通俗易懂]

    软件实施工程师的经验之谈(适合新手,老鸟请指正)[通俗易懂]干了三年实施,技术没学多少,人倒是变的圆滑多了问题1:实施干嘛的呢?说简单通俗点,开发就是研发生产电视机的,我们实施就是给买电视机的人去进行安装调试,试运行完了签验收单收款和后期的日常维护(当然,如果大公司有自己的售后服务团队就另当别论了)问题2:实施的薪资(我想大部分人都关注这个吧)以一线城市北上广为例,我在北京,第一份实施工作月薪4500,出差补助一天一百,报销路费和住宿费,不报销吃饭…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号