据我所知,TCP 慢启动用于补偿和防止拥塞和丢失。当成功建立连接并使用一段时间后,TCP 连接的带宽大约尽可能大。每次建立新连接时,即使它们是并发的,也会使用 TCP 慢启动,以较低的窗口大小启动连接,即使两个 TCP 堆栈都已经知道物理层的行为。
为什么 TCP 堆栈总是执行慢启动,即使它们可以记住最近与同一伙伴建立的连接的窗口大小?如果链路条件发生变化,它们难道不能安全地进行适当的快速启动,然后再降低连接质量吗?
答案1
假设两个 TCP 连接(即使是在相同的两个端点之间)将采用相同的路由是不安全的。例如,在多个连接之间进行负载平衡并考虑所涉及的端口是很常见的。
这似乎是一个奇怪的选择,但它是有道理的,因为如果大量数据包以无序方式接收,TCP 性能可能会受到影响,而将连接粘合到路由可以避免这种情况。通常,源 IP、目标 IP、协议、源端口(如果适用)和目标端口(如果适用)都会被哈希处理,并且哈希值用于选择下一跳。