我们知道纳格尔算法。不知道如何更改默认的200 to超时。Linux中是否存在设置此设置的方法?
发布于 2019-02-06 17:11:22
那些200的不是来自Nagle的算法,而是延迟ACK。
您可以按照Mark的建议使用setsocketopt或使用ip路由来禁用延迟ACK,例如:
ip route change ROUTE quickack 1
我不知道有什么方法可以在“正常”(主要是非实时)内核中为延迟的ACK设置绝对超时。
发布于 2017-03-07 21:03:10
Nagle的算法可以防止小的、非完全大小的数据包被发送,如果传输中的数据还没有被确认。一旦接收到所有未完成数据的确认,或者缓冲区中有足够的新数据来生成一个完整的数据包,新数据包将被发送。Nagle的算法不涉及超时。
您所描述的行为可能是延迟确认,它允许每收到第二个数据包就发送ACKS。如果在超时内没有接收到第二个数据包,则发送ACK。或者,与Nagle类似的可能是TCP Corking,但是在发送新的小数据包之前不要无限期地等待未处理数据的ACK,TCP Corking将阻止在缓冲区填充或超时过期(200 is )之前发送新数据包。
根据您正在运行的Linux发行版的不同,您可以使用sysctl修改延迟确认超时值。例如,为了减少拉赫尔中的超时:
echo 1 > /proc/sys/net/ipv4/tcp_delack_min
然而,这个选项可能无法在Linux的其他口味中使用。
或者,如果您有编程访问权限,您可以修改应用程序以使用TCP_QUICKACK tcp城域网,这将有效地关闭延迟的ACK功能,并迫使应用程序为收到的每个数据包发送ACK。
要关闭TCP,您需要修改套接字调用来设置TCP_CORK参数--我不知道任何全局启用该参数的方法。
https://serverfault.com/questions/836675
复制相似问题