TCP发送队列卡住了

时间:2016-12-29 09:54:03

标签: linux sockets tcp

在网络出现延迟的情况下,即使ACK延迟大约32毫秒,TCP发送缓冲区也会变满,即使在5-10分钟后也不会清除。

这里有什么问题? 有什么方法可以检查当前的TCP发送缓冲区状态,这样我可以在缓冲区满了时停止传出流量吗? 任何TCP配置我应该小心吗?

它发生在openldap2.4堆栈中。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

  

有什么方法可以检查当前TCP发送缓冲区的状态,以便在缓冲区变满时可以停止传出流量?

如果发送缓冲区已满,它将自动停止发送:如果发送缓冲区已满,则发送/写入将阻塞(阻塞套接字)或失败(非阻塞套接字)。如果您想提前停止,请使用setsockopt(..., SO_SNDBUF,...)减小缓冲区                     – Steffen Ullrich

答案 1 :(得分:0)

要在Linux上检查TCP发送和接收队列,请使用block.id(sockstat)命令[man page]。

{{ forloop.counter }}

如果知道您感兴趣的TCP端口号,则可以对其进行过滤以方便查看,例如:

ss

ss -tn