TCP协议的可靠性
数据包丢失是对网络的破坏,因为它导致延迟。TCP协议建立了可靠的数据传输,但掩盖了丢包的影响。TCP确保数据的传输是基于一个叫做 "滑动窗口 "的概念。这种机制控制着传输的字节序列和收到的确认。
在排序的帮助下,接收方可以通知发送方丢失的数据(如数据包丢失)。独立地讲,发送方可以通过重传定时器的到期来检测丢包。从性能分析的角度来看,必须了解丢包的重要性,以避免 "机器中的幽灵"。下面的文章探讨了这些机制的行为和性能。
重传计时器
每个传输的数据包都由发送方链接到重传计时器。如果计时器在已传输的数据段被确认之前过期,则该数据段将被声明为丢失并重新传输。在性能方面,重传定时器有两个重要特点:
- 初始重新传输超时 (RTO) 的默认值几乎始终为 3000 毫秒。随后,该值会根据实际路径重传时间动态调整为更真实的值。
- 对于数据包的后续重新传输,超时值始终加倍。
对于短数据流(例如网络流量),重传计时器用于检测数据包丢失。只有 1000 字节的消息在单个数据包中传输。当然,如果数据包丢失,接收方无法发送接收确认,因为接收方不知道丢失的数据包曾经发送过。如果数据包在 TCP 连接的早期丢失,例如在三次握手期间丢失 SYN 数据包,则数据包丢失在三秒钟内不会恢复。
三次重复的ACK
在较大的数据流中,可以在重传定时器过期前检测到丢失的数据包。这是借助于三个收到的ACK副本来完成的。这种机制通常比等待重传定时器过期更有效。如果到达的节点收到的数据包不符合顺序,它就会发出重复的ACKs。失序的数据包可以是在丢失的数据包数据之后发送的数据包。重复的ACK包包含接收方仍在等待的准确序列号。当发送节点收到第三个重复的ACK时,它认为有关的数据包不仅被延迟,而且实际上已经丢失。结果,丢失的数据包被重新传输。如果发生这种情况,发件人会假定网络中存在拥堵,并将拥堵窗口减少50%,以积极应对拥堵。慢速启动机制会缓慢增加CWD值。
例如,如果一个服务器向客户传输一个大文件,由于慢速启动机制,发送节点的吞吐量提升得更慢。当拥塞窗口达到24时,数据包丢失会被一个三重复的ACK检测到。随后,服务器重传丢失的数据,CWD值减少到12。慢速启动机制将在这个时候重新启用其拥塞避免模式。这种行为在现代网络中经常看到。
结论和纠正措施
显而易见的是,防止因拥堵造成的数据包丢失将提高性能。然而,这只有通过减少其他流量的拥堵才能实现,可以通过以下方式实现:
- 用于排队优先的QoS政策
- 减少总流量或增加带宽
如果数据包丢失是由于其他情况造成的,如网络接口故障、队列配置错误或电缆连接不良,则必须确保TCP连接不会被不必要地关闭,不被不必要地超时,人们还可以减少重传超时的值。
扩展阅读
虹科 Allegro 介绍
虹科Allegro网络万用表 - 网络故障排除的一体化解决方案
虹科Allegro网络万用表是是先进的网络诊断工具,通过浏览器中的Web界面访问分析数据。简单部署,无需配置,只需要点击几下就可检测到网络问题。可以针对问题区域或错误,并可以从预算的流量中捕获PCAP以进一步分析。
- 一体化分析设备
- 软件永久许可(全功能可用)
- L2-L7全面分析
- 即插即用,无需配置
- 多种型号可选,1-200Gbit/s,满足不同规模网络需求
- 高速全流量捕获分析,回溯分析
- 中文界面支持