【发布时间】:2010-02-19 21:32:25
【问题描述】:
我正在用 python 编写异步 ping 域的服务。所以它必须能够同时ping多个IP。我在epoll ioloop上写的,但是有丢包的问题。 当同时有许多 ICMP 请求时,对它们的大部分回复都没有到达我的服务范围。什么可能导致这种情况以及如何使我的服务同时 ping 多台主机而不会丢失数据包?
谢谢)
【问题讨论】:
我正在用 python 编写异步 ping 域的服务。所以它必须能够同时ping多个IP。我在epoll ioloop上写的,但是有丢包的问题。 当同时有许多 ICMP 请求时,对它们的大部分回复都没有到达我的服务范围。什么可能导致这种情况以及如何使我的服务同时 ping 多台主机而不会丢失数据包?
谢谢)
【问题讨论】:
您可能遇到的一个问题是,ICMP 是 OSI 模型的第 3 层,并且不使用端口进行通信。简而言之,ICMP 并不是为此而设计的。所需的行为仍然是可能的,但您使用的 IP 堆栈可能会妨碍您,如果这是在 Windows 系统上,那么 100% 确定这是您的问题。我会启动 Wireshark 以确保您确实收到了传入的数据包,如果是这种情况,那么我将使用 libpcap 来跟踪 ICMP 回复。如果问题在于发送,那么您将不得不使用原始套接字并构建您自己的 ICMP 数据包。
【讨论】: