TCP - 拥塞避免

时间:2012-08-30 11:22:14

标签: tcp congestion-control

我正在尝试了解TCP拥塞避免机制,但我不明白一件事: TCP拥塞避免是按流量还是按链路进行?

换句话说:有2个路由器A和B. A正在向B发送两个TCP流 - 当一个TCP流检测到拥塞时,它是否会减少另一个流中的窗口大小?

当然,如果发生这种情况,另一个流程会在一段时间内检测到拥塞,但是第二个流程会等待"等等。直到它自己检测到拥塞?这将是非常无效的......

非常感谢

2 个答案:

答案 0 :(得分:1)

它会减小当前连接的窗口大小。每个连接的RTT和窗口都是独立维护的。

答案 1 :(得分:1)

路由器在第3层(IP)上运行,并且不知道第4层(TCP),因此,路由器不参与TCP拥塞避免机制。此机制完全由TCP端点实现。它由路由器丢弃IP数据包触发,但(经典)路由器不知道哪些更高级别的协议IP数据包携带。

从安全角度来看,一个流不会影响另一个流这一事实是非常可取的。使用NAT,您可以让许多主机共享相同的IP地址。从外部世界看,所有这些主机看起来都像一台机器。因此,如果某个服务器降低了来自单个IP地址的所有TCP连接的吞吐量,以响应其中一个连接中丢弃的数据包,这将打开通往相当令人讨厌的DoS攻击的大门。

另一个问题是某些路由器可能配置为根据IP ToS字段丢弃数据包。例如,对延迟敏感的SSH流量可能设置与批量FTP下载不同的ToS。如果路由器配置为考虑ToS字段,它可能会丢弃属于FTP连接的数据包,这会触发拥塞避免,但不应该影响属于SSH连接的数据包,这可能会以更高的优先级处理。