我正在尝试了解TCP拥塞避免机制,但我不明白一件事: TCP拥塞避免是按流量还是按链路进行?
换句话说:有2个路由器A和B. A正在向B发送两个TCP流 - 当一个TCP流检测到拥塞时,它是否会减少另一个流中的窗口大小?
当然,如果发生这种情况,另一个流程会在一段时间内检测到拥塞,但是第二个流程会等待"等等。直到它自己检测到拥塞?这将是非常无效的......
非常感谢
答案 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连接的数据包,这可能会以更高的优先级处理。