计算机网络(21)——NAT穿透

NAT 概述

NAT(Network Address Translation,网络地址转换)顾名思义,它是一种把内部私有IP 地址翻译成合法的公网 IP 地址的技术。如 IPv4 编址所介绍的,私有 IP 地址包括:10.0.0.0/8172.16.0.0/12192.168.0.0/16

NAT 允许一个整体机构以一个公用 IP 地址出现在 Internet 上,这种方法需要在专用网(私网 IP)连接到因特网(公网 IP)的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT 路由器,它至少有一个有效的外部全球 IP 地址(公网 IP 地址)。这样,所有使用本地地址(私网 IP 地址)的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成公网 IP 地址,才能和因特网连接。

NAT 技术提出的动机

  • 一个组织只需 / 能从 ISP 申请一个 IP 地址,可以缓解 IPv4 地址耗尽的问题。
  • 本地网络设备的 IP 地址的变更,无需通告外界网络,方便管理。
  • 组织变更接入 ISP 时,无需修改内部网络设备的 IP 地址。
  • 内部网络设备对外部网络不可见,能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

NAT 技术的实现方法

  • 替换:利用(NAT IP 地址,新端口号)替换每个外出 IP 数据报的(源 IP 地址,源端口号)。
  • 记录:将每对(NAT IP 地址,新端口号)与(源 IP 地址,源端口号)的替换信息存储到 NAT 转换表中。
  • 替换:根据 NAT 转换表,利用(源 IP 地址,源端口号)替换每个进入内网的 IP 数据报的(目的 IP 地址,目的端口号),即(NAT IP 地址,新端口号)。

如下图所示,本地网络内通信的 IP 数据报的源与目的 IP 地址均在子网 10.0.0.0/24 内,而所有离开本地网络去往 Internet 的数据报的源 IP 地址需替换为相同的 NAT IP 地址:138.76.29.7 以及为该数据报生成的新端口号(新端口号使得路由器知道它应将某个分组转发给哪个内部主机),且所有进入本地网络的数据报都拥有同一个目的 IP 地址:138.76.29.7 及相应的端口号。(你也许会想知道该本地网络中的计算机是从哪儿得到其地址,路由器又是从哪儿得到它的单一 IP 地址的?通常情况下答案都是 DHCP!路由器从 ISP 的 DHCP 服务器得到它的地址,并且路由器运行一个 DHCP 服务器,为位于 NAT-DHCP 路由器控制的本地网络地址空间中的计算机提供地址。)
在这里插入图片描述

虽然 NAT 技术在近几年已得到了广泛的应用,但是也存在许多 NAT 的反对者。如路由器应该只处理网络层的功能,而不应该修改传输层报文段中的端口号信息,这违背了网络层设备所应做的事,违背了端到端通信原则。

NAT 穿透问题

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 的穿透。

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值