假设我有一个将数据包本身分割的应用层协议。因此,如果它有100 MBytes的数据,那么它将将数据分成10000段,并将每个段分别发送给TCP。TCP将不必进行重新排序。那么,这种行为会改变网络的任何参数吗?我的吞吐量会更低吗?或者,与只向TCP发送一次数据的应用层协议相比,TCP的拥塞控制算法是否同样有效?在某种程度上,我猜这类似于一个通过网络发送太多小数据的系统(鼠标流量)。但我不确定这会产生什么效果。
发布于 2020-01-16 07:30:24
TCP将不必进行重新排序。
它这样做了,没有办法阻止它。
如果您的应用程序发送(非常)小块数据,TCP试图收集它们并以更大的段进行传输。收集有一个短暂的超时(默认情况下为200 ms,参见Nagle的算法),当应用程序中没有更多的数据时,当前的TCP段将被发送出去。这可能会增加延迟,您可以使用TCP_NODELAY套接字选项和PSH标志告诉TCP立即发送和转发每个块,这可能会增加开销和浪费带宽。
如果应用程序已经处理了数据分割、重新排序、拥塞控制和传递确认,则可能需要考虑允许应用程序完全控制的UDP。然而,试图重新发明TCP通常是失败的。
https://networkengineering.stackexchange.com/questions/64593
复制相似问题