TCP的流量控制
1、利用滑动窗口实现
原理:让发送方的发送速率不要太快,要让接收方来得及接收。
原则:发送方的发送窗口不能超过接收方给出的接收窗口的数值。窗口单位是字节,不是报文段。[通过TCP首部窗口字段(rwnd)调整接收方的发送窗口数值大小]
注意一种情况:如果接收方发送rwnd=0的报文给发送方(也就是不允许发送方发送数据,这时候可能接收方窗口中数据已经满了),这时候发送方要暂停发送数据,等待接收方的rwnd重新调整大小,过一段时间如果接收方发送一封报文使得rwnd>0(发送方可以发送数据了),而很不巧,报文丢失了!那么发送方会一直等下去吗?答案是不会。TCP为每一个连接都设置一个持续计时器。只要发送方接收到了rwnd=0的报文就启动持续计时器,若时间到了,便发送一个探测报文段(仅携带一个字节),这时候接收方就可以发送确认报文,调整rwnd和持续计时器,解决问题。
2、TCP的传输效率
TCP的首部有至少二十个字节,如果每次发送一个字节,那么效率会降低很多,所以需要适当调整TCP报文的大小。有三种机制:1)让TCP维持一个变量MSS(最大报文段长度),只有缓存到MSS后再将数据发送出去;2)由应用程序指明数据的长度,即推送(PSH)操作;3)由发送方的计时器控制,时间到达了便发送(长度不能超过MSS)
而现在广泛使用的是Nagle算法来调控,大致是这样子,最开始发送一个字节,从发送到接收,返回收到确认报文这段时间,发送方先将这期间需要发送的到达数据缓存,收到确认报文后再发送数据,一直循环。
参考《计算机网络第7版》谢希仁