TCP流量控制

流量控制就是让发送方发送速率不要太快,要让接收方来得及接收
1.利用滑动窗口实现流量控制
发送方的发送窗口不能超过接收方给出的接收窗口的数值,TCP的窗口单位是字节,不是报文段。建立连接时 接收方告诉发送方接收窗口的值,其次接收方在接收数据时在ACK报文中携带rwnd 的值从而做到动态调整。比如 :初始的rwnd=400 发送过程中接收方返回了一条ACK报文(ACK= 1,ack = 201,rwnd=300)该报文的意思是允许发送方发送序号为201至500共300字节的数据。如果A发送了序号至500并且中间没有接收到接收方的非零窗口报文段 就不能再发送新的数据 只能超时重传之类的。
在传输过程中可能会碰到接收方向发送方发送了零窗口的报文段之后不久,B接收的缓存又有了一些存储空间。于是接收方发送了一条rwnd=400的报文段,然而发送的这条报段在传送过程中丢失了,从而导致发送方一直在等待接收方的非零窗口通知,而接收方一直在等待发送方的数据,如果没有其他措施,从而导致死锁出现,该怎么解决这个问题?
为了解决这个问题,Tcp为每一个连接设有一个持续的计时器。只要Tcp连接的一方收到了对方的零窗口通知就会启动持续计时器。若持续计时器设置的时间到达,就会发送一个零窗口的探测报文段(仅携带1字节的数据),对方就在确认这个探测报文段及时给出现在的窗口值。如果窗口任然是零,那么收到这个报文段的一方就重新设置持续计时器。否则,就打破死锁。
2考虑传输效率
三种机制来控制tcp报文段的发送时机,
①tcp维护一个变量,它等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个Tcp报文段发送过去
②由发送方的应用进程指明要求发送报文段,即TCP支持的push操作
③发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过MSS)发送出去
TCP的实现广泛使用Nagle算法。算法如下:若发送应用进程把要发送的数据逐个字节地发送到TCP的发送缓存,则发送方就把第一个数据字节发送出去,把后面到达的数据都缓存起来。当发送方收到对第一个数据字节的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存。只有在收到对前一个报文段的确认后才继续发送下一个报文段。当数据到达较快而网络速率较慢时,用这样的方法可明显地减少所用的网络带宽。Nagle算法还规定,当到达的数据已达到发送窗口大小的一半或已达到报文段的最大长度时,就立即发送一个报文段。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值