首先,我知道这个问题之前 已经 被 问 过了
但是,似乎还没有一个完整的解决scheme。 我的问题基本上是一样的。 我有一个连接到无线networking的设备,也是在端口8080上build立一个服务器,但由于NAT路由器的工作方式,没有办法向各个设备发送请求,因为它与众多其他计算机共享公共IP 。
被接受的答案提到了许多解决方法,但似乎这种必要的function需要以某种合法的forms存在。 (例如注意video游戏,即使客户端仍然需要发送数据包,我还没有看到我的游戏在我的路由器上自己做端口转发。)
实际上,几乎任何与互联网交互的应用程序都需要从互联网接收数据和请求,而无需转发端口。 这是怎么做的?
连接跟踪。
如果设备从NAT内部连接到外部,则允许来自外部系统的相关数据包。在某些情况下,可以同时使用TCP和UDP。
虽然在NAT到位时,stream量可以双向stream动,但重要的区别是,如果没有端口转发,服务器将无法“侦听”来自该networking外部主机的特定端口上的新连接。
以浏览网页的时间为例。 这里重要的一点是你的浏览器是客户端, 它正伸手去连接到另一个监听端口80的web服务器。一旦build立了连接,是的,stream量可以在两个方向上stream动。 但是,如果没有某种forms的端口转发,就不可能做相反的事情,并且可以在networking中运行一个networking服务器,以同样的方式“监听”连接。
一旦build立连接,交通双向stream动的原因是EEAA提到的连接跟踪。 路由器维护NAT / PAT转换表,使他们能够跟踪“谁在跟谁说话”。
所以,总结一下,应用程序“监听”和“接受”连接的能力是不可能的,没有端口转发。 如果你不能端口转发(即使使用“DMZ主机”types的function),那么你就担心我担心的工作。