一、根据RFC2581协议规范,TCP拥塞控制采用了以下4种算法:
1. 起始缓冲算法 (slow start)
2. 解除拥塞算法 (congestion avoidance)
3. 快速重发算法 (fast retransmit)
4. 快速恢复算法 (fast recovery)
Nagle算法就是以这4种算法为基础来实现的。
根据算法原理,对于TCP数据包发送过程,简单理解如下:
TCP package-> 缓冲进window缓存区 ->
slow start网络探测 -> 连接被唤醒 -> 包大小超过拥塞阀值 ->
yes -> 开始拥塞 -> congestion avoidance解除拥塞 -> 是否解除 ->
yes -> 准备从缓存区发包到目标设备 -> 是否满足Nagle算法 ->
yes -> (a) 发送包... -> 是否超时或收到重复ack ->
yes -> fast retransmit快速重发ack -> 是否三次重发ack失败 ->
yes -> 丢包,fast recovery快速恢复 -> (a)
Post:
这里面实现需要多个定时器,对于算法细节,RFC2581规范中已说明,而源码实现可以阅读linux或开源的tcp/ip源码,
这是一个对问题不断理解与实践的过程,最终我们将完全吃透它们哟~
二、Nagle核心源码分析:
Good luck !!
mars
2012.05.09
If you have more info to communicate with me for this article, please feel free to
Q-me:270982354 or E-me: mars.fu@foxmail.com.