📜  计算机网络中的 NAT 打孔

📅  最后修改于: 2022-05-13 01:57:02.001000             🧑  作者: Mango

计算机网络中的 NAT 打孔

先决条件 - 网络地址转换 (NAT)

什么是 NAT 打孔?
NAT 下的设备的主要限制或缺点是它不能接受出站连接。如果进行任何此类尝试,NAT 会确保消息到达垃圾箱。这种限制是通过一种称为打孔的方法来克服的。在这种方法中,使用了一个位于 NAT 之外的节点,该节点具有可公开访问的静态 IP,它被称为 Rendezvous 服务器。它用于在两个节点之间建立连接,这两个节点要么都在不同的 NAT 之后,要么都在同一个 NAT 之后,或者一个在 NAT 之后,另一个不在 NAT 之后,或者在多个 NAT 下的节点。

这有什么用途 ?
由于世界上大多数计算机都支持某种 NAT,因此这种方法广泛用于P2P(对等)架构。 P2P网络的建立需要任意两个节点直接连接。打孔是创建 P2P 网络时必须学习的最重要的概念。使用此概念可以绕过网络防火墙。打孔非常安全,因为必须从两端发起连接,因此需要双方用户的同意。

它是怎么做的?
使用传输控制协议 (TCP)、用户数据报协议 (UDP) 和 Internet 控制消息协议 (ICMP) 进行 NAT 打孔的详细说明。本文解释了打孔的基本概念。

我们将讨论如何在以下情况下使用 NAT 打孔在两个节点之间建立连接。

  1. 普通 NAT背后的对等点
  2. 不同 NAT背后的对等点
  3. 多级 NAT 背后的同行

NAT Hole Punch 的基本故事是,当两个想要相互连接的节点向服务器发送消息时。服务器使用彼此的 IP 地址和端口(端点)响应两个节点。两个节点都尝试通过相互发送消息来相互建立连接,消息被接收方 NAT 丢弃,但发送方 NAT 记下消息发送到的地址,来自该地址的任何传入消息都将被被视为对此消息的回复,将被路由到源端点。两个节点再次尝试通过发送消息相互连接。但是现在消息被成功接收,因为 NAT 认为这条消息是对先前(失败)消息的回复。BOOM!建立连接并打孔

术语:

  • 答:节点 1
  • B:节点 2
  • S :集合服务器

脚步:

  1. A 向 B 发送 S 请求连接。
  2. S 将 A 的地址发送给 B,将 B 的地址发送给 A。
  3. A 向 B 发送垃圾消息,B 向 A 发送垃圾消息。(都被各自的 NAT 丢弃)
  4. 重复步骤 3。
  5. 连接已建立。

上面给出的 NAT 打孔方法可以用于任何情况,两个节点都在同一个 NAT 之后,或者两个节点都在不同的 NAT 之后,或者即使两个节点都在多个级别的 NAT 之后。

也许 NAT 打孔的唯一缺点是,始终需要具有静态 ip 的可公开访问的服务器。提出了一种称为 pwnat 的架构来克服这个问题,但 pwnat 仅在两个节点中的任何一个节点不在 NAT 后面时才有效。