为了账号安全,请及时绑定邮箱和手机立即绑定

返回的UDP数据包缺少端口,无法到达

返回的UDP数据包缺少端口,无法到达

Go
蓝山帝景 2023-07-26 13:33:57
带有客户端和服务器的 Golang 应用程序。服务器使用 net.ListenUDP - 客户端也使用 net.ListenUDP,连接到服务器并使用 conn.WriteToUDP 和服务器地址发送数据包。服务器接收带有 ReadFromUDP 的数据包并获取返回地址。然后,它使用此返回地址将大量数据包发送回客户端。当在本地计算机上运行客户端和服务器时,这工作得很好。使用 Wireshark,我可以检查 UDP 数据包并查看它们包含源端口和目标端口 - 在应用程序中,我可以看到它们到达,并且我的各种校验和测试显示数据是准确的。然后我将服务器移离现场到远程计算机。应用程序停止工作。我可以成功地将第一条消息从客户端发送到服务器 - 接收得很好。服务器将响应“发送回”客户端 - 但客户端永远不会收到它们。使用 Wireshark,我可以看到数据包确实以正确的 IP 地址返回到本地计算机。看来我的网络路由器已对传出数据包执行了 NAT - 并已正确地将响应数据包重新寻址到内部 IP。但是没有端口。所以我有 UDP 数据包到达正确的机器,但没有端口 - 所以客户端应用程序不会收到它们。应用程序在 ReadFromUDP 上超时。我不知道这是否相关,但在本地计算机上,Wireshark 将数据包标记为 BT-uTP Utorrent 数据包。当它们从远程服务器进入时,这就是我在 Wireshark 中看到的 - 请注意缺少端口。有什么想法我可以解决这个问题。我不认为这是一个 UDP 打洞问题,因为虽然我是通过 NAT 建立连接,但它是与服务器而不是对等点建立连接。
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

此数据包已分段,您可以在 Internet 协议版本 4 > 标志下看到这一点。

如果您查看您提供的图片底部所示的框架,您应该会看到端口。

net.ListenUDP 似乎不支持套接字级别的碎片。

您有 PPPoe 连接吗?您可能需要将发送的数据包大小减少 8 个字节,或者更改远程端路由器外部接口上的 MTU。如果本地路由器位于 PPPoe 接口上,您可能还需要更改其 MTU。


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信