我有一个带有网络的自定义设备。我的设备上有 tftp 服务器。该设备通过以太网电缆直接连接到我的电脑。我知道 tftp 服务器是如何工作的 - 我已经在另一台电脑上成功测试了它。我可以 ping 我的设备,但 tftp 传输失败。我相信它失败是因为电脑没有收到我看到的消息。 tftp 翻译开始,但未正确结束。
ping 协议使用哪种类型:单播还是多播?如果 ping 使用多播,问题是我的设备似乎显示单播消息,并且我无法访问我的电脑。
网络设置:
设备:
192.168.0.5ip
255.255.255.0 掩码
192.168.0.1网关
个人电脑
192.168.0.1 IP
255.255.255.0 掩码
(win 默认) 网关
嗅探wireshark https://yadi.sk/d/TEa230vKcErMjg?w=1
答案1
- custom_tftp_client pcap 文件。
这显示了一个写入文件名与 Windows 非常相似的文件的请求
C:\Users\Ksandr\Desktop\IpAudioServer\firmware\forloader loader\reserver_firmware\forloader_reserve_0049496FB6AD.bin
该文件被标记为要传输到内网模式,这对于垃圾桶文件。请求的源端口是 51456。我会有点担心文件名中的反斜杠和空格,尽管它当然是有效的。 tftp 客户端还请求超时 5 和 tsize 46732。tftp 服务器发送 ack,其中包含正确的目标端口 (51456) 和临时端口 (49153)。 ack 显示正确的 udp 校验和(请求显示不正确的校验和,但这可能是由于 NIC 执行校验和计算所致)。
192.168.0.5 的 MAC 地址为 00:49:49:6f:b6:ad,因此是全局管理的(第一个字节的第二个最低有效位为零)单播(第一个字节的最低有效位为零) ) 地址。第一个字节最好是 02,以表明它是本地管理的,除非您的组织将 00:49:49:xx:xx:xx 分配给您。
tftp 客户端重复向端口 69 发出请求,而 tftp 服务器没有进一步响应。
- windows_tftp_client pcap 文件
这显示了传输具有较少争议名称的文件的请求
forloader_reserve_0049496FB6.bin
并且它正在被转移为二进制(二进制)文件。该请求从 192.168.0.1 的端口 62500 发送到设备 192.168.0.5 上的端口 69。 ack 返回到正确的端口,源端口为 49153 以及正确的 udp 校验和。 tftp 客户端在经过 1、2、4、8、8、8、8、8 秒的延迟序列后继续向端口 69 重复请求,直到最终在 47 秒后发送超时消息。
- 那么有什么问题吗?
- 192.168.0.5 上的 tftp 服务器应该响应多个请求,它发送的 ack 总是有可能丢失,因此允许客户端重复请求。
- 两个 tftp 客户端似乎都没有收到响应。由于这两个设备直接通过以太网电缆连接,因此我们可以排除网络设备。我怀疑 PC 上的 IP 堆栈有一些防火墙规则,并且会丢弃响应,因为数据包来自它未发送到的端口。对问题的编辑表明 tftp 客户端之一是“windows tftp 客户端”。其他 SE 网站上有答案,例如这解释如何修复 Windows udp 防火墙问题。请注意,您不知道 192.168.0.5 将使用哪个端口,因此您需要启用所有 udp 端口或禁用 udp 过滤(抱歉,我面前没有 Windows 机器,所以我引用其他答案未经测试,我不知道在这种情况下你到底需要做什么)。
答案2
问题出在 Windows 防火墙上。禁用防火墙后一切正常。