TCP流量控制与拥塞控制原理分析

TCP的流量控制

使用滑动窗口进行流量控制

所谓的流量控制,就是让发送方的发送速率不要太快,让接收方来得及接收。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。

如图说明了如何利用滑动窗口机制进行流量控制。
在这里插入图片描述
设主机A向主机B发送数据。假设B发送给A的rwnd (receiver window,窗口值) 是400,发送方的发送窗口不能超过接收方给出的接收窗口的数值。TCP的窗口单位是字节,不是报文段,请注意。

再设每一个报文段为100字节长,序号的初始值为seq=1。注意图中的大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值。

接收方的主机B进行了三次流量控制。第一次把窗口设置为rwnd=300,第二次减小到rwnd=100,最后减到rwnd=0,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。另外B向A发送的三个报文段都设置ACK=1,可以看出只有在ACK=1时确认号字段才有意义。

假如,B向A发送了零窗口的报文段后不久,B的接收缓存又有了一些存储空间。于是B向A发送了rwnd=400的报文段,然而这个报文段在传送中丢失了。A一直等待收到B发送的非零窗口的通知,而B也一直等待A发送的数据。这样就死锁了。

为了解决这种死锁状态,TCP为每个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。如果窗口仍然是零,那么收到这个报文段的一方重设持续计时器;如果窗口不是零,那么死锁就不会发生了。

注意:即使是零窗口,也必须接收这几个报文段:零窗口探测报文段、确认报文段和携带紧急数据的报文段。因此上述的零窗口探测报文段也是可以被接收到的。

TCP报文段发送时机的控制

控制TCP报文的发送时机主要有以下几种机制。
1)TCP维持一个变量,它等于最大报文段长度MSS,只要缓存中存放的数据达到MSS字节就组装成一个TCP报文段发送出去。
2)由发送方的应用程序指明要求发送报文段,即TCP支持的推送(push)操作
3)发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(长度不超过MSS)发送出去。

Nagle算法
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值