第20章 TCP:成块数据流

所属:TCP/IP详解 卷2:实现 来源:TCP/IP详解 卷2:实现

本章描述TCP成块数据流的处理,包括成块数据的传输、吞吐量、滑动窗口、拥塞控制和性能等。


20.1 引言

什么是成块数据流

成块数据流(bulk data flow):

  • 大量数据的传输
  • 比如文件传输
  • 吞吐量很重要
  • 效率很重要

成块数据流关注吞吐量。


成块数据流的特点

成块数据流的特点:

  • 数据量大
  • 持续时间长
  • 吞吐量是关键
  • 效率很重要
  • 拥塞控制影响大

成块数据和交互式数据不同。


本章讨论的内容

本章讨论的内容:

  • 成块数据的传输
  • 吞吐量计算
  • 滑动窗口的大小
  • 拥塞控制的影响
  • 慢启动和拥塞避免
  • 性能问题

本章讨论成块数据流的性能。


20.2 吞吐量的计算

吞吐量的基本公式

吞吐量(throughput):

  • 单位时间传输的数据量
  • 通常用字节/秒或比特/秒

基本公式:

吞吐量 = 窗口大小 / 往返时间

为什么:

  • 一个窗口的数据发出去
  • 等一个RTT才能确认
  • 才能发下一个窗口
  • 所以吞吐量 = 窗口大小 / RTT

吞吐量由窗口大小和RTT决定。


带宽延迟积

带宽延迟积(Bandwidth-Delay Product, BDP):

BDP = 带宽 × 延迟

意义:

  • 管道的容量
  • 填满管道需要多少数据
  • 窗口大小至少要等于BDP才能跑满带宽

例子:

  • 带宽:100Mbps = 12.5MB/s
  • 延迟:100ms = 0.1s
  • BDP = 12.5MB/s × 0.1s = 1.25MB
  • 窗口需要至少1.25MB才能跑满

带宽延迟积是管道的容量。


窗口大小的限制

窗口大小的限制因素:

  1. 接收缓冲区大小

    • 窗口不能超过接收缓冲区
    • 接收方控制
  2. 拥塞窗口大小

    • 拥塞控制限制
    • 网络状况决定
  3. TCP窗口字段大小

    • 16位,最大65535字节
    • 窗口扩大选项可以更大

实际窗口:

实际窗口 = min(接收窗口, 拥塞窗口)

实际窗口是两者的最小值。


20.3 滑动窗口与成块数据

滑动窗口的效率

滑动窗口的效率:

  • 窗口越大,效率越高
  • 窗口小了,发送方经常等ACK
  • 管道填不满

理想情况:

  • 窗口 >= 带宽延迟积
  • 管道一直满
  • 吞吐量 = 带宽

窗口足够大才能跑满带宽。


成块数据的传输过程

成块数据的传输过程:

  1. 慢启动阶段

    • 窗口指数增长
    • 越来越快
    • 直到达到ssthresh或丢包
  2. 拥塞避免阶段

    • 窗口线性增长
    • 慢慢增加
    • 直到丢包
  3. 稳定阶段

    • 窗口在某个值附近波动
    • 丢包就减半
    • 然后慢慢增加
    • 锯齿形

成块传输经历几个阶段。


慢启动对成块数据的影响

慢启动的影响:

  • 开始时很慢
  • 需要时间才能达到全速
  • 短连接可能还没到全速就结束了
  • 长连接影响小

为什么需要慢启动:

  • 防止一开始就发太多
  • 导致网络拥塞
  • 慢慢探测网络容量

慢启动是必要的,但影响初始速度。


20.4 拥塞控制与成块数据

拥塞控制的四个阶段

拥塞控制的四个阶段:

  1. 慢启动(Slow Start)

    • cwnd指数增长
    • 每个RTT翻倍
  2. 拥塞避免(Congestion Avoidance)

    • cwnd线性增长
    • 每个RTT加1 MSS
  3. 快速重传(Fast Retransmit)

    • 3个重复ACK触发
    • 立即重传
  4. 快速恢复(Fast Recovery)

    • 快速重传后
    • 不进入慢启动
    • 直接拥塞避免

四个阶段共同工作。


拥塞控制对吞吐量的影响

拥塞控制对吞吐量的影响:

  • 丢包会降低吞吐量
  • 窗口减半,然后慢慢恢复
  • 丢包率越高,吞吐量越低

公式(简化):

吞吐量 ≈ 1.22 × MSS / (RTT × √p)
  • p是丢包率
  • 丢包率越高,吞吐量越低

丢包严重影响吞吐量。


长肥管道

长肥管道(Long Fat Pipe, LFN):

  • 带宽高、延迟大的网络
  • 带宽延迟积很大
  • 普通TCP窗口不够大
  • 需要窗口扩大选项

问题:

  • 16位窗口最大65535字节
  • 长肥管道需要更大的窗口
  • 窗口扩大选项解决

长肥管道需要特殊处理。


20.5 TCP的性能问题

影响TCP性能的因素

影响TCP性能的因素:

  1. 带宽

    • 网络的最大速率
    • 物理限制
  2. 延迟

    • 传播延迟
    • 处理延迟
    • 影响吞吐量
  3. 丢包率

    • 丢包重传
    • 拥塞窗口减小
    • 影响吞吐量
  4. 窗口大小

    • 接收窗口
    • 拥塞窗口
    • 限制吞吐量
  5. MSS大小

    • 最大段大小
    • 影响效率
    • 大的MSS效率高

很多因素影响TCP性能。


性能优化

TCP性能优化:

  1. 增大缓冲区

    • 增大接收缓冲区
    • 窗口可以更大
    • 提高吞吐量
  2. 窗口扩大选项

    • 支持更大的窗口
    • 长肥管道需要
  3. 路径MTU发现

    • 使用最大的MSS
    • 避免分片
    • 提高效率
  4. 选择性确认(SACK)

    • 更精确的重传
    • 提高效率
  5. 时间戳选项

    • 更精确的RTT测量
    • PAWS防止序号回绕

各种优化提高性能。


20.6 成块数据的例子

例子:文件传输

文件传输的例子:

场景:

  • 文件大小:10MB
  • 带宽:100Mbps
  • RTT:100ms
  • MSS:1460字节
  • 初始窗口:1 MSS

过程:

  1. 慢启动:窗口指数增长
  2. 达到拥塞避免:线性增长
  3. 可能遇到丢包,窗口减半
  4. 继续增长
  5. 传输完成

理想时间:

  • 10MB / 12.5MB/s = 0.8秒
  • 但实际因为慢启动、拥塞等,时间更长

实际时间比理想时间长。


20.7 小结

吞吐量计算

  1. 基本公式

    • 吞吐量 = 窗口大小 / RTT
  2. 带宽延迟积

    • BDP = 带宽 × 延迟
    • 管道的容量
    • 窗口至少要这么大
  3. 窗口限制

    • 接收窗口
    • 拥塞窗口
    • 取最小值

滑动窗口与成块数据

  1. 窗口效率

    • 窗口大效率高
    • 填满管道
  2. 传输阶段

    • 慢启动
    • 拥塞避免
    • 稳定阶段
  3. 慢启动的影响

    • 开始慢
    • 短连接影响大

拥塞控制与成块数据

  1. 四个阶段

    • 慢启动
    • 拥塞避免
    • 快速重传
    • 快速恢复
  2. 丢包的影响

    • 降低吞吐量
    • 窗口减半
  3. 长肥管道

    • 带宽高延迟大
    • 需要大窗口
    • 窗口扩大选项

性能问题

  1. 影响因素

    • 带宽、延迟
    • 丢包率
    • 窗口大小
    • MSS大小
  2. 性能优化

    • 增大缓冲区
    • 窗口扩大
    • 路径MTU发现
    • SACK
    • 时间戳

关键概念

  1. 吞吐量

    • 窗口大小 / RTT
    • 带宽延迟积
  2. 成块数据流

    • 大量数据传输
    • 吞吐量是关键
  3. 拥塞控制

    • 慢启动
    • 拥塞避免
    • 影响吞吐量
  4. 长肥管道

    • 高带宽大延迟
    • 需要大窗口
  5. 性能优化

    • 各种优化技术
    • 提高吞吐量

成块数据流