乐趣区

网络流量控制与拥塞控制详述

前言
在复杂的网络通信中, 网络交互在线路上产生巨大流量, 由于设备性能的差异和缺陷, 网络中发生像高速公路的拥塞也是很正常的, 为了减少网络中数据拥塞和丢失所造成的损失, 因此网络协议中采用了流量控制和拥塞控制技术.
辨析

流量控制: 流量控制主要由通信双方设备决定, 具体为发送方发送窗口和接收方接收窗口决定. 一般地, 发送窗口会有一定的数据缓存, 所以发送方并不能发送最大窗口值数据, 而接收方的接受窗口也可能存在数据缓存, 于是这两个窗口决定了发送方所发送的数据量, 因此称之为流量控制.
拥塞控制: 拥塞控制没有那么明确, 总的来讲, 除开发送端和接收端, 其中间网络设备的通信能力, 就像一个黑盒子, 我们知道接收方返回的确认信息越来越慢, 于是我们就猜测其中拥塞程度变大了. 这就是网络出现了拥塞.

流量控制
首先, 流量控制涉及四个窗口, 即发送方和接收方各有两个 (发送窗口, 接收窗口), 所以流量通信是四个窗口, 并不是我们想象中的两个窗口哦, 如图:

流量控制具体流程

假设窗口大小为 300 字节, 此时已发送出序号 101 开始的 300 字节数据, 窗口在框 1 处.
假设此时接收到了接收方的确认 ack=301, 且窗口大小为 200B(流量控制起作用了, 即希望下次只发送 200B 数据), 在此, 数据并未被完全接收, 因此窗口只能滑动到确认号为 301 的位置. 如图中框 2, 所以窗口中的 101,201 缓存即被删除. 此时待发数据为 401 和 501.
此时收到接收方的确认 ack=601, 窗口 300, 即窗口滑动向 601, 如图窗口 3 准备发送接下来的 601,701,801.
当发送方一直没收到确认或确认包窗口值为 0 时, 会发送一个探测性数据段, 返回窗口值为 0 时, 启动超时计时器, 到时后继续发送探测, 若接收端发送来了窗口值不为 0 的数据段, 则发送端开始正常发送数据.

流量控制的两种算法
Nagle 算法
发送端并不一有数据就发送, 而是自己先把数据缓存起来, 达到接收方窗口值一半或发送窗口最大值, 就即刻发送.
Clark 算法

接收端让发送方等待, 当自己由足够的接收窗口空间时, 再发送确认信息.
在流量控制中, 这两种算法十分重要, 并且是结合使用的.

TCP 拥塞控制
TCP 拥塞控制主要依靠 TCP 连接双方协定的协议来减少数据的发送儿实现的. 进入网络的数据大于出口时, 就会发生网络拥塞. 实际吞吐量和输入负荷之间的关系:

1988 年解决方案
术语

CWND: 拥塞窗口大小
SSTHRESH: 慢启动阈值

过程

有一初始值 SSTHRESH, 并维护一拥塞窗口.
慢启动:2 倍速增长.
拥塞避免: 每次加 1.
阻塞后,SSTHRESH 变为原来的一半. 重新开始步骤 2

发送数据段大小: 为 MAX(发送窗口大小, 拥塞窗口)
1990 年后新增方案: 快速重传 / 快速恢复
快速重传
快速恢复
未完待续 …..

退出移动版