前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TCP流量控制

TCP流量控制

作者头像
zy010101
发布2019-05-25 19:49:20
8030
发布2019-05-25 19:49:20
举报
文章被收录于专栏:程序员程序员

TCP的接收方具有缓存能力,因此发送方传输的数据如果是无序到达接收方的时候,接收方就需要缓存数据,等待某个序号之前的所有报文段都到达时,才将它们一起交付给上层。还有的时候,发送方发的太快了,而接收方由于设备性能等因素影响,导致读取数据相对缓慢,从而导致缓冲区溢出。这不是我们希望看到的。

TCP为上层应用程序提供了流量控制机制。以消除缓冲区溢出的可能。TCP通过发送方维护的接受窗口变量来实现流量控制。即窗口会告知发送方接收方还有多少可用空间。

接受窗口和接受缓存示意图

现在看起来一切都完美了。其实还是存在一个问题的。那就是当接收方的缓存空间为0了,那么将rwnd=0返回给发送方以后,(此处还应该假设接收方不主动和发送方通信)发送方知道了接收方没有缓存空间了。这个时候接收方会将自己的缓存清理。但是发送方并不知道接收方现在有了新空间。此时,发送方将不再发送数据。(TCP连接是由客户端向服务器发起请求的)这就导致了死锁。因此,当rwnd=0返回的时候,发送方应当继续发送一个字节的报文段。然后接收方接受报文段,并返回一个非0的rwnd值。

UDP并不提供流量控制,这可能导致缓存溢出。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年05月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档