关键词:RTT, SRTT,RTO, reordering, Sliding Window,Flow Control,MSS,nagle, congestion control, Congestion Window(cwnd), ack, Open, Loss, Disorder, Recovery, CWR, slow start, congestion avoidance, fast recovery, sshthresh,Fast Retransmit, duplicate ACK, Reno, FACK, SACK, Vegas, HSTCP, BIC, westwood,Fast-tcp, Zeta-tcp

1、TCP/IP协议栈理论模型与linux内核实现映射

2、TCP协议中的模块

2.1、TCP头格式

2.2、TCP状态机

2.3、TCP连接(建立/关闭)

2.4、数据传输(sequence Number)

2.5、TCP重传机制(超时重传、快速重传,SACK)

快速重传默认算法:rate-halving
最新的算法:proportional rate reduction(google 2013)

2.6、TCP的RTT计算(用来算RTO)

经典算法:
SRTT =( α * SRTT ) + ((1- α) * RTT)
RTO = min [ UBOUND, max [ LBOUND, (β * SRTT) ] ]
改进算法:
partridge算法,karels算法
SRTT= SRTT+ α(RTT– SRTT)
DevRTT= (1-β)*DevRTT+ β*(|RTT-SRTT|)
RTO= µ *SRTT + ∂ *DevRTT在Linux下,α = 0.125,β = 0.25, μ = 1,∂= 4 ——“调得一手好参数”

2.7、TCP滑动窗口(流量控制)

默认流量控制算法:Nagle,减少小包发送(
    1)要等到 Window Size>=MSS 或是 Data Size >=MSS,
    2)等待时间或是超时200ms
改进的算法:单个数据包自同步,小脉冲平滑窗口等

2.8、TCP的拥塞处理(此阶段确定ssthresh和cwnd)

  • 四个算法:1)慢启动2)拥塞避免3)拥塞发生,快速重传,4)快速恢复

  • 高带宽时延乘积网络(High-Bandwidth-Delay-Product Network,BDP)
  • 1Gbps的网络时延为100ms,那么BDP为12207K左右,其窗口大小到12,500,000,如果按照最理想的情况每个包大小为1500个字节的话,那么必须需要8333个包大小的拥塞窗口

3、背景小结

  • 在TCP协议栈框架下保证TCP高速传输,需要满足的条件
  1. 好的流量控制算法
  2. 好的快速重传算法
  3. 好的拥塞控制算法
  4. 调的一手好参数
  • 好的算法性能
  1. 公平性、效率、稳定性和收敛性