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.开始计时后,发送端会间断地发送小数据包以确认缓冲区是否有空位。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle to_date()函数的用法介绍

    Oracle to_date()函数的用法介绍to_date()是Oracle数据库函数的代表函数之一,下文对Oracleto_date()函数的几种用法作了详细的介绍说明,需要的朋友可以参考下在Oracle数据库中,Oracleto_dat

    2022年7月2日
    22
  • 公安大数据平台应用与公安大数据建模「建议收藏」

    公安大数据平台应用与公安大数据建模「建议收藏」基于沃达德大数据平台,通过对海量数据采集、处理、存储、分析和数据挖掘,根据数据的特性,采用合适的可视化方式,将数据直观地展现出来,以帮助人们认识数据、理解数据,同时找出包含在海量数据中的规律或者信息。公安大数据主要由公安业务数据、地理信息数据、互联网数据等组成。通过沃达德大数据平台,对公安大数据进行信息提取、分析、数据挖掘和可视化,用于警情时空分布和时空演化、犯罪事件热点分析、关注对象的轨迹跟踪等多个公安业务领域,全面提升公安机关的整体工作效率。沃达德公安大数据平台,利用接警数据进行警情密度分析,以大数

    2022年6月6日
    199
  • PHP 开源软件《个人管理系统》——修改密码

    PHP 开源软件《个人管理系统》——修改密码

    2021年8月19日
    71
  • js json字符串转json数组_string转json数组

    js json字符串转json数组_string转json数组查了很久,也实践了很多,都没有成功。网上说得最多的就是用 net.sf.json.JSONArray和net.sf.json.JSONObject两个jar包里面的JSONArrayjsonArray=JSONArray.fromObject(JsonStr);//字符串转成Json对象list=JSONArray.toList(jsonArray,Pojo.class);

    2022年10月6日
    0
  • Anaconda与Pycharm环境配置「建议收藏」

    Anaconda与Pycharm环境配置「建议收藏」一、环境配置1、首先看一下Anaconda简介,不需要操作。Anaconda介绍、安装及使用教程-知乎然后直接百度搜索Pycharm和Anaconda(可能要翻墙)进入官网下载,其中Pycharm下载专业版。简单介绍Anaconda的使用:安装完后进入AnacondaPrompt,会进入命令行界面下一步输入condainfo-e可以查看已经配置好的环境接下来正式进入配置环境的环节可以参考:9步教你安装完成tensorflow与pytorch..

    2022年8月27日
    5
  • python取整符号_Python中的取整函数

    importmath#向上取整print(“math.ceil—“)print(“math.ceil(2.3)=>”,math.ceil(2.3))print(“math.ceil(2.6)=>”,math.ceil(2.6))#向下取整print(“\nmath.floor—“)print(“math.floor(2.3)=>”,math.floor(2.3))p…

    2022年4月17日
    182

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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