N将始终大于 1。无法准确判断比 1 多多少,但这里有一些因素会导致 Post 请求和 HTTP 响应之间的时间增加:
与单个 Echo Request 和单个 Echo Reply 相比,我将从单个 Post 和单个 HTTP 响应的角度来执行此操作。1 个 ICMP 交换和 HTTP 交换与 3 个 ICMP/HTTP 交换之间的时间增加将是线性的。每个交易所都会受到以下每个因素的影响。
1. HTTP Post/Response 中发送/接收的数据包较多
ping“序列”是这样的:
01 Client --> Server ICMP Request
02 Client <-- Server ICMP Response.
HTTP Post/Response 序列如下所示:
01 Client --> Server HTTP Post
02 Client <-- Server TCP ACK
03 Client <-- Server HTTP Response
在发送 HTTP 响应(数据包 #3)之前,服务器不需要等待 ACK(数据包 #2)到达客户端。这两个数据包都直接一个接一个地发送。但无论哪种方式,它仍然是必须发送的第二个数据包,因此增加了您的价值N。
2. 额外的加密处理会导致额外的开销
即使不需要发送 TCP Ack(上面的数据包 #2),使用 HTTPS 保护数据包的简单事实将要求双方验证数据包并解密内容,然后再将其传递给 HTTP口译员。
这是 ICMP 数据包不需要的东西。因此,N为 HTTP 请求/响应增加了额外的时间。
3. HTTP 数据包可能需要临时设备进行额外检查。
如果此通信通过防火墙发生,则防火墙(或某种 WAF/IPS)很可能正在对 HTTP 数据包执行额外的处理/检查/验证。特别是,因为这是一个 Post 请求。
如果是 HTTPS,则这种情况不太可能发生。但是许多瞬态防火墙现在可以解密 HTTPS,检查底层的 HTTP,然后在发送之前重新加密 HTTPS。同样,可能性较小,但我们不能尽职尽责地完全排除。
对于简单的 ICMP 数据包,这种检查不是必需的。不仅仅是因为数据包本身很可能更小。更简单的 ICMP 协议可能存在的恶意意图更少,因为更多的“注意力”被放在对 HTTP/HTTPS 的更深入检查上。
4. HTTP Post 需要服务器进行更多处理
响应 ICMP 响应是(相对)容易的。充其量,ICMP echo Payload 中有一点数据要复制到ICMP Response。根据 HTTP Post 的内容,还有更多需要考虑的内容。
是否有数据输入验证?发布的内容是否需要处理并以某种方式包含在 HTTP 响应中?它是否必须“按原样”处理,或者在生成有用的 HTTP 响应之前是否需要进行一些分析?
对于 Post 中呈现的分析和/或数据类型,确实存在无限的可能性。而这种额外的处理也会增加你的N价值。
我敢肯定还有其他的,但这些是我目前能想到的。
编辑:添加#4