免费代理上网网站,网站忘记密码功能,怎样查app开发公司,如果评价网站做的好不好STUN#xff08;Session Traversal Utilities for NAT#xff09;协议是一个 网络穿透协议#xff0c;主要用于在 NAT#xff08;网络地址转换#xff09; 环境中帮助终端获取自己的公网地址和 NAT 类型#xff0c;以便进行 P2P通信。STUN 是 WebRTC、VoIP、SIP 等技术的…STUNSession Traversal Utilities for NAT协议是一个 网络穿透协议主要用于在 NAT网络地址转换 环境中帮助终端获取自己的公网地址和 NAT 类型以便进行 P2P通信。STUN 是 WebRTC、VoIP、SIP 等技术的核心组件之一。
本质作用 帮助客户端知道自己“在外部世界”的 IP 和端口 大多数终端处于 NAT 后面无法直接建立 P2P 通信。STUN 协议通过与 STUN 服务器交互帮助客户端获取 NAT 分配的公网 IP 和端口。
应用场景
WebRTC 进行 P2P 建连前确定 NAT 类型、公网地址SIP 电话通信、视频会议VoIP 和即时通信软件TURN 和 ICE 的基础协议组件
基本流程
概述
ClientNAT内 ←→ STUN Server公网1. 客户端发送 STUN Binding RequestUDP
2. STUN 服务器接收后记录源 IP端口
3. 服务器将记录到的外部地址封装进 Binding Response 返回客户端
4. 客户端分析返回结果得到自己 NAT 后的公网 IP:Port客户端发送 Binding Request
客户端通过 UDP 向 STUN 服务器发送一个 Binding Request 报文内容包括
报文类型0x0001Binding RequestTransaction ID客户端生成的随机 96 位值可选属性Username、Message-Integrity 等用于验证
客户端 NAT 私网地址如 192.168.1.100:6000↓UDP → STUN ServerNAT 转换地址
在报文到达 STUN 服务器前
NAT 把源地址从192.168.1.100:6000 改写为 203.0.113.88:45000公网地址端口
STUN 服务器处理
STUN Server 接收到请求后
读取 UDP 包的 源 IP 和源端口即 NAT 映射后的公网地址构造一个 Binding Response 报文 包含 MAPPED-ADDRESS 或 XOR-MAPPED-ADDRESS 字段把该 IP:Port 回传给客户端
客户端收到响应
客户端接收到 Binding Response提取出 MAPPED-ADDRESS 字段
Your public IP is: 203.0.113.88:45000这就是客户端 在 NAT 后被映射的公网地址可用于其他 P2P 连接如 ICE Candidate。
流程图简化
[客户端]|| Binding Requestv
[NAT设备]修改源IP|| UDP Packet with NAT-IP:Portv
[STUN Server]|| Binding Response包含映射后的公网地址v
[NAT设备]|v
[客户端] ← 得知自己 NAT 后公网地址探测NAT类型
通过对多个地址的响应判断 NAT 类型
测试序列服务器行为判断结果Test I原地址回复无 NAT 或 Full Cone NATTest II更换 IP 回复Symmetric NATTest III同 IP 不同端口Port Restricted NAT
关键字段说明
字段说明MAPPED-ADDRESS客户端的公网地址直接暴露XOR-MAPPED-ADDRESS避免中间人伪造更安全的地址返回方式MESSAGE-INTEGRITY对报文做 HMAC-SHA1 签名FINGERPRINT对整个包 CRC32 校验
报文结构
STUN 报文由以下字段组成
报文头部20字节
字段长度说明Message Type2 字节报文类型如 Binding RequestMessage Length2 字节后续数据的长度Magic Cookie4 字节固定为 0x2112A442用于识别STUNTransaction ID12字节随机 ID客户端生成用于匹配请求响应
报文类型Message Type
类型名称值16位Binding Request0x0001Binding Response0x0101Binding Error Response0x0111Shared Secret Request0x0002
Attribute 区域可选
STUN 报文可带属性Attribute字段类似 TLV 格式。
常见属性
属性名类型说明MAPPED-ADDRESS0x0001STUN 服务器看到的外部地址XOR-MAPPED-ADDRESS0x0020安全性更高避免中间人攻击USERNAME0x0006用户认证MESSAGE-INTEGRITY0x0008消息完整性校验HMACERROR-CODE0x0009错误信息FINGERPRINT0x8028CRC32 校验
示例
[Message Type: 0x0001]
[Message Length: N]
[Magic Cookie: 0x2112A442]
[Transaction ID: 96bit 随机值]
[Attributes...]安全机制
使用 MESSAGE-INTEGRITY 字段 密钥做 HMAC-SHA1 校验防止伪造和篡改可配合 USERNAME/PASSWORD 做身份认证STUN Long-Term Credential
STUN 在 ICE 中的角色
ICEInteractive Connectivity Establishment是 WebRTC 用来穿透 NAT、建立 P2P 的整体方案。
STUN 用于收集候选地址candidate收集 主机候选HostServer Reflexive 候选通过 STUN 得到Relay 候选通过 TURN 得到 然后由 ICE 做候选优先级、连接尝试和建立
STUN命令
示例使用 stun 命令查看 NAT 类型Linux
sudo apt install stun
stun stun.l.google.com:19302# 输出
STUN client version 0.97
Primary: Open NAT, External IP: 203.0.113.45:45678总结
关键点描述功能获取 NAT 后公网地址辅助 P2P 穿透协议类型UDP轻量快速标准文档RFC 5389应用WebRTC, SIP, VoIP, ICE安全支持身份验证和消息完整性验证局限无法穿透 Symmetric NAT需 TURN 协助