【计算机网络自顶向下方法】流量控制(接收窗口rwnd)

流量控制

        一条TCP连接的每一侧主机都为该连接设置了接收缓存。当该TCP连接接收到正确、按序的字节后,它就将数据放入接收缓存。相应的应用进程会从该缓存中读取数据,但不必是数据刚一到达就立即读取。事实上,接收方应用也许正忙于其他任务,甚至要过很长时间后才去读取该数据。如果某应用读取数据相对较缓慢,而发送方发送得太多、太快,发送的数据就会很容易地使该连接的接收缓存溢出。
        TCP为它的应用程序提供了流量控制服务(flow-control service)以消除发送方使接收方缓存溢出的可能性。流量控制因此是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读取速率相匹配。(TCP发送方也可能因为IP网络的拥塞而被遏制,这种形式的发送方的控制被称为拥塞控制(congestion control))。

        TCP通过让发送方维护一个称为接收窗口(receive window)的变量来提供流量控制。通俗地说,接收窗口用于给发送方一个指示---该接收方还有多少可用的缓存空间。因为TCP是全双工通信,在连接两端的发送方都各自维护一个接收窗口。

举例说明

        假设主机A通过一条TCP连接向主机B发送一个大文件。主机B为了该连接分配一个接收缓存,并用RcvBuffer来表示其大小。主机B上的应用进程不时地从该缓存中读取数据。我们定义以下变量:
         LastByteRead:主机B上的应用进程从缓存读取的数据流的最后一个字节的编号。
         LastByteRcvd:从网络中到达的并且已经放入主机B接收缓存中的数据流的最后一个字节的编号
由于TCP不允许已分配的缓存溢出,下式必须成立:
            LastByteRcvd - LastByteRead ≤ RcvBuffer
 接收窗口用rwnd表示,根据缓存可用空间的数量来设置:
            rwnd = RcvBuffer - [LastByteRcvd - LastByteRead]
  由于该空间是随着时间变化的,所以rwnd是动态的。

连接是如何使用变量rwnd来提供流量控制服务的呢?

        主机B通过把当前的rwnd值放入它发给主机A的报文段接收窗口字段中,通知主机A它在该连接的缓存中还有多少可用空间。开始时,主机B设定rwnd=RcvBuffer。注意到为了实现这一点,主机B必须跟踪几个与连接有关的变量。主机A轮流跟踪两个变量,LastByteSent和LastByteAcked,这两个变量的意义很明显。注意到这两个变量之间的差LastByteSent-LastByteAcked,就是主机A发送到连接中但未被确认的数据量。通过将未确认的数据量控制在值rwnd以内,就可以保证主机A不会是主机B的接收缓存溢出。因此,主机A在该连接的整个生命周期须保证:
                LastByteSent - LastByteAcked ≤ rwnd

        对于以上方案还存在一个小小的技术问题。为理解这一点,假设主机B的接收缓存已经存满,使得rwnd=0。在将rwnd=0通告给主机A之后,还要假设主机B没有任何数据要发给主机A。此时,考虑会发生什么情况。因为主机B上的应用进程将缓存清空,TCP并不向主机A发送带有rwnd新值的新报文段;事实上,TCP仅当在它有数据或有确认要发时才会发送报文段给到主机A。这样,主机A不可能知道主机B的接收缓存已经有新的空间了,即主机A被阻塞而不能再发数据!为了解决这个问题,TCP规范中要求:当主机B的接收窗口为0时,主机A继续发送只有一个字节数据的报文段。这些报文段将会被接收方确认。最终缓存将开始清空,并确认报文里将包含一个非0的rwnd值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wellnw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值