我正在将 UDP 数据包从一台 PC 发送到另一台 PC。我正在使用 Wire Shark 观看整个活动。我注意到有一段时间数据包从一个系统到另一个系统的传输很顺利。然后突然开始出现带有错误
ICMP
的 'port unreachable'
数据包。然后它们消失一段时间,UDP 数据包再次顺利传输。然后这些 ICMP 数据包再次出现相同的“端口不可达”错误。然后这些ICMP数据包又消失了等等。并且这种情况会周期性地持续下去。
任何人都可以阐明这可能是什么原因吗?
发生这种情况的原因是接收器上没有进程在该端口上等待。
您需要有一个客户端,该客户端打开了一个套接字,并且已对该端口执行了bind()。
当正常运行的会话被“端口不可达”消息中断时,会出现一个可能与“端口不可达”消息相关的奇怪错误。当您检查对话时,您会发现无法访问的端口正在正常工作。帧正在往返于端口号时,突然出现 - 端口无法访问。这表明报告主机中存在过载情况或进程优先级配置问题。有问题的进程被换出内存,并且无法足够快地换回以避免无法访问的指示。
来源:https://www.savvius.com/resources/compendium/tcp_ip/unreachable#port_unreachable
我遇到了 PackEth 的问题 - 可以生成原始数据包的实用程序。然而,系统不知道 PackEth 将向哪个端口发送任何数据包。我正在发送 UDP 数据包。因此,即使我实际上收到了来自接收者(其他机器)的响应,系统也会生成 ICMP。
所以我认为您正在运行一个发送原始内容的应用程序?或者系统失去了应用程序正在侦听的端口的跟踪?
PackETH 没有监听任何内容,所以我在创建原始数据包时总是得到该响应,所以我知道在这种情况下我可以打开 nc 来监听端口或忽略 ICMP 消息
复制粘贴以供参考
这些不是 ICMP 请求。相反,它们是对路由器所做的事情的反应:根据您显示的信息,您的路由器正在向您的计算机发送带有源端口的 UDP 数据包,并且您的计算机上没有套接字等待此数据包。这就是为什么您的机器会发回 ICMP 无法访问,其中包含意外数据包的详细信息。