关于TCP的流量控制的一些小知识

所谓流量控制,就是让发送方的发送速率不要太快,让接收方来得及接收。
与流量控制有关的几个小知识:
坚持定时器:每次给对方发送ack的时候,会同时发送一个接收窗口的大小值,告诉对方我还可以接收多少数据,单位为字节。如果接收窗口的大小为0,对方就不发送数据了,如果在接收窗口变为0之后的某一个时刻,我又有窗口可以接收你的数据了,就给对方发送一个通知报文,报文里面带着接收窗口的大小值,而这个告诉对方可以发送数据的报文丢失了,客户端就在一直等待带有非0窗口值的报文,而我觉得我已经告诉你我可以接收报文了,就一直等待对方的报文,就会发生死锁。这时候就需要一个坚持定时器,收到窗口值为0的时候开始计时,若计时器设定的时间到了,还没有收到可以发送数据的非0窗口的报文,就发起探测报文,去问问你的接收窗口是不是还是0啊,如果收到回应,窗口值依然为0,则继续等待,否则,死锁的僵局就可以打破了。
Nagle算法:如果想要发送一个内容长度为1字节的报文,就要加上20字节的TCP首部,再加上20字节的IP首部,这样为了发一个内容为1字节的报文,就要在网络上传输41字节的报文。如果算上响应报文,又需要40字节的响应报文,总计为了发一个内容为1字节长度的报文,需要在网络上传输81字节的报文。为了避免这种对网络带宽的极度浪费,就可以使用Nagle算法:如果应用进程逐个字节的将报文送到发送缓冲区,就先将第一个字节的报文发送出去,其他剩余的字节在发送缓冲区内缓存,当第一个字节的响应到了,再将发送缓冲区内已有的报文组装成一个报文发送出去,如果发送缓冲区内到达的数据已经超过了发送窗口的一半,就不需要等待,直接发送,这样做,可以有效的提高网络的吞吐量。
糊涂窗口综合症:如果发送窗口有一个字节的剩余,就将这一个字节的窗口大小发送给对方,对方发送一个字节的数据,随后又有一个字节的剩余,就又给对方说,我这有一个字节的空间,你发过来一个字节的数据吧,对方就又发过来一个字节,这样一个字节一个字节的发送数据,好繁琐啊,网络的效率也太低了。要像解决这个糊涂的问题,可以让接收方等待一段固定时间或者等到接受缓冲区已经存了一半大小的空闲空间的时候才告诉对方我的窗口大小。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值