webrtc 02 - NAT网络和P2P打洞

image

NAT 原理

NAT(网络地址转换)主要用于在本地网络和外部网络之间转换IP地址。它在改善IP地址利用率和网络安全方面起到了重要作用。NAT有几种主要类型,每种类型在处理网络流量和安全方面都有不同的特点。以下是详细介绍:

1. 全锥形NAT(Full Cone NAT)

image

特点:

  • 所有外部主机都可以通过相同的外部IP地址和端口访问NAT内部的设备。
  • 只要端口映射建立,任何外部主机都可以通过这个端口访问内部设备。

工作原理:

  • 一旦内部设备向外部主机发送了一个数据包,NAT设备会为该会话创建一个映射,记录内部IP地址和端口以及外部IP地址和端口。
  • 任何外部主机可以通过这个外部端口发送数据包到内部设备。

优点:

  • 兼容性好,适合需要多设备互联的应用(如视频会议)。

缺点:

  • 安全性相对较差,容易受到外部攻击。

2. 地址受限锥形NAT(Addr Restricted Cone NAT)

image

特点:

  • 只有收到内部设备数据包的外部主机,才能通过映射的外部端口访问内部设备。
  • IP地址限制,任何未接收过内部设备数据包的外部IP地址,无法通过该端口访问内部设备。

工作原理:

  • 当内部设备向外部主机发送一个数据包时,NAT设备会创建一个映射。
  • 只有当外部主机的IP地址与最初的外部主机IP地址相同时,数据包才能通过映射端口访问内部设备。

优点:

  • 安全性相对较好,限制了外部主机的访问。

缺点:

  • 兼容性稍差于全锥形NAT,某些应用可能需要额外配置。

3. 端口受限锥形NAT(Port Restricted Cone NAT)

image

特点:

  • 类似于受限锥形NAT,但进一步限制了端口号。
  • 只有收到内部设备数据包的外部主机和端口才能通过映射的外部端口访问内部设备。

工作原理:

  • 当内部设备向外部主机的特定端口发送一个数据包时,NAT设备会创建一个映射。
  • 只有当外部主机的IP地址和端口都与最初的数据包目标匹配时,数据包才能通过映射端口访问内部设备。

优点:

  • 安全性更高,进一步限制了外部主机和端口的访问。

缺点:

  • 兼容性较差,某些应用可能无法正常工作。

4. 对称NAT(Symmetric NAT)

image

特点:

  • 内部设备对每个外部主机和端口的连接使用不同的外部端口。
  • 每个会话都有唯一的外部IP地址和端口映射。

工作原理:

  • 当内部设备向外部主机发送数据包时,NAT设备会为该特定会话创建一个唯一的映射。
  • 只有目标外部主机和端口能够通过该特定映射的外部端口访问内部设备。

优点:

  • 提供最高的安全性,限制了外部主机和端口的访问。

缺点:

  • 兼容性最差,许多P2P应用(如VoIP、视频会议)可能无法正常工作。

STUN服务器基本原理

STUN服务器通过与客户端进行通信,帮助客户端了解其在NAT后的外部IP和端口,以及NAT的行为类型。主要使用STUN协议的Binding Request和Binding Response消息。

判断NAT类型的步骤

  1. 客户端发送初始Binding Request

    • 客户端向STUN服务器的固定端口(如3478)发送一个Binding Request。
  2. 服务器返回Binding Response

    • 服务器返回一个Binding Response,其中包含服务器看到的客户端的源IP地址和端口号(即外部IP和端口)。
  3. 客户端分析初始响应

    • 客户端检查返回的外部IP地址和端口号。
    • 如果外部IP地址和端口号与客户端的本地IP地址和端口号相同,则客户端直接连接到开放的Internet上,没有NAT。
  4. 客户端发送第二个Binding Request(通过改变源端口):

    • 客户端从不同的本地端口向同一个STUN服务器发送另一个Binding Request。
    • 如果需要,可以发送到STUN服务器的另一个端口(如果服务器支持多端口监听)。
  5. 分析第二个响应

    • 如果返回的外部IP地址和端口号与第一次相同,则客户端在完全锥形NAT后面。
    • 如果外部IP地址相同但端口号不同,则客户端在端口受限锥形NAT后面。
    • 如果外部IP地址和端口号都不同,则客户端在对称NAT后面。

协议

RFC3489/STUN

Simple Traversal of UDP Through NAT

RFC5389/STUN

Session Traversal Utilities for NAT

常用工具

-->