我有一台没有外部 IP 地址的机器,它需要向外界发送 UDP 数据包。仅 NAT 访问。
这行得通吗?
在我们的环境中进行原型制作真的很困难。它仍在建设中。关于如何制作原型的任何想法?
世界上大多数家庭网络配置都是由具有内部 IP 的 PC 和具有对内部 IP 进行 NAT 的公共 IP 的路由器组成的。(独立于 UDP/TCP 或任何需要出去的协议)
我看不出有什么问题
它应该工作。
确保对于创建的套接字,将 TTL(生存时间)设置为足够大的值,以覆盖到达目的地的可能的路由器跃点数。对目标 IP 运行 traceroute 将使您大致了解跃点数。请注意,此值可能会根据网络条件而变化。因此,最好将其设置为更大的值。有关设置 TTL 的语法,请参阅套接字 IOCtl API 文档。
最后,请记住 UDP 不是可靠的协议。因此,即使采取了上述必要步骤,数据包也可能无法到达目的地。但是,如果整个网络(包括中间路由器)都在受控环境中,例如公司内部网,则丢包的可能性很小。
如果您想在 UDP 之上增加可靠性,您可以采用基于 NAK 的算法,其中数据包被标记有序列号。各种资源可能会建议您,如果您需要通过 UDP 增加可靠性,您应该考虑 TCP,但我的经验是,如果您的应用程序在受控环境中运行,丢包的可能性非常小,并且您需要快速连接设置和断开,在 UDP 上添加轻量级可靠性有其优点。此外,TCP 连接会占用操作系统内核中的宝贵空间,而 UDP 则不会。如果您想在受限环境中支持大量“连接”,这也可能是一个考虑因素。
归根结底,您需要进行一些实验以找出最适合您的方法。
作为原型,我会使用 Linux 之类的东西设置一个 NAT 服务器,然后从那里开始工作。您要模拟的真实世界流量场景将确定客户端和服务器在 NAT 两侧的位置。也就是说,如果流量应该通过 ISP 或全部在受控环境中。
高温高压