在线咨询
专属客服在线解答,提供专业解决方案
声网 AI 助手
您的专属 AI 伙伴,开启全新搜索体验

什么是STUN

本文介绍了STUN(NAT会话穿越应用程序)这一关键网络协议。它允许位于NAT后的设备发现其公网IP与端口,从而为P2P通信(如WebRTC)建立直接连接提供可能。文章详细阐述了STUN的核心工作流程,包括基础地址探测和NAT类型识别机制,并说明了其在WebRTC ICE框架中收集候选地址、进行连通性检查的核心职责。STUN是解决NAT穿越问题的基础工具,但与TURN等技术协同工作,才能确保复杂网络环境下的可靠连接。

 

STUN是什么

STUNSession Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间建立UDP通信。

STUN常见属性(Attributes)

    • XOR-MAPPED-ADDRESS:服务器观察到的外网 IP/端口。
    • MESSAGE-INTEGRITY:完整性校验(通常基于短期凭据与 ice-pwd)。
    • FINGERPRINT:报文校验(CRC32)。
    • ICE-CONTROLLING / ICE-CONTROLLED:决定谁控制候选提名(Offer/Answer角色相关)。
    • USE-CANDIDATE:指示提名使用某候选对为最终路径。

STUN 在 WebRTC 中的职责

1. 候选收集:浏览器从多个来源收集候选(hostsrflxrelay),其中 srflx 依赖 STUN。

2. 连通性检查:

    • 双端建立候选对矩阵,互发 STUN 请求/响应测试可达性与路径质量。
    • 控制方(ICE-CONTROLLING)在成功路径上使用 USE-CANDIDATE 提名最终候选对。

3. 与TURN协作:若所有直连候选(host/srflx)失败,则回退使用 TURN 的 relay 候选中继媒体。

 

STUN核心工作流程

1. 基础地址探测(获取公网映射地址)

这是 STUN 最基础的功能,步骤如下:

步骤 1:客户端发请求:NAT 后的客户端向公网 STUN 服务器发送STUN 绑定请求(Binding Request)(UDP 包),源地址是客户端的内网 IP + 端口。

步骤 2:服务器回响应:STUN 服务器收到请求后,从 UDP 包的 IP 头中提取客户端的公网映射地址(NAT 分配的公网 IP + 端口),将其封装到响应包的XOR-MAPPED-ADDRESS属性中,再原路返回给客户端。

步骤 3:客户端解析地址:客户端收到响应后,对比 “响应中的公网地址” 与 “自身内网地址”:

    • 若地址不同:说明处于 NAT 后,记录该公网映射地址(即服务器反射候选地址);
    • 若地址相同:说明客户端本身处于公网。

2. NAT类型识别

为了判断 P2P 通信的可行性,STUN 会通过多轮请求 – 响应检测 NAT 类型(常见 NAT 分为 4 类:全锥形、地址限制锥形、端口限制锥形、对称型),核心逻辑是改变请求的目的 IP / 端口,观察 NAT 分配的公网端口是否变化、是否能收到响应

  • 检测全锥形 NAT:客户端向 STUN 服务器的 IP1:Port1 发请求,要求服务器用 IP2:Port1(不同 IP、相同端口)回响应。若能收到,说明是全锥形 NAT(NAT 对外部请求 “来者不拒”)。
  • 区分锥形 / NAT 对称型:客户端向 STUN 服务器的 IP2:Port2(不同 IP、不同端口)发请求,对比此次响应中的公网端口与第一步的端口:
    • 端口相同:是锥形 NAT
    • 端口不同:是对称型 NAT(STUN 无法穿透此类 NAT)。

区分地址 / 端口限制锥形:客户端向 STUN 服务器的 IP1:Port2(相同 IP、不同端口)发请求,若能收到响应则是地址限制锥形,否则是端口限制锥形

 NAT 类型识别

参考来源

https://blog.csdn.net/guothree2003/article/details/99949486

https://blog.csdn.net/cj1561435010/article/details/104318409

在声网,连接无限可能

想进一步了解「对话式 AI 与 实时互动」?欢迎注册,开启探索之旅。