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