惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
Y
Y Combinator Blog
Recorded Future
Recorded Future
博客园 - Franky
F
Fortinet All Blogs
The Register - Security
The Register - Security
雷峰网
雷峰网
博客园 - 【当耐特】
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
WordPress大学
WordPress大学
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Announcements
Recent Announcements
S
Schneier on Security
Latest news
Latest news
S
Securelist
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
L
Lohrmann on Cybersecurity
V
Visual Studio Blog
NISL@THU
NISL@THU
Cyberwarzone
Cyberwarzone
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
Spread Privacy
Spread Privacy
酷 壳 – CoolShell
酷 壳 – CoolShell
Security Latest
Security Latest
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
SecWiki News
SecWiki News
N
News and Events Feed by Topic
T
Threatpost
The GitHub Blog
The GitHub Blog
博客园_首页
F
Full Disclosure
爱范儿
爱范儿
The Hacker News
The Hacker News
T
The Blog of Author Tim Ferriss
Stack Overflow Blog
Stack Overflow Blog
Last Week in AI
Last Week in AI
月光博客
月光博客
C
Check Point Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
博客园 - 司徒正美

博客园 - ace--碳水化合物

韦达定理 韦达定理1 梯形1 总平均分 m1 曲线相关 曲线 不等式 抛硬币 错位排列"(全错位)问题 11 1 两圆阴影面积 English1 Tidio 官方帮助中心 ERP 相关系统介绍 蝉翼定理 选配法 利润最大化公式 写在失业的一段话 排列组合-组合 在线简历 概率论与数理统计学习章节 绝对值 比例五大定理 算术平均值与几何平均值 等价符号 公因数与最大公因数 容斥原理 英语2026 机器学习,深度学习,强化学习 分别是什么以及区别是什么 深度学习 监督学习 FAQ IVR TTS选择 k 近邻算法 kaldi 平稳核函数(stationary kernel) Karush-Kuhn-Tucker 条件 凸二次规划(convex quadratic programming) FunASR+FreeSwitch做坐席客服系统记录 freeswitch原理图 客服系统,第三方平台,对话转录音,这些可以不依赖第三方做么 Gun.js原理 游戏升级记 10 OBB 边界问题 关于yolo26是否可以通过结合java开发 opencv和yolo是一回事情吗 pytorch TorchVision - ace--碳水化合物 PyTorch 和 FashionMNIST 的关系 java record 游戏升级记 9 VibeVoice实现90分钟、多角色播客生成,拓展语音合成新边界 同 WiFi 下用 Claude Code 控制另一台 Windows 电脑 Numpy 1 游戏升级记 8 开源claudecode前端 github star 9k+ 向量数据库skill 游戏升级记 7 游戏升级记 6 关系型数据库,向量数据库,ES,缓存,列式数据库,时序数据库,图数据库等的区别和共同点列举table 多Agent可视化 Agent设计模式 中文 Hermes+Obsidian+LLM wkii,构建AI知识库 Claude Code 前端工程泄露代码开源 游戏升级记 5 ai记忆 Rag 1 游戏升级记 4 游戏升级记 3 游戏升级记 2 AI学习路线 关于hermes agent安装 1 游戏升级记 1 代码迷踪 十三 代码迷踪 十二 ai智能体工程 Rust vs Go 微信小程序实名认证 怎样制作一个街机游戏 跟Claude code说 深入思考 它会思考更深入. googlebusiness profile设置统一白名单的操作,要弹窗模式的 该怎样利用ollama自己训练一个编程大模型 中华AI智能体编程一站式基站构想 打包网站到exe和app 识别的内容一般是试题模板的题号和手写的答题答案(数字) opencv怎么训练 在线SaaS系统做接口版本滚动更新 stripe相关支付流程 流程示意图 error: linker `link.exe` not found | = note: program not found - rust 给我一份关于stripe平台的使用开发说明 c++学习记20260219 奥数-平面几何经典定理 奥数-组合数学 奥数-几何 奥数-代数 奥数-数论
STUN服务器
ace--碳水化合物 · 2026-05-20 · via 博客园 - ace--碳水化合物

STUN 服务器是帮助浏览器发现自己的公网 IP 和端口,并判断 NAT 类型的服务。它是 WebRTC P2P 能够“打洞”成功的核心基础设施。


为什么需要 STUN?

你在家上网时,设备被分配的是内网 IP(比如 192.168.1.5)。当你想跟洛杉矶的朋友直连,你需要知道:“在公网上,别人看到我的地址是什么?”

STUN 就像是一个“镜子服务器”:

浏览器 A:“STUN 服务器,告诉我,在你眼里我长什么样?”
STUN:“我看到的你是 203.0.113.45:52134,你的 NAT 类型是锥形。”
浏览器 A:“好,我把我这个公网身份告诉信令服务器,让 B 来连我。”

如果没有 STUN,浏览器没法知道自己的公网地址,P2P 直连就无从谈起。


STUN 在 WebRTC 里怎么用?

在 WebRTC 的配置里,STUN 服务器是这样设置的:

const peerConnection = new RTCPeerConnection({
  iceServers: [
    {
      urls: 'stun:stun.l.google.com:19302'  // Google 的免费 STUN
    }
  ]
})

只需要这样一行,浏览器就会自动在建立连接时查询 STUN,获取自己的公网地址。

常用的免费 STUN 服务器

  • stun:stun.l.google.com:19302(Google)
  • stun:stun1.l.google.com:19302
  • stun:stun.cloudflare.com:3478(Cloudflare)

STUN vs TURN:两个容易搞混的服务器

对比维度 STUN 服务器 TURN 服务器
作用 告诉浏览器“你的公网地址是什么” 当 P2P 打洞失败时,中转数据
数据流 不传数据,只回答一个问题 传输数据,所有流量经过它
成本 几乎免费,轻量 贵,需要带宽和服务器性能
成功率 配合其他机制,85%-92% 的 P2P 能建立 兜底方案,100% 能连,但走中转

一个完整的 WebRTC ICE 配置通常同时配 STUN 和 TURN:

const peerConnection = new RTCPeerConnection({
  iceServers: [
    { urls: 'stun:stun.l.google.com:19302' },  // 免费 STUN
    { 
      urls: 'turn:turn.example.com:3478',      // 自建或付费 TURN
      username: 'user',
      credential: 'password'
    }
  ]
})

STUN 本身也是服务器

这里有一个很关键的认知:STUN 服务器也是服务器。虽然它极轻量、不传数据、只回答一个查询,但它依然需要一个公网可达的地址来提供服务。

所以,即使你用了 WebRTC + STUN 实现 P2P 直连,你依然依赖 STUN 服务器的存在。只不过这个服务器:

  • 不存任何数据
  • 不接触你的通信内容
  • 每次只交互几个字节
  • 有 Google、Cloudflare 提供的免费公共节点

这是你之前在追求“完全不依赖服务器”时遇到的那个“最后一公里”——STUN 是必须有的,但它已经是你能找到的代价最小、最无感的“服务器”了。


回到你的场景

之前聊到 Bugout 和 WebRTC 方案时,底层其实都在用 STUN。当你写 new RTCPeerConnection() 时,浏览器默认就会用自己的 STUN 服务器列表去查询公网地址。

所以整个链路是:

  1. STUN:告诉你你是谁(公网地址)
  2. 信令服务器:帮你们交换名片(Bugout 用 DHT 替代了这一步)
  3. WebRTC Data Channel:数据直接走 P2P

这样,你们的数据真正实现了端到端直传,而 STUN 这个“服务器”只在最初帮了你们一把。