网络负载生成技术:从TCP、UDP到Web工作负载
1. TCP数据传输与Nagle算法影响
在数据传输中,TCP数据段的有效负载长度起着重要作用。在实验里,我们发现“全尺寸”TCP段的有效负载长度上限为1400字节,而700字节恰好是这个上限的一半。
1.1 有效负载长度低于700字节的情况
当发送请求指定的有效负载长度低于700字节时,至少两个连续的发送请求可以合并,并通过一个TCP段发送出去。在接收端,由于采用了延迟确认算法,在接收到两个这样合并的数据包(每个数据包至少包含两个发送请求缓冲区)后,才会生成一个单独的ACK。这种方式减少了需要生成的ACK数量,进而减少了传输指定数据量所需的往返周期数,优化了性能。
1.2 有效负载长度超过700字节的情况
当发送请求指定的缓冲区大小超过MTU的一半(例如800字节)时,第一个请求的800字节和后续第二个请求的前600字节可以合并在一个TCP段中发送。第二个发送请求剩余的200字节只能与后续第三个和第四个发送请求的缓冲区合并。这样,最后(第四个)发送请求的缓冲区中会剩下400字节(200 + 800 + 800 - 1400 = 400),因为它们无法放入第二个全尺寸的TCP段。此外,每个奇数编号的TCP段都会受到延迟确认机制的影响,发送方只有在接收到为下一个偶数编号段生成的ACK后,才能获得更多的SO_SNDBUF配额。因此,当启用Nagle算法时,对于超过700字节标记的有效负载长度,传输指定数据量所需的往返时间可能会增加,相应的数据速率可能会低于禁用Nagle算法的情况。