Networking NAT后面的点对点连接

Networking NAT后面的点对点连接,networking,tcp,udp,network-protocols,tcp-ip,Networking,Tcp,Udp,Network Protocols,Tcp Ip,我制作了一个简单的网络应用程序,它是通过局域网进行通信的服务器客户端 客户 服务器 但当服务器在NAT后面时,我需要在路由器中配置NAT表,我可以在不配置路由器的情况下进行点对点连接吗?我可以把NAT表中的信息嵌入包本身,比如在哪个ip上重定向,这样当包从internet到达路由器时,它就知道LAN中的哪个ip应该得到它 开发一种应用程序是可能的,该应用程序利用诸如在NAT设备之间创建隧道之类的技术。查看这些主题以找到适合您的解决方案。是的,您确实需要配置端口转发,这通常涉及登录到路由器并使用其

我制作了一个简单的网络应用程序,它是通过局域网进行通信的服务器客户端

客户

服务器


但当服务器在NAT后面时,我需要在路由器中配置NAT表,我可以在不配置路由器的情况下进行点对点连接吗?我可以把NAT表中的信息嵌入包本身,比如在哪个ip上重定向,这样当包从internet到达路由器时,它就知道LAN中的哪个ip应该得到它

开发一种应用程序是可能的,该应用程序利用诸如在NAT设备之间创建隧道之类的技术。查看这些主题以找到适合您的解决方案。

是的,您确实需要配置端口转发,这通常涉及登录到路由器并使用其管理界面。不,您不能将此信息嵌入数据包中


但是,您只需要在服务器上执行此操作,并且在服务器上设置端口转发后,无需对客户端-服务器通信求助于NAT遍历,由于客户端发送的内容将通过服务器发送,因为您设置了端口转发,所以从服务器到客户端的回复将自动由客户端NAT转发,因为它将知道您已建立到服务器端点的TCP连接。这就是你可以从NAT后面连接到这个网站的方式

有一些技术,比如UDP洞punchingWell,如果你知道的话,就去使用它。这与编程无关,我不确定这就是为什么我的问题中没有编程标签的原因:为什么不在服务器端配置路由器?对于终端用户应用程序,你不知道该做什么,该应用程序应该像skype一样开箱即用,在我的应用程序中,我不希望数据通过任何服务器。你假设他是这样的创建一个网站,并且服务器具有足够的永久性,可以在其周围设置基础设施。无论哪种方式,他都特别要求一种解决方案,而不需要配置路由器。不,它可以是任何TCP服务器,不一定是web服务器。我发现这是一个奇怪的场景,客户端比服务器更持久,有时人们不得不从字里行间读,看看他们试图实现什么,以提供最佳帮助。一个常见的场景是视频游戏:他们的网络实现几乎总是clientserver,而他们几乎总是在NAT后面。但是你的回答没有错。我碰巧是游戏网络程序员,我知道,但是如果游戏使用的是公共服务器,那么端口转发将在服务器上设置,虽然没有必要,但是如果你使用p2p拓扑,或者服务器是游戏玩家之一,而OP不是,您需要打孔吗。使用TCP时,NAT遍历特别困难。通常,对于客户机-服务器,您不需要遍历NAT,因为服务器将具有端口转发设置,尽管OP确实指定了情况并非如此,因此您的答案确实回答了不寻常的问题。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)         
host = socket.gethostname() 
port = 8080               
s.connect(("117.219.195.10", port))
s.send('q\n');
s.send('boo\n\r');
s.close
import socket               
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)         
host = socket.gethostname()
print host
port = 8080                
s.bind(("", port))       
s.listen(5)                 
while True:
   c, addr = s.accept()     
   print 'Got connection from', addr
   c.send('Thank you for connecting\r\n')
   c.close()