当应用层更改为发送小数据包时,TCP的行为是什么

网络工程 tcp 协议论
2022-02-23 01:57:32

假设我有一个应用层协议来分割数据包本身。因此,如果它有 100 MBytes 的数据,那么它将数据分成 10000 个段,并将每个段单独发送到 TCP。TCP 不必重新排序。那么这种行为会改变网络的任何参数吗?我的吞吐量会更低吗?或者,与只向 TCP 发送一次数据的应用层协议相比,TCP 的拥塞控制算法是否能正常工作?在某种程度上,我猜这类似于系统通过网络发送太多小型数据(鼠标流量)。但我也不确定这会产生什么影响。

1个回答

TCP 不必重新排序。

它这样做了,没有办法阻止它。

如果您的应用程序发送(非常)小块数据,TCP 会尝试收集它们并以更大的分段传输它们。收集有一个短暂的超时时间(默认为 200 毫秒,请参阅Nagle 算法),当应用程序没有更多数据时,当前 TCP 段被发送出去。这可能会增加延迟,您可以使用TCP_NODELAY套接字选项和PSH标志来告诉 TCP 立即发送和转发每个块,但可能会增加开销和浪费带宽。

如果应用程序已经处理了数据分段、重新排序、拥塞控制和交付确认,您可能需要考虑允许对应用程序进行完全控制的 UDP。但是,尝试重新发明 TCP 通常会失败。