searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

NAT类型与穿透协议

2023-10-17 02:32:35
57
0

一、NAT(网络地址转换)的类型

NAT是一种技术,用于在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址。它被广泛用于有多台主机但只通过一个公有IP地址访问因特网的私有网络中。NAT可以分为以下几种类型:

1. 完全圆锥形NAT(Full Cone NAT):

内网主机建立一个UDP socket (LocalIP:LocalPort),第一次使用这个socket给外部主机发送数据时,NAT会给其分配一个公网 (PublicIP:PublicPort)。以后用这个socket向外面任何主机发送数据都将使用这对 (PublicIP:PublicPort)。任何外部主机只要知道这个 (PublicIP:PublicPort)就可以发送数据给内网主机。

2. 受限圆锥形NAT(Restricted Cone NAT):

类似完全圆锥形NAT,但外部主机必须先收到内网主机的数据包才能发送数据给它。

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

类似受限圆锥形NAT,但还有端口限制。外部主机必须使用固定的源端口才能发送数据给内网主机。

4. 对称NAT(Symmetric NAT):

每一个来自相同内部IP与端口、到一个特定目的地地址和端口的请求,都映射到一个独特的外部IP地址和端口。同一内部IP与端口发到不同的目的地和端口的信息包,都使用不同的映射。
 
穿透关系:上述4种类型,如果定义他们的值为序列号,N为序列号相加。则N<=6可穿透。
2 和 4 序列相加 = 6 则可穿透。 3(端口受限)和4(对称)= 7 不可穿透。
 
 

二、NAT穿透类型

NAT穿透实质上是内网映射,即将内网地址转换成外网地址以实现端对端数据传输。不同类型的NAT组合具有不同的穿透方式。为了使不同NAT网络下的两个节点建立直接连接,我们需要知道对方的公网IP和端口,并通过第三方服务器交换这些信息。

1. 完全圆锥形NAT(Full Cone NAT):

处于不同内网的主机A和主机B,各自先连接服务器,从而在各自NAT设备上分配端口,服务器收到主机A和主机B的连接后,知道A与B的公网地址和NAT分配给它们的端口号,然后把这些NAT地址与端口号告诉A与B,由于在完全锥形NAT的特点,A和B给服务器所打开的端口,能给别的任何的主机使用。故A与B可连接对方的公网地址和端口直接进行通信。服务器在这里充当“介绍人”,告诉A与B对方的地址和端口号。

2. 受限圆锥形NAT(Restricted Cone NAT):

A和B还是要先连接服务器,服务器发送A和B的地址和端口信息给A和B,但由于受限制锥形NAT的特 点,他们所打开的NAT端口,只能与服务器通信。假如主机A开始发送一个UDP信息到主机B的公网地址上,与此同时,它又通过服务器中转发送了一个邀请信息给主机B,请求主机B也给主机A发送一个UDP信息到主机A的公网地址上。这时主机A向主机B的公网IP发送的信息导致NAT A打开一个处于主机A的和主机B之间的会话,与此同时,NAT B也打开了一个处于主机B和主机A的会话。一旦这个新的UDP会话各自向对方打开了,主机A和主机B之间就可以直接通信了。

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

类似受限圆锥形NAT,但还有端口限制。

4. 对称NAT(Symmetric NAT):

打孔困难,通过预测端口的方式穿透,但成功率低。
 

三、ICE(Interactive Connectivity Establishment)

ICE是 WebRTC 中用于处理网络地址转换(NAT)的关键协议之一。ICE 是一种端到端交互的技术,旨在让两个终端相互知道对方的公网 IP 地址,以便实现端到端(Peer to peer,P2P)的通信。在 WebRTC 中,通信的双方需要知道对方的通信地址才能建立连接。ICE 通过收集候选者信息,使终端能够发现有效的公网 IP 地址,并进行连通性检查。
 

1. STUN(Session Traversal Utilities for NAT):

用于获取公网映射地址和进行连通性检查。STUN 服务器会告知客户端其公网 IP 和端口。

2. TURN(Traversal Using Relays around NAT):

在 STUN 失败时使用,作为中继来实现互通。
ICE 结合了 STUN 和 TURN 的优势,解决了不同类型 NAT 的问题。
 

四、STUN(Session Traversal Utilities for NAT)

WebRTC 中用于处理网络地址转换(NAT)的关键协议之一。
 

1. STUN 简介:

STUN 用于获取设备在 NAT 上分配的外部网络地址。它是 C/S 模式的协议,客户端发送 STUN 请求,服务端响应并告知分配给主机的 IP 地址和端口号。STUN 消息结构包括消息类型、magic cookie、事务 ID 和消息长度。

2. STUN 属性:

STUN 头部后跟着 0 或多个属性,采用 TLV 编码(类型、长度、值)。
常见属性包括:
MAPPED-ADDRESS:NAT 映射后的地址。
XOR-MAPPED-ADDRESS:经过异或处理的映射后地址。
USERNAME:用于消息完整性。
MESSAGE-INTEGRITY:HMAC-SHA1 值,用于验证消息完整性。
FINGERPRINT:用于区分 STUN 数据包和其他协议的包。
 

五、TURN(Traversal Using Relays around NAT)

是 WebRTC 中的一个关键协议,用于处理网络地址转换(NAT)。

1. TURN 的目的:

TURN 允许位于 NAT 后的设备找出自己的公网地址,以及查出自己位于哪种类型的 NAT 之后以及 NAT 为某一个本地端口所绑定的 Internet 端端口。
在 WebRTC 中,如果两台设备无法直接建立 P2P 连接(例如,NAT 穿透失败),TURN 可以作为中继服务器,帮助这两台设备进行数据传输。

2. TURN 协议工作原理:

TURN 协议有三个阶段或机制:分配(Allocation)、转发(Relay)和信道(Channel)。
分配机制:客户端向 TURN 服务器申请一个中继地址。服务器为用户开启一个 relay 端口并返回分配成功响应,包含了分配的地址。
转发机制:TURN 允许客户端使用中继服务与对端进行报文传输。数据可以通过 relay 或 channel 两种方式交换。
信道机制:为改善带宽压力,TURN 提供了 channel 数据报文格式,不使用 STUN 头部,而使用一个 4 字节的头部。

3. TURN 和 STUN 的区别:

STUN 只能获取公网映射地址,而 TURN 不仅可以获取地址还可以作为中继传输数据。
TURN 允许客户端使用同一个中继地址与多个不同的对等端进行通信。

4. 实际应用:

在 WebRTC 中,TURN 服务器通常作为 ICE(Interactive Connectivity Establishment)协议的一部分来使用。
TURN 的优点是保证连接的可用性、稳定性和高效性,但对服务器有较高依赖。
 
0条评论
0 / 1000
高****瑞
4文章数
1粉丝数
高****瑞
4 文章 | 1 粉丝
高****瑞
4文章数
1粉丝数
高****瑞
4 文章 | 1 粉丝
原创

NAT类型与穿透协议

2023-10-17 02:32:35
57
0

一、NAT(网络地址转换)的类型

NAT是一种技术,用于在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址。它被广泛用于有多台主机但只通过一个公有IP地址访问因特网的私有网络中。NAT可以分为以下几种类型:

1. 完全圆锥形NAT(Full Cone NAT):

内网主机建立一个UDP socket (LocalIP:LocalPort),第一次使用这个socket给外部主机发送数据时,NAT会给其分配一个公网 (PublicIP:PublicPort)。以后用这个socket向外面任何主机发送数据都将使用这对 (PublicIP:PublicPort)。任何外部主机只要知道这个 (PublicIP:PublicPort)就可以发送数据给内网主机。

2. 受限圆锥形NAT(Restricted Cone NAT):

类似完全圆锥形NAT,但外部主机必须先收到内网主机的数据包才能发送数据给它。

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

类似受限圆锥形NAT,但还有端口限制。外部主机必须使用固定的源端口才能发送数据给内网主机。

4. 对称NAT(Symmetric NAT):

每一个来自相同内部IP与端口、到一个特定目的地地址和端口的请求,都映射到一个独特的外部IP地址和端口。同一内部IP与端口发到不同的目的地和端口的信息包,都使用不同的映射。
 
穿透关系:上述4种类型,如果定义他们的值为序列号,N为序列号相加。则N<=6可穿透。
2 和 4 序列相加 = 6 则可穿透。 3(端口受限)和4(对称)= 7 不可穿透。
 
 

二、NAT穿透类型

NAT穿透实质上是内网映射,即将内网地址转换成外网地址以实现端对端数据传输。不同类型的NAT组合具有不同的穿透方式。为了使不同NAT网络下的两个节点建立直接连接,我们需要知道对方的公网IP和端口,并通过第三方服务器交换这些信息。

1. 完全圆锥形NAT(Full Cone NAT):

处于不同内网的主机A和主机B,各自先连接服务器,从而在各自NAT设备上分配端口,服务器收到主机A和主机B的连接后,知道A与B的公网地址和NAT分配给它们的端口号,然后把这些NAT地址与端口号告诉A与B,由于在完全锥形NAT的特点,A和B给服务器所打开的端口,能给别的任何的主机使用。故A与B可连接对方的公网地址和端口直接进行通信。服务器在这里充当“介绍人”,告诉A与B对方的地址和端口号。

2. 受限圆锥形NAT(Restricted Cone NAT):

A和B还是要先连接服务器,服务器发送A和B的地址和端口信息给A和B,但由于受限制锥形NAT的特 点,他们所打开的NAT端口,只能与服务器通信。假如主机A开始发送一个UDP信息到主机B的公网地址上,与此同时,它又通过服务器中转发送了一个邀请信息给主机B,请求主机B也给主机A发送一个UDP信息到主机A的公网地址上。这时主机A向主机B的公网IP发送的信息导致NAT A打开一个处于主机A的和主机B之间的会话,与此同时,NAT B也打开了一个处于主机B和主机A的会话。一旦这个新的UDP会话各自向对方打开了,主机A和主机B之间就可以直接通信了。

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

类似受限圆锥形NAT,但还有端口限制。

4. 对称NAT(Symmetric NAT):

打孔困难,通过预测端口的方式穿透,但成功率低。
 

三、ICE(Interactive Connectivity Establishment)

ICE是 WebRTC 中用于处理网络地址转换(NAT)的关键协议之一。ICE 是一种端到端交互的技术,旨在让两个终端相互知道对方的公网 IP 地址,以便实现端到端(Peer to peer,P2P)的通信。在 WebRTC 中,通信的双方需要知道对方的通信地址才能建立连接。ICE 通过收集候选者信息,使终端能够发现有效的公网 IP 地址,并进行连通性检查。
 

1. STUN(Session Traversal Utilities for NAT):

用于获取公网映射地址和进行连通性检查。STUN 服务器会告知客户端其公网 IP 和端口。

2. TURN(Traversal Using Relays around NAT):

在 STUN 失败时使用,作为中继来实现互通。
ICE 结合了 STUN 和 TURN 的优势,解决了不同类型 NAT 的问题。
 

四、STUN(Session Traversal Utilities for NAT)

WebRTC 中用于处理网络地址转换(NAT)的关键协议之一。
 

1. STUN 简介:

STUN 用于获取设备在 NAT 上分配的外部网络地址。它是 C/S 模式的协议,客户端发送 STUN 请求,服务端响应并告知分配给主机的 IP 地址和端口号。STUN 消息结构包括消息类型、magic cookie、事务 ID 和消息长度。

2. STUN 属性:

STUN 头部后跟着 0 或多个属性,采用 TLV 编码(类型、长度、值)。
常见属性包括:
MAPPED-ADDRESS:NAT 映射后的地址。
XOR-MAPPED-ADDRESS:经过异或处理的映射后地址。
USERNAME:用于消息完整性。
MESSAGE-INTEGRITY:HMAC-SHA1 值,用于验证消息完整性。
FINGERPRINT:用于区分 STUN 数据包和其他协议的包。
 

五、TURN(Traversal Using Relays around NAT)

是 WebRTC 中的一个关键协议,用于处理网络地址转换(NAT)。

1. TURN 的目的:

TURN 允许位于 NAT 后的设备找出自己的公网地址,以及查出自己位于哪种类型的 NAT 之后以及 NAT 为某一个本地端口所绑定的 Internet 端端口。
在 WebRTC 中,如果两台设备无法直接建立 P2P 连接(例如,NAT 穿透失败),TURN 可以作为中继服务器,帮助这两台设备进行数据传输。

2. TURN 协议工作原理:

TURN 协议有三个阶段或机制:分配(Allocation)、转发(Relay)和信道(Channel)。
分配机制:客户端向 TURN 服务器申请一个中继地址。服务器为用户开启一个 relay 端口并返回分配成功响应,包含了分配的地址。
转发机制:TURN 允许客户端使用中继服务与对端进行报文传输。数据可以通过 relay 或 channel 两种方式交换。
信道机制:为改善带宽压力,TURN 提供了 channel 数据报文格式,不使用 STUN 头部,而使用一个 4 字节的头部。

3. TURN 和 STUN 的区别:

STUN 只能获取公网映射地址,而 TURN 不仅可以获取地址还可以作为中继传输数据。
TURN 允许客户端使用同一个中继地址与多个不同的对等端进行通信。

4. 实际应用:

在 WebRTC 中,TURN 服务器通常作为 ICE(Interactive Connectivity Establishment)协议的一部分来使用。
TURN 的优点是保证连接的可用性、稳定性和高效性,但对服务器有较高依赖。
 
文章来自个人专栏
音视频-webrtc
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0