以下内容来自于小码哥"网络协议从入门到底层原理"
流量控制
-
如果接收方的缓存区满了, 发送方还在疯狂地发送数据
-- 接收方只能把收到的数据包丢掉, 大量的丢包会极大地浪费网络资源
-- 所以要进行流量控制 -
什么是流量控制?
-- 让发送方的发送速率不要太快, 让接收方来得及接收处理 -
原理
-- 通过确认报文中窗口字段来控制发送方的发送速率
-- 发送方的发送窗口大小不能超过接收方给出窗口大小
-- 当发送方收到接收窗口的大小为0
时, 发送方就会停止发送数据 -
rwnd
--wnd
->window
--r
->receive
--rwnd
-> 接收窗口 -
有一种特殊情况
-- 一开始, 接收方给发送方发送了0
窗口的报文段
-- 后面, 接收方又有了一些存储空间, 给发送方发送的非0
窗口的报文段丢失了
-- 发送方的发送窗口一直为零, 双方陷入僵局 -
解决方案
-- 当发送方收到0
窗口通知时, 这时发送方停止发送报文
-- 并且同时开启一个定时器, 隔一段时间就发个测试报文去询问接收方最新的窗口大小
-- 如果接收的窗口还是为0
, 则发送方再次刷新启动定时器
网友评论