跳转到内容

通信网络/NAT 和 PAT 协议

来自维基教科书,开放书籍,开放世界

网络地址转换

[编辑 | 编辑源代码]

当 IP 地址被引入时,只有理论上的四 十亿个 IP 地址中的一小部分可供分配。在早期,这并不是一个问题,因为互联网仅用于学术研究人员、少数高科技公司和美国政府之间的使用。但随着互联网在 1990 年代中期普及,很快就 明显地发现,没有足够的 IP 地址来满足需求。作为回应,IPv6 被提议作为一种长期解决方案。但 IPv6 与 IPv4 非常不同,并且具有复杂性,这减缓了其采用速度。因此,需要一种实用的短期解决方案,于是引入了网络地址转换 (NAT)。

NAT 背后的基本理念是为 NAT 设备分配一个 IP 地址。我们将此称为公共 IP 地址。在 NAT 设备后面的本地网络中,每个计算设备都会被分配一个私有 IP 地址,如下所示

图 1

在图 1 中,NAT 设备的公共 IP 地址是 145.12.131.7,而私有 IP 地址在 192.168.X.X 范围内。这个私有 IP 地址范围是三个常见范围之一

  Class A: 10.0.0.0 - 10.255.255.255/8
  Class B: 172.16.0.0 - 172.31.255.255/12
  Class C: 192.168.0.0 - 192.168.255.255/16

请记住,私有 IP 地址仅在该本地局域网内有效。它在公共互联网上不被识别。对于来自私有 IP 地址和端口的数据包,必须将其转换为唯一的公共 IP 地址和端口,然后才能将其发送到互联网。从私有 IP 地址和端口到公共 IP 地址和端口的映射通常通过 NAT 设备内部的转换表完成。图 2 显示了一个示例

图 2

在步骤 1 中,私有 IP 地址为 192.168.100.3 的主机通过端口 3855 上的 HTTP 请求请求 www.yahoo.com 的主页。当 HTTP 数据包到达 NAT 设备(步骤 2)时,它会查找转换表,查找此私有(IP 地址,端口)组合的现有公共(IP 地址,端口)条目。如果不存在现有条目,则 NAT 设备将创建一个新的公共(IP 地址,端口)条目。如果存在现有条目,则转换过程将使用现有条目。请记住,转换表中的每个条目都必须始终保持唯一!完成表查找后,IP 数据包将被更改,以便新的 IP 地址和端口替换旧的 IP 地址和端口。最后,在步骤 3 中,更改后的数据包被路由到 www.yahoo.com。整个网络地址转换过程对于最终主机是完全透明的。换句话说,192.168.100.3 上的主机和雅虎网页服务器都不会意识到数据包已被更改。

来自雅虎网页服务器的数据包现在将经历反向转换过程才能到达请求主机。

图 3

反向过程类似于原始转换过程。当给出公共(IP 地址,端口)对时,它将查找转换表以查找相应的私有(IP 地址,端口)对。唯一的区别是,如果缺少条目,则数据包将被丢弃。完成查找和更改后(步骤 5),数据包(现在包含原始私有(IP 地址,端口)信息)将被发送到 192.168.100.3 端口 3855 的请求主机。

NAT 与代理

[编辑 | 编辑源代码]

NAT 有时与代理混淆,但它们在透明性方面实际上截然不同。NAT 对最终主机是完全透明的,即只有 NAT 设备知道正在进行 IP 转换。但对于代理,源应用程序/主机很清楚发生了变化,因为它必须专门配置为使用代理。

NAT 的问题

[编辑 | 编辑源代码]

在数据包内保存其 [私有] IP 地址信息的应用程序会发现,一旦 IP 转换完成并且数据包在互联网上,其 IP 地址与其实际 IP 地址不匹配。例如:FTP

主要抱怨之一是 NAT 的广泛使用导致 IPv6 的部署延迟,而 IPv6 是更理想的长期解决方案。尽管 NAT 存在所有问题,但对于大多数家庭用户来说,它仍然“足够好”。因此,美国 DSL 和有线互联网客户中 IPv6 的采用速度将继续缓慢。对于互联网纯粹主义者来说,整个 NAT 解决方案被认为是一种快速“黑客”而不是长期解决方案。原始的互联网是为端到端通信设计的,其中每个主机都有一个公共 IP 地址。

克服 NAT 限制

[编辑 | 编辑源代码]

通过 NAT 的简单 UDP 穿越 (STUN) :假设主机 A 和主机 B 都位于非对称 NAT 后面,并且两者都与直接连接到互联网的服务器 S 建立了 UDP 会话。然后,主机 A 可以使用与 S 的现有连接相同的源 IP 和端口来启动与主机 B 的会话。同时,S 知道 A 与 B 的会话的公共 IP 和端口,因为它与 A 与 S 的会话相同。然后,S 将此信息传递给 B,B 启动与 A 的 UDP 会话。

使用中继 NAT (TURN) 的穿越:此设置需要一个直接连接到互联网的中介服务器 S。主机 A 和 B 都必须与 S 启动会话,然后 S 将它们的消息中继到彼此。

端口地址转换

[编辑 | 编辑源代码]

与 NAT 相关但略有不同的概念是端口地址转换 (PAT)。PAT 允许从外部主机启动的传入会话映射到特定的内部主机和端口。例如,在图 4 中

图 4

所有传入到路由器端口 80 的请求都转发到内部主机 192.168.100.2 端口 7575。同样,所有传入到路由器端口 22 的连接都重定向到主机 192.168.100.1 端口 22。这种类型的设置对于希望在 NAT 设备后面运行服务器的用户来说很常见。PAT 的唯一缺点是它仅限于每个路由器端口一个条目。

网络地址转换 (NAT) 是一种广泛使用的解决 IP 地址短缺问题的方案。NAT 引入了“私有”IP 地址的概念,该地址仅在本地局域网 (LAN) 内有效,并且必须转换为在互联网上使用的“公共”IP 地址。使用 NAT,我们可以让多个私有 IP 地址共享单个公共 IP 地址,从而推迟部署长期解决方案来解决 IP 地址短缺问题的需求。

问题

  1. STUN 和 TURN 被提议作为两种绕过 NAT 的方法。你能描述另外两种绕过 NAT 的方法吗?
  2. (T/F) STUN 和 TURN 都只能用于 UDP,不能用于 TCP。

答案

  1. 通用即插即用 (mkiUPnP),假设路由器或 NAT 设备配置为接受它。另一种方法是隧道到服务器。再一种方法是使用应用层网关,假设路由器或 NAT 设备内置了它。
  2. 错误 - STUN 仅适用于 UDP,但 TURN 适用于 UDP 和 TCP。

参考资料

[编辑 | 编辑源代码]

http://computer.howstuffworks.com/nat.htm/printable

http://en.wikipedia.org/wiki/Network_address_translation

http://www.brynosaurus.com/pub/net/draft-ford-midcom-p2p-01.txt

华夏公益教科书