欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

计算机网络 (21) - NAT 穿透 - NAT 穿透问题

最编程 2024-06-20 17:28:29
...

NAT 的另一个重要问题是它妨碍 P2P 应用程序,在 P2P 应用中,任何主机 A 应当能够对任何其他对等方 B 发起一条 TCP 连接,但如果 B 位于 NAT 后面,它不能充当服务器并接收 TCP 连接,这就是 NAT 穿透问题。

在这里插入图片描述

假如客户期望连接内网地址为 10.0.0.1 的服务器,但客户不能直接利用地址 10.0.0.1 直接访问服务器,因为服务器所在内网对外唯一可见的地址是 NAT 地址 138.76.29.7。把 NAT 看作一面“墙”,我们要做的就是在 NAT 上产生一个“洞”,使外部用户能够访问到内网的服务器。解决 NAT 穿透的方法可以分为三类:

  • 解决方案一:静态配置 NAT 路由器的转换表。将特定端口的连接请求转发给服务器,如将目的地址为 138.76.29.7, 2500 的数据报总是转发给 10.0.0.1, 25000

  • 解决方案二:UPnP(Universal Plug and Play,通用即插即用) 互联网网关设备协议(IGD)自动配置。UPnP 协议实际上与第一种解决方案达到的目的是一样的,只不过手段不同(自动配置、手动配置)。UPnP 要求内网中的服务器(主机)和 NAT 路由器都是 UPnP 兼容的。

    举一个例子,假定你的主机位于一个支持 UPnP 的 NAT 内网中,具有专用地址 10.0.0.1 并且在端口 3345 上运行 BitTorrent,该 NAT 的公共IP地址138.76.29.7。你的主机上的 BitTorrent 应用程序请求 NAT 产生一个“洞”,将地址 10.0.0.1, 3345 映射到 138.76.29.7, 5001(该应用程序选择了公共端口号 5001)在 NAT 转换表中存储该映射。你的主机的 BitTorrent 应用程序也应通告外界它在 139.76.29.7, 5001 可供使用。外部主机能够向 138.76.29.7, 5001 发送 TCP SYN 分组,当 NAT 路由器收到该 SYN 分组,替换其目的 IP 地址和目的端口号,转发到你的主机。
    在这里插入图片描述

  • 解决方案三:中继(如 Skype)。NAT 内部的客户与中继服务器建立连接,外部客户也与中继服务器建立连接,中继服务器桥接两个连接的分组,从而实现了 NAT 的穿透。

在这里插入图片描述