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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • rsync服务的三种模式测试[通俗易懂]

    rsync服务的三种模式测试[通俗易懂]目录1什么是rsync1.1rsync简介rsync特性1.3rsync的企业工作场景说明2rsync三种模式:2.1rsync常用参数选项2.2rsync本地模式2.3rsyncshell模式2.4rsyncdaemon模式3rsync服务故障模拟4rsync多模块实战5rsync排除及无差异同步实战6rsync优缺点6….

    2022年10月13日
    3
  • pycharm2021.11.2激活码_在线激活「建议收藏」

    (pycharm2021.11.2激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~9K2BT69C4S-eyJsaWNlbnNlSWQiOi…

    2022年3月28日
    60
  • nextline函数_java中next与nextLine的用法

    nextline函数_java中next与nextLine的用法importjava.util.*;publicclassRetirement2{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);System.out.print(“Howmuchmoneywillyoucontributeeveryyear?”);do…importjava.util.*;publicc…

    2022年6月9日
    44
  • 创建KVM虚拟机_安卓kvm虚拟机

    创建KVM虚拟机_安卓kvm虚拟机可以用两种方法创建kvm虚拟机,一种是virt-manager管理工具创建,一种是命令行的方式。1.命令行方式创建kvm虚拟机。先创建qcow2格式的镜像文件,大小为20G。qemu-imgcreate-fqcow2/data/kvm/images/centos7.6×86.qcow20G输入命令进行虚拟机的安装:virt-install–name=centos7.6×86–vcpus=2–ram=2048–diskpath=/data/kvm/imag

    2025年7月17日
    5
  • 以太网用户侧接口(以太网协议转换方案)

    以太网接口示意图如下图1:以太网接口 如果您的职业生涯大部分时间都在从事PCB设计,并且您在计算机接口的布局和布线方面有经验,那么您就知道一件事是正确的:在器件应用说明中会有一些推荐的设计建议,并不是这些建议总是错误的,而是这些建议很容易断章取义。一位同事向我提出的一项建议是,在离散磁铁和连接器之间布线时,在RJ45连接器下方使用接地层。一些应用说明建议将系统接地覆盖RJ45连接器下方,一些应用说明建议将接地平面拆分为系统和机箱部分,以提供更强的隔离。应用说明中的一些建议指出,PHY、磁体和/或

    2022年4月15日
    181
  • 电商平台后端_什么电商运营

    电商平台后端_什么电商运营http://www.imooc.com/view/148?from=cnblogs

    2022年8月3日
    8

发表回复

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

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