0

我试图了解 TCP 拥塞避免机制,但我不明白一件事:TCP 拥塞避免是每个流还是每个链接?

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

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

多谢

4

2 回答 2

1

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

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

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

于 2012-09-04T21:32:21.337 回答
1

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

于 2012-08-30T21:48:52.650 回答