TCP协议(下)

2023-10-25 11:26:37 浏览数 (2)

拥塞控制

何谓拥塞(Congestion)

  • 非正式定义 : 大量发送主机发送了太多数据,亦或者发送速度过快以至于网络无法处理
  • 具体表现 :
    • 分组丢失(路由器缓存溢出)
    • 分组延迟过大(在路由器缓存中排队)
  • 拥塞控制 VS 流量控制
  • A top-10 problem

拥塞的成因和代价

场景1
  • 两个senders,两个receivers
  • 一个路由器,无限缓存
  • 没有重传
  • 拥塞时分组延迟太大
  • 达到最大throughput
场景2
  • 一个路由器,有限buffers
  • Senders重传分组
  • 情况a : Sender能够通过某种机制获得路由器buffer信息,与空闲才发λin>λout(goodput)
  • 情况b : 丢失后才重发 : λ’in>λout
  • 情况c : 分组丢失和定时器超时后都重发,λ’in变得更大
  • 拥塞的代价:
    • 对给定的"goodput",要做更多的工作(重传)
    • 造成资源的浪费
场景3

question : 随着λin和λ’in不断增加会怎样?

  • 四个发送发
  • 多跳
  • 超时/重传
  • 拥塞的另一个代价:
    • 当分组被drop时,任何用于该分组的"上游"传输能力全被浪费掉

拥塞控制的方法

端到端拥塞控制
  • 网络层不需要显式的提供支持
  • 端系统通过观察loss,delay等网络行为判断是否发生拥塞
  • TCP采取这种方法
网络辅助的拥塞控制
  • 路由器向发送方显示地反馈网络拥塞信息
  • 简单的拥塞指示(1bit) : SNA,DECbit,TCP/IP ECN,ATM
  • 指示发送发应该采取何种速率
案例 ATM ABR 拥塞控制
  • ABR : available bit rate
    • “弹性服务”
    • 如果发送方路径"underloaded" 使用可用带宽
    • 如果发送方发送路径拥塞,将发送速率降到最低保障速率
  • RM(Resource Management) cells
    • 发送方发送
    • 交换机设置RM cell 位(网络辅助)
      • NI bit : rate 不许增长
      • CI bit : 拥塞指示
    • RM cell 由接收方返回给发送方
  • 在RM cell 中有显式的速率(ER)字段 : 两个字节
    • 拥塞的交换机可以将ER置为更低的值
    • 发送方获知路径所能支持的最小速率
  • 数据cell中的EFCI位 : 拥塞控制的交换机将其设为1
    • 如果RM cell 前面的data cell 的EFCI位被设为1,那么发送方在返回的RM cell 中置CI位数

拥塞控制的基本原理

  • Sender限制发送速率
    • LastByteSent - LastByteAcked <= CongWin
  • CongWin
    • 动态调整以改变发送速率
    • 反映所感知到的网络拥塞

question 1 : 如何感知网络拥塞?

  • Loss事件=timeout 或 3个重复 ACK
  • 发生loss事件后,发送方降低 速率

question 2 : 如何合理地调整发送速率?

  • 加性增 —乘性减: AIMD
  • 慢启动: SS

加性增 —乘性减: AIMD

  • 原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss
  • 方法: AIMD
    • Additive Increase: 每个RTT 将CongWin增大一个MSS——拥塞避免
    • Multiplicative Decrease: 发生loss后将CongWin减半

TCP慢启动 : SS

  • TCP连接建立时,CongWin=1
代码语言:javascript复制
example:
	MSS = 500 byte,
	RTT = 200 msec
初始化速率 initial rate = 20k bps
  • 可用带宽可能远远高于初始速率
    • 希望快速增长
  • 原理 : 当连接开始时,指数性增长
  • 核心算法
代码语言:javascript复制
initialize: Congwin = 1;
for (each segment ACKed)
	Congwin  ;
until (loss event ORCongWin > threshold);
  • 指数性增长
    • 每个RTT将CongWin翻倍
    • 收到每个ACK进行操作
  • 初始化速率很慢,但是快速攀升

Threshold变量

question : 何时应该由指数性增长切换为线性增长(拥塞避免)?

answer : 当CongWin达到loss事件值的1/2时

  • 实现方法
    • 变量Threshold
    • Loss事件发生时,Threshold被设为Loss事件前CongWin值的1/2

Loss事件的处理

  • 3个重复ACKs
    • CongWin切到一半
    • 然后线性增长
  • Timeout事件 :
    • CongWin直接设为1个MSS
    • 然后指数增长
    • 达到threshold后,再线性增长
  • 二者比较
    • 前者表示网络还能够传输一些segment
    • 后者表明拥塞更为严重

拥塞控制总结

  • When CongWin is below Threshold, sender in slow-start phase, window grows exponentially.
  • When CongWin is above Threshold, sender is in congestion-avoidance phase, window grows linearly
  • When a triple duplicate ACK occurs, Threshold set to CongWin/2 and CongWin set to Threshold
  • When timeout occurs, Threshold set to CongWin/2 and CongWin is set to 1 MSS
  • 当CongWin低于阈值时,发送器处于缓慢启动阶段,窗口呈指数级增长。
  • 当CongWin高于阈值时,发送方处于拥塞避免阶段,窗口线性增长
  • 当出现三重重复ACK时,Threshold设置为CongWin/2,CongWin设置为Threshold
  • 发生超时时,阈值设置为CongWin/2,CongWin设置为1 MSS

拥塞控制算法

例题

TCP性能分析

TCP throghput : 吞吐率

  • 给定拥塞窗口大小和RTT,TCP的平均吞吐率是多少?
    • 忽略掉Slot start
  • 假定发生超时时CongWin的大小为W,吞吐率是W/RTT
  • 超时后,CongWin=W/2,吞吐率是W/2RTT
  • 平均吞吐率为:0.75W/RTT

未来的TCP

举例:每个Segment 有1500 个byte, RTT 是100ms,希望获得 10Gbps的吞吐率

  • throughput = WMSS8/RTT, 则 W=throughputRTT/(MSS8)
  • throughput=10Gbps, 则W=83,333
  • 窗口大小为83,333
  • 吞吐率与丢包率(loss rate, L)的关系
  • 高速网络下需要设计新的TCP

TCP的公平性

  • TCP协议具备公平性
  • 如果 K 个TCP Session共享相同的瓶颈带宽 R,那么每个Session的平均速率 为R/K
  • 公平性与UDP
    • 多媒体应用通常不使用TCP, 以免被拥塞控制机制限制速率
    • 使用UDP:以恒定速率发送, 能够容忍丢失
    • 产生了不公平
  • 研究:TCP friendly
  • ** 公平性与并发TCP连接 **
    • ** **某些应用会打开多个并发连接
    • Web浏览器
    • 产生公平性问题
  • 例子:链路速率为 R,已有 9 个 连接
    • 新来的应用请求 1 个TCP,获得 R/10的速率
    • 新来的应用请求11 个TCP,获得 R/2的速率

0 人点赞