【web性能权威指南】TCP

延迟

  • 分组从信息源发送到目的地所需要的时间

带宽

  • 逻辑或物理通信路径上的最大吞吐量

TCP连接 三次握手:

  • 为什么说在发送数据之前需要经历一次完整的往返?
  • 建立TCP连接需要3次SYN分组确认,而在发送第三次SYN确认分组后,发送端可以立即发送数据。此时已经经历了一次完整的往返。但是接收端必须在第三次SYN到达确认后才可以接收数据。

流量控制

  • 每个ACK分组都会携带rwnd值以便客户端和服务器动态调整发送数据大小

rwnd 接收窗口

cwnd 拥塞窗口

拥塞控制

  • 服务器发送数据的值为min(rwnd, cwnd), 每个ACK确认, cwnd + 1, 直到达到rwnd的值

慢启动重启 Slow-Start Restart SSR

  • 连接空闲后重置连接的拥塞窗口

拥塞预防

  • 把丢包作为网路拥塞的标志,采取删包措施
  • 删包算法
    • AIMD 倍减加增 发生丢包时拥塞窗口减半
    • PRR 比例降速

BDP 带宽延迟积

+ 任意时刻处于在途未确认状态的最大数据量

TCP队首阻塞 HOL (Head of Line)

  • 每个TCP分组都带有唯一序号,分组必须按序被接收。如果中途有分组未到达,后续分组进入TCP缓冲区,等待丢失分组被重发并确认。

抖动

  • 分组到达时间存在无法预知的延迟变化(因为HOL),这个时间变化称为抖动

针对TCP的调优

  1. 增大TCP的初始拥塞窗口
  2. 禁用慢启动重启
  3. 窗口缩放
    • 支持大于64k的rwnd, 在TCP握手阶段rnwd标志位左移16位,使支持最大1G的发送数据
  4. TCP快速打开(需要客户端于服务器的共同支持)