我正在寻找报价中最后一个问题的答案
这是对这个线程的回应:
由于这些是短消息(< MSS),我猜堆栈可能正在实现 Nagle 的算法。服务器是否在执行某种延迟的 ACK?如果可能,您应该捕获跟踪并查看是否有来自另一方的未决确认。在任何一种情况下,TCP_NODELAY 都应该有所帮助。
(1) ACK 代表什么?我用谷歌搜索了它,但找不到定义 (2) 我会给你和 Nikolai 建议的 TCP_NODELAY 一个镜头,如果它确实回答了问题,则标记为已回答。感谢你目前的帮助!
ACK 是 tcp 确认。服务器可能正在等待将它们捆绑在一起,而不是为每个段发送 ACK。如果客户端实现了 Nagle 的算法,它会在发送带有 < MSS 的段之前等待 ACK。在 TCP 跟踪中,您必须在 TCP 标头中查找 ACK 编号并将其与 SEQ 编号相关联,以查看是否发生这种情况。或者您可以在此处发布捕获的片段。
好的,我更新了问题以在我的线程中显示创建套接字以及 Java 服务器的 run 方法。你会看到我有 socketClient.setTcpNoDelay(true); 已经在那里了,但它没有修复它。该文档有它应该是 socketClient.setTcpNoDelay(on); 但后来我需要初始化。我有点困惑我应该初始化什么“on”来制作 socketClient.setTcpNoDelay(on); 工作?
关于 TCP 跟踪,我是从 android(客户端)还是计算机(服务器)端执行此操作?我在哪里/如何实现它?它只是socketClient吗??
附加信息:
- 我在 Eclipse 中开发
- 我的 TCP 客户端(android)发布在链接的问题中
- 我的 TCP 服务器 (java) 发布在链接的问题中