服务器连接到 NAT 后面的客户端

l46*_*kok 5 .net c# networking network-programming

我用 C# 制作了一个服务器/客户端应用程序。

我的问题如下:假设客户端位于 NAT 后面(如路由器)并尝试连接到服务器。从服务器的角度来看,服务器只知道客户端的外部 IP 地址。您如何准确确定将数据包发送到位于 NAT 后面的哪台计算机?我了解从客户端路由器的端口转发是解决此类问题的常用方法,但是如果您查看 Skype 等应用程序,则无需端口转发即可在服务器与 NAT 后面的许多客户端之间正确建立连接. 这个问题也可以反过来问(IE:客户端到服务器在 NAT 后面)。

我对套接字编程还很陌生,所以我很想听听任何可以阅读以完全理解这些内容的指南或材料。

Gas*_*a79 3

您不必担心应用层的 NAT。如果您收到一条 IP 为 200.51.255.79 的消息,您可以将答案发送到同一 IP。路由器将自动处理 NAT 和进一步的路由。当然,端口转发不是这样,但 NAT 却是这样。

Skype 以一种非常有趣的方式工作,使用当前 ip 和端口的服务器端数据库来绕过端口转发和防火墙,每个用户都在等待响应。您应该在互联网上查找完整的解释。这真是一本好书=)。