Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何从仅具有NAT访问权限的计算机使用UDP_Sockets_Udp_Nat - Fatal编程技术网

Sockets 如何从仅具有NAT访问权限的计算机使用UDP

Sockets 如何从仅具有NAT访问权限的计算机使用UDP,sockets,udp,nat,Sockets,Udp,Nat,我有一台没有外部IP地址的机器,它需要向外部世界发送UDP数据包。只有NAT访问 这样行吗 在我们的环境中很难对其进行原型化。 它仍在建设中。 有没有关于如何制作原型的想法?应该可以 确保对于创建的套接字,将TTL(生存时间)设置为足够大的值,以覆盖到达目的地的可能路由器跳数。运行到目标IP的跟踪路由将使您大致了解跳数。请注意,此值可能会根据网络条件而变化。因此,最好将其设置为更大的值。有关设置TTL的语法,请参阅sockets IOCtl API文档 最后,请记住UDP不是一个可靠的协议。因此

我有一台没有外部IP地址的机器,它需要向外部世界发送UDP数据包。只有NAT访问

这样行吗

在我们的环境中很难对其进行原型化。 它仍在建设中。 有没有关于如何制作原型的想法?

应该可以

确保对于创建的套接字,将TTL(生存时间)设置为足够大的值,以覆盖到达目的地的可能路由器跳数。运行到目标IP的跟踪路由将使您大致了解跳数。请注意,此值可能会根据网络条件而变化。因此,最好将其设置为更大的值。有关设置TTL的语法,请参阅sockets IOCtl API文档

最后,请记住UDP不是一个可靠的协议。因此,即使在采取上述必要步骤之后,数据包也可能无法到达其目的地。但是,如果整个网络(包括中间路由器)处于受控环境(如公司内部网)内,则数据包丢失的机会最小

如果您想在UDP之上增加可靠性,您可以采用基于NAK的算法,其中数据包带有序列号。各种资源可能会告诉你,如果你需要在UDP上增加可靠性,你应该考虑TCP,但我的经验是,如果你的应用程序运行在一个控制环境中,包丢失的机会非常小,你需要快速的连接建立和拆除,那么在UDP上添加轻量级的可靠性就有它的优点。此外,TCP连接会占用操作系统内核中的宝贵空间,而UDP则不会。如果您希望在受约束的环境中支持大量的“连接”,这也是一个考虑因素

在一天结束时,你需要做一点实验,找出最适合你的方法

为了实现原型,我将使用Linux之类的东西设置NAT服务器,然后从那里开始工作。您想要模拟的真实流量场景将确定客户端和服务器在NAT两侧的位置。也就是说,如果流量应该通过ISP,或者通过受控环境中的所有ISP


HTH

世界上大多数家庭网络配置都是由一台具有内部IP的PC和一台具有公共IP的路由器组成的,该路由器具有NAT内部IP。(独立于UDP/TCP或任何需要退出的协议)

我看不出有什么问题