细流与TCP¶
大量使用可靠传输协议的互联网服务都表现出我们所称的“细流”特性。这意味着应用程序发送数据的速率非常低,以至于传输协议的重传机制无法完全有效。在依赖时间的场景(如在线游戏、控制系统、股票交易等)中,用户体验取决于数据传输延迟,丢包对服务质量而言可能是毁灭性的。极高的延迟是由于TCP依赖于应用程序新数据的到达,才能通过快速重传有效触发重传,而不是等待长时间的超时。
在分析了大量依赖时间的交互式应用程序后,我们发现它们通常产生细流,并且在整个生命周期内都保持这种流量模式。时间依赖性与使用TCP时这些流会导致高延迟的结合是不幸的。
为了减少丢包时的应用层延迟,已经开发了一系列机制,以解决细流的这些延迟问题。简而言之,如果内核检测到细流,重传机制将按以下方式修改:
如果流是细流,则在第一个重复ACK时进行快速重传。
如果流是细流,则不应用指数退避。
这些增强功能仅在流被检测为细流时应用。这通过定义在途数据包数量的阈值来实现。如果正在传输的数据包少于4个,则无法触发快速重传,并且该流容易出现高重传延迟。
由于这些机制是针对依赖时间的应用程序,因此必须由应用程序使用 TCP_THIN_LINEAR_TIMEOUTS 和 TCP_THIN_DUPACK IOCTLS 或 tcp_thin_linear_timeouts 和 tcp_thin_dupack sysctls 来专门激活它们。默认情况下,这两种修改都是关闭的。
参考文献¶
有关这些修改以及大量实验数据的更多信息,请参阅此处:
“通过可靠传输提高交互式细流应用的延迟” http://simula.no/research/nd/publications/Simula.nd.477/simula_pdf_file