【问题标题】:Simulating HTTP/TCP re-transmission timeout模拟 HTTP/TCP 重传超时
【发布时间】:2010-12-15 03:28:35
【问题描述】:

我在 linux 上工作。 我有一个 HTTP 客户端,它从 HTTP 服务器请求一些数据。 HTTP 客户端是用 C 编写的,HTTP 服务器是用 perl 编写的。 我想在客户端模拟TCP重传超时。

我假设优雅地关闭套接字不会导致客户端重新传输请求。

所以我尝试了以下场景:

  1. 收到 HTTP GET 请求后立即退出服务器。但是,我注意到一旦应用程序退出,套接字仍然会正常关闭。我看到即使应用程序没有在套接字上调用“关闭”,服务器也会向客户端发起 FIN.ACK 消息。我在用 C 程序编写的简单 TCP 服务器和客户端上也注意到了这种行为。

  2. 服务器不向客户端的 GET 请求发送任何响应。在这种情况下,我注意到仍然有服务器发送的 FIN、ACK。 似乎在这些情况下,操作系统(linux)负责关闭与对等方的套接字。 有没有办法抑制这种行为(使用 ioctl 或 setsockopt 选项)或任何其他方式来模拟 TCP 重新传输超时。

【问题讨论】:

    标签: tcp


    【解决方案1】:

    这个问题之前讨论过here

    【讨论】:

      【解决方案2】:

      您可以尝试设置防火墙规则来阻止从服务器到客户端的数据包,这会导致客户端重新传输任务。在 Linux 上,这可能会使用 iptables 完成,但不同的发行版有不同的控制方法。

      【讨论】:

      • 感谢您的回复。 iptables 可能会工作。我必须记住的唯一想法是在 TCP 连接建立后阻止传出的数据包(否则我会遇到 TCP 连接设置失败)。
      • 您可能只是阻止设置了 PSH(推送)标志的数据包,我相信这是指示正在发送数据的标志。如果我没记错的话,连接握手是 SYN、SYN+ACK、ACK,所以连接仍然会打开。
      猜你喜欢
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 2011-02-13
      • 1970-01-01
      相关资源
      最近更新 更多