TCP global synchronization
在计算机网络中,TCP global synchronization 可能发生于拥塞期间的 TCP/IP 流上,因为当 packet 丢失发生时,每个发送方将同时减少它们的传输率。
Internet 上的路由器通常有 packet 队列,这是为了允许在网络繁忙时能保存 packets,而不是丢弃它们。
因为路由器资源有限,这些队列的大小也是受限的。最简单的限制队列大小的技术是 tail drop。队列允许填到它的最大大小,随后新的 packets 被简单的丢弃直到队列中再次有空间。
当用于 TCP/IP 路由器处理多个流时,这会造成问题,特别是在突发的流量出现时。当网络稳定时,队列时常是满的,这没什么问题,除了满队列导致高延迟。然而,流量的突然增加可能会导致大量已建立的稳定的流同时丢弃 packets。
TCP 能从丢弃 packets 中自动恢复,它将这些丢包解释为网络拥塞 (这通常是正确的)。发送方在一段时间内减少它的发送率,随后通过再次增加发送率尝试找出网络是否不再拥塞。这被称为 slow start 算法。
几乎所有的发送方在增加它们的发送率之前都使用相同的延迟时间。当延迟过期时,与此同时,所有的发送方都将发送另外的 packets,路由器的队列再次溢出,更多的 packets 将被丢弃,所有发送方都将等待固定的延迟…无限循环下去;与 thundering herd problem 进行比较。
这一模式的每个发送方与其他发送方都同时减少或增加传输率被称为 “global synchronization”,会导致带宽的低效使用,因为大量丢弃的包必须被重传,还因为较稳定状态下,当发送方在每次丢包后回退时 发送方的发送率降低。
这一问题一直是许多研究的主题。一致的共识是 tail drop 算法是导致该问题的原因,其他 queue size management algorithms,例如 Random Early Detection(RED) 和 Weighted RED 将减少 global synchronization 的可能性,同时在流量激增或负载严重时保持队列大小不高。