我想测量通过 htaccess 登录某些服务器(服务器处理速度有多快),并且我想忽略网络上的丢失时间。那么我应该扣除一次还是两次 ping 延迟?或者我的计算是错误的
答案1
消除结果中的网络延迟的最佳方法是尝试从服务器本地的主机进行测试。除非您正在执行高负载测试(在这种情况下,“客户端”处理将干扰您的基准测试),否则这可以是服务器本身。
通过 ping 读数来判断经过身份验证的 HTTP 请求的网络延迟并不是特别准确,除非你很多的读数。
无论如何,ping 时间都会超过 2 倍。创建 TCP 连接(我在这里忽略了持久 HTTP 连接)至少需要三个 IP 数据包通过网络传输:从客户端到服务器的 SYN 数据包、返回客户端的 SYN+ACK 以及从客户端到服务器的最终 ACK。假设从您到服务器的传输时间与返回的传输时间相同,即 1.5 次 ping。如果我没记错的话,HTTP 请求如果足够小,可以包含在最终的 ACK 数据包中。之后会有 HTTP 响应,它将至少是一个数据包。如果请求或响应中的任何一个大于您和服务器之间的 MTU,那么当然会有更多的数据包来回传输。
如果您直接发送身份验证详细信息,则至少有 4 个 IP 数据包,即有 + 返回 +有 + 返回,因此需要 2 次 ping(即两个数据包,一个有,一个完成)。但首先发出未经身份验证的请求,然后收到 401 响应,然后发出经过身份验证的请求以响应该请求的情况并不少见,至少将其加倍到 8 个数据包。
另外,请注意,ping 默认使用的 ICMP/IP 数据包在路由上的某些位置可能与用于 HTTP 的 TCP/IP 数据包具有不同的优先级,和包含 HTTP 请求和 HTTP 响应数据的数据包将比默认的 ping 数据包更大(ping 通常发送零有效负载的数据包)。
因此,如果可以的话,请从位于同一 LAN 上的机器进行测试 - 远程测试并尝试猜测所花费的时间中有多少是网络延迟以及什么是处理延迟,这不会给您非常准确的答案。
答案2
这完全取决于您如何测量。例如,您是从建立 TCP 连接到收到数据时测量的吗?还是从通过 TCP 连接发送请求到关闭 TCP 连接时测量的?
如果你想正确地做到这一点,你必须仔细查看你测量的时间间隔内发生了什么,看看需要多少次“切换”,然后减去 ping 时间。也许最简单的方法是从两台具有不同 ping 时间的不同机器上进行测量。然后将它们绘制在图表上并推断出 ping 时间为零。
通常完成此操作的方式要简单得多 - 只需从同一 LAN 上的计算机进行测试,这样 ping 时间就小于一毫秒。
请注意,ping 时间不仅仅包括网络延迟,还包括另一台计算机形成和发送响应所需的时间。