路由器 NAT 承受的回显请求和答复之间的 ICMP 最大延迟

路由器 NAT 承受的回显请求和答复之间的 ICMP 最大延迟

我试图降低我的服务器(arch linux vm)的网络速度netem

sudo tc qdisc add dev eth0 root netem delay 1600ms

延迟 1600ms 时,客户端不会收到回应数据包,尽管数据包是由服务器端生成的。但是它可以承受1500ms延迟。如果延迟小于该值,客户端就会收到回应。

但是在 RFC 中是否指定了回显请求和回显答复之间的任何固定最大延迟?

我已经使用ping以及scapy来生成ICMP回显请求数据包并tcpdump检查传入的回显回复数据包。所以这不是ping程序的问题。

所以我认为在中间路由器的某个地方,ECHO reply数据包由于延迟而被丢弃。那么普通路由器承受的回显请求和回复之间的最大延迟量是多少?

答案1

有建议RFC 5508 “ICMP 的 NAT 行为要求”关于路由器应该保留 ICMP 数据包状态多长时间,但不能保证任何人都会遵守它们。

答案2

语境:ICMP 不是有状态协议。

如果你坐在路由器后面,该路由器会将你的流量进行 NAT,并且你正在 ping 路由器另一端的设备,那么路由器需要跟踪你的ICMP 回显请求为了让各自的ICMP 回应如果 ICMP 不是有状态的,该怎么做?只需在 NAT 表中写入一个条目并保留一段时间即可。

您的路由器供应商认为 1500ms 是功能性(ICMP 工作)和安全性之间的一个很好的折衷方案:

1) 路由器可以快速释放内存,而不必为单边 ICMP 保留数百万个条目。2
) 路由器会阻止可能用于探测、指纹识别等的不需要的 ICMP 回显答复。

附注:Windows 的默认 ping 超时时间为 4 秒,而许多 Linux 发行版的默认 ping 超时时间为 10 秒(参考两个操作系统中的默认“ping”工具)。

相关内容