写在前面:学习网络不能太急,太多概念没有理清楚的话看更深层的东西就乱七八糟的一头雾水。((ㄒoㄒ))
一、TCP的拥塞控制
1. 拥塞现象
- 分组延迟(四种原因):排队延迟
- 相当于控制网络的负载:
- 与可靠数据传输进行区分:
- 可靠数据传输:个体性问题
- 拥塞控制:社会性问题
- 与流量控制区分:
- 流量控制:接收方处理不了(超过缓冲区)
- 拥塞控制:网络处理不了(网络拥塞)
- 主机A、B共享链路及路由器缓存
- C:出口链路带宽
- 假定链路带宽R
- 网络结构中有多个路由器,路由器有有限缓存,超时丢失会重传
- 在多跳网络中,容易发生上游数据处理资源浪费的情况,导致网络性能更差
2. 拥塞控制
- 拥塞控制在传输层而不是应用层去做
3. TCP的拥塞控制
3.1 TCP的拥塞窗口调节
拥塞控制的最基本手段就是控制发送速率
- congwin动态调整以改变发送速率:
- 网络拥塞时,需要发送速率rate慢一些——congwin变小
- congwin反映所感知到的网络拥塞:
- 判断网络拥塞:发送超时或收到三个重复ACK时=网络拥塞
- 谨慎探测可用速率,线性地加
- MSS:最大的段长度
- 而若发生拥塞,则需要快速降低网络速率
- 刚增长时,我们希望他能增长地快些,从而降低对带宽的浪费
- 因此,初始时,我们使拥塞窗口大小指数增长。
- 一开始一个segment段大小的拥塞窗口大小(全部发送)
- 确认后没有问题,则拥塞窗口大小指数增长
- 之后同理
- 由指数增长切换为线性增长称之为拥塞避免阶段
- 初始threshold为8。经过初次尝试后,调整为6(loss事件前值的二分之一) 。
- 可以猜测,这里的拥塞是通过收到三个ACK得到的。
为什么这两种情况的处理不同呢?
- timeout事件发生表示拥塞更严重,连ACK都无法接收到了