WebRTC 基础 STUN的工作过程和原理

WebRTC-STUN协议详解 STUN(Session Traversal Utilities for NAT)NAT会话穿透工具,STUN是一个Client/Server协议,支持请求/响应类型、指示类型两种类型。STUN作为ICE(Interactive Connectivity Establishment,交互式连接建立)解决方案的一种工具使用,STUN协议本身没有穿透等能力,只是为穿透提供反射地址,穿透不成功时,需要使用TURN协议。1.1 请求/响应类型(request/response) 阅读详情

 

参考文档:

https://wenku.baidu.com/view/821cf78014791711cc7917a1.html

https://www.cnblogs.com/mlgjb/p/8243690.html

【我们这里只讨论过程,协议细节请参考 https://www.cnblogs.com/mlgjb/p/8243690.html】

 

我们都知道ipv4中的地址数量是有限,这个限制导致了大量的计算机是位于防火墙或NAT后面的,他们所持有的仅仅是一个内网IP地址。 通常,内网的计算机与外部公网上的计算机交互是没有问题的,但是当你想让2台在不同内网中的计算通信时,问题就来了。 这种通信我们称之为p2p通信,在通信之前我们需要检测他们之间能否进行p2p通信以及如何通信。 这就涉及到了NAT穿透的问题了(NAT Traversal)

最常见的NAT穿透是基于UDP的,例如我们将要研究的STUN。

STUN(Simple Traversal of UDP Through NAT)是一个完整的NAT穿透解决方案,参考 RFC3489

在最新的RFC5389中,STUN被定位成穿透NAT的工具,而不再是一个解决方案,Session Traversal Utilities for NAT.

 

STUN的工作过程

我们先研究STUN是怎样一步步实现的NAT穿透的,获得一个对STUN的整体的认识。

要研究这个过程,我们先对我们的环境进行一些假设,这样方便进行描述:

图1
图1

如图1所示,我的客户端位于NAT后面, STUN Server位于公网中。 具体的IP和端口如下:

Client的IP地址和端口号为:     IP_C 和 Port_C

NAT的映射后的IP和端口号为:IP_N 和 Port_N

STUN的IP地址和端口为:        IP_S1  IP_S2 和 Port_S1 Port_S2

 

STEP1:验证客户端是否在NAT后面

从客户端发送一个UDP包到 IP_S1 + Port_S1, STUN收到后会把 IP_N+Port_N 保存到UDP包中作为对客户端请求的响应。然后把这个响应发送到 IP_N+Port_N。

 

无论客户端前面的NAT是什么类型,客户端都应该能够收到这个响应。 如果没有收到,要么是STUN Server不存在(或者你写错了地址或端口), 要么是你的NAT拒绝一切UDP包从外部进入。

当客户端收到响应数据时,我们就能从中得到 IP_N+Port_N, 也就是说我们从这一步能够得到NAT的外网地址和端口号。

 

拿到NAT的外网地址和端口号后,用其IP和client自身的IP地址进行比较:

如果相同,说明client具有公网地址,它没有在NAT后面。

如果不同,说明client在NAT后面,我们还要进行更多验证。

 

STEP2:验证我们的NAT是不是 Full Cone NAT

从客户端发送一个UDP包到 IP_S1 + Port_S1,请求Stun Server使用  IP_S2 + Port_S2 对我们的请求进行响应。

如果能收到响应数据: 说明NAT是 Full Cone NAT, 因为NAT来者不拒,不对数据进行任何过滤。

如果未收到响应数据:  我还需要进一步验证NAT的类型

 

STEP3:验证我们的NAT是对称NAT还是Cone NAT

从客户端发送一个UDP包到 IP_S2 + Port_S2, STUN收到后会把 IP_N+Port_N 保存到UDP包中作为对客户端请求的响应。然后把这个响应发送到 IP_N+Port_N。

这个测试中,我们关心的是UPD包中的数据, 如果包中的 Port_N 与 STEP1中的 Port_N是相同的,那么我们就可以肯定,这是个一个Cone NAT,如果不同那么就说明是个对称NAT,Stun Server无法解决这类NAT穿透问题~~

 

STEP4:区分 Restict Cone NAT 和 Port Restrict Cone NAT

从客户端发送一个UDP包到 IP_S1 + Port_S1, 要求 Stun Server 用 IP_S1 + Port_S2 返回响应给client。

如果client能收到:说明是 Restrict Cone NAT

如果收不到: 说明时 Port Restrict Cone NAT

 

到此,整个过程就结束了,除了对称NAT外,我们都能得到NAT的外网IP和端口,以及NAT的类型。

对称NAT的穿透方法将在下一篇中研究-----TURN

 

 

WebRTC通话原理(SDP、STUN、 TURN、 信令服务器) 本文主要讲述了WebRTC点对点的通信原理,其中包括媒体协商,点对点打洞,服务器转发,信令交换服务器的工作流程 阅读详情

相关推荐

webRTC基础入门

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、webRTC介绍二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供

weixin_39736022的博客 5741

STUN工作原理

现实网络环境中绝大多数主机都是处于 NAT 之后,对于两个处于同一内网环境的主机,它们只要知道对端的内网地址就能进行通信,而对于不在同一内网的主机,如果它们想通信,要么借助带有公网地址的主机转发,要么通过一定的手段进行 NAT 穿越。STUN 协议是用来 NAT 穿越的工具,它允许位于 NAT 之后的主机查找到自己 NAT 映射后的公网地址,需要通信的双方交换映射后的公网地址再进行连通性检测。STUN 最先在。

椛茶的博客 2622

Jitsi 的 STUN 服务器在 WebRTC 中的应用

STUN 服务器是 WebRTC 中进行 NAT 穿透的基础设施,Jitsi 框架通过集成 STUN 服务器来帮助客户端发现公网 IP 地址并建立 P2P 连接。在 Jitsi 中,STUN 服务器的配置通常是通过 config.js 文件进行的,特别是在 Jitsi Meet 部署时,可以指定用于 WebRTC 会话的 STUN 服务器地址。通过与 STUN 服务器的交互,客户端可以获取到在 NAT 后的公网地址和端口号,从而实现与对方客户端的直接通信。

江左散人的专栏 1453

STUN 原理理解

STUN 原理理解STUN简介Simple Traversal of UDP over NATs, NAT的UDP的简单穿越,是一种网络协议。是客户机-服务器的一种协议,由RFC 3489 定义。该协议定义了一些消息格式,大体上分为Request/Response。这个协议主要作用就是可以用来在两个处于NAT路由器之后的主机之间建立UDP通信。它允许位于NAT后的客户端找出自己的公网地址,确定自己...

2万+

打破边界:深入探索STUN在实现无缝NAT穿越和WebRTC通信中的核心作用

WebRTC(Web Real-Time Communication)是一个开放的框架,旨在通过简单的API调用实现浏览器和移动应用之间的实时通信。它支持视频、音频和一般数据的直接传输,使得开发者能够构建无需安装插件或下载本地应用的实时通信应用。

Von_016's Blog 2316

WebRTC学习之路---TURN/STUN服务原理及搭建

假设A端和B端要通信。会在NAT服务的映射表中添上一组映射信息(每次请求都会往上添)----------六元组(私网内主机的内网IP+端口,私网内主机的公网IP+端口,公网内主机的IP+端口),其中前两元是不变的,而后面的四元都有唯一的对应关系,也就是说公网内某个IP地址特定端口的主机只能通过映射表上与之相对应的第三、四元来访问私网主机,其他都不能访问。私网内的主机向公网内的某台主机的某个端口发起一个请求,会在NAT服务上开启类似访问权限的功能,就是说对于。(在NAT后就交换NAT转换后的地址和端口)。

yinshipin007的博客 1109

【ZeroRange WebRTC 】STUN 在 WebRTC 中的角色与工作原理(深入指南)

STUN在WebRTC中的作用是帮助客户端发现公网映射地址,实现P2P连接。本文详细介绍了STUN的工作原理、与ICE/TURN的协作机制,以及实际部署建议。主要内容包括:1. NAT穿透的背景和挑战;2. STUN协议的核心功能和消息交互流程;3. STUN在WebRTC候选收集和连通性检查中的关键作用;4. 浏览器配置示例和常见问题排查;5. 生产环境部署建议。文章面向前端和音视频工程师,提供了从理论到实践的完整指导。

love131452098的博客 1604

WebRTC中STUN协议的收发过程及候选者生成流程

主机候选者是本地设备的网络地址和端口,服务器反射候选者是通过STUN服务器获取的公共IP地址和端口,对称候选者是通过TURN服务器获取的中继地址和端口。STUN(会话遍历工具)是WebRTC中使用的一种协议,用于解决网络地址转换(NAT)设备引起的通信问题。本文将详细介绍WebRTC中STUN协议的收发过程和候选者生成流程,并提供相应的源代码。设置目标地址为STUN服务器的地址,端口为默认的STUN端口(3478)。根据一定的策略,ICE代理选择最佳的候选者,将其作为首选的通信路径。

UnhcTransforms的博客 331

一文读懂 WebRTC 的幕后功臣:ICE、STUN 与 TURN

摘要: WebRTC通过ICE框架协调STUN和TURN实现P2P连接。STUN服务器帮助设备获取公网地址,用于直接打洞;TURN服务器在无法直连时中转数据,确保连接但代价较高;ICE则负责测试并选择最优路径(局域网直连>STUN打洞>TURN中转)。实际部署需自建STUN/TURN服务器(如Coturn),避免依赖公共服务,并监控TURN流量以防成本激增。通过分析SDP中的候选地址(Host/Srflx/Relay)可快速定位连接问题。

yk_18的博客 1319

Janus的STUN原理与抓包分析WebRTC

通过使用STUN协议,Janus能够解决不同类型的NAT,并为WebRTC会话提供正确的地址和端口信息。通过抓包分析,我们可以深入了解STUN原理的工作方式,并从捕获的数据包中获取有关客户端的公共IP地址和端口信息。在Janus中,STUN协议的实现有助于处理不同类型的NAT,并为WebRTC会话提供正确的地址和端口。然后,我们可以分析捕获到的数据包,从中获取到客户端的公共IP地址和端口信息。STUN协议使用简单的请求-响应机制,客户端发送STUN请求到服务器,并在响应中获取地址和端口信息。

FdviAutoit的博客 509

卡方检验的隐藏逻辑:为什么正态分布的平方和如此重要?

本文深入探讨了卡方检验的核心逻辑,揭示了正态分布平方和在统计检验中的重要性。通过分析卡方分布与伽马分布的关系,以及实际应用案例,帮助读者理解卡方检验的原理、局限及高级应用场景,为数据分析提供有力工具。

3a9bq4r8t2y的博客 208

WebRTC入门与提高-WebRTC原理(STUN/TURN/SDP)

1 WebRTC入门 本章目的: (1)了解什么WebRTC (2)掌握WebRTC通话原理 (3)学完该课程的收获 1.1 什么是WebRTC WebRTC(Web Real-Time Communication)是 Google于2010以6829万美元从 Global IP Solutions 公司购买,并于2011年将其开源,旨在建立一个互联网浏览器间的实时通信的平台,让 WebRTC技术成为 H5标准之一。我们看官网(https://webrtc.org)的介绍 从官网上的...

翻肚鱼儿的博客 1851

DeepSeek Harness实战:从零构建插件化AI Agent

AI Agent开发正从硬编码走向框架化组织,插件化架构成为提升工程效率的关键。在构建可复用、可扩展的智能体系统时,开发团队需要一套能够统一管理模型调用、工具注册与上下文组装的基础设施。DeepSeek Harness作为面向Agent工程的插件化框架,通过Harness、DeepAgent与Skill三个核心抽象,将模型、工具与技能解耦为可插拔单元,让开发者无需重复造轮子即可快速搭建具备工具调用能力的智能体。本文从环境配置到Skill插件开发,完整演示如何基于DeepSeek模型构建一个可运行的Agent

weixin_34279184的博客 451

WebRTC基础理论和通话原理

WebRTC(Web RealTime Communication)是 Google于2010以6829万美元从 Global IP Solutions 公司购买,并 于2011年将其开源,旨在建立一个互联网浏览器间的实时通信的平台,让 WebRTC技术成为 H5标准之一。它定义了一组标准化的API,用于在浏览器和移动应用程序中进行实时语音、视频和数据通信,无需安装任何插件或其他软件。

weixin_50873490的博客 1520

【重磅干货】介质损耗因数(tanδ)揭秘:如何精准定位材料劣化最严重的温度?附权威研究PDF!

是评估绝缘材料性能的核心指标,能直接反映材料内部能量损耗和微观结构变化。通过分析tanδ-温度曲线的峰值点,可精准定位材料劣化最严重的温度。:极化损耗峰值的温度点(如环氧树脂的80℃)是材料性能拐点,需重点关注!:图3对比了5种材料的tanδ-温度曲线,峰值温度差异高达50℃!在电力设备、电子元器件等领域,材料的老化与温度密切相关。:[《介质损耗峰值温度在设备寿命预测中的应用》]在不同温度下测量tanδ,绘制曲线图。:[《多材料介质损耗峰值温度对比研究》]:基于tanδ峰值温度开发的。

mubiao05的博客 1351

从智能手机到汽车电子:聊聊IPC-9702/9704A标准如何帮我们搞定不同场景下的PCB可靠性设计

本文探讨了IPC-9702/9704A标准在智能手机和汽车电子等不同场景下的PCB可靠性设计应用。通过分析消费电子、汽车电子和工业设备中的应力特征,详细解读了IPC标准在应变识别和测试方法论中的核心价值,并提供了具体的轻量化设计策略和全生命周期验证方案,帮助工程师提升PCB的长期可靠性。

weixin_30693683的博客 280

构建 WebRTC 应用所需的后端服务 STUN, TURN

Build the backend services needed for a WebRTC app STUN, TURN, and signaling 机翻 原文:Build the backend services needed for a WebRTC app: STUN, TURN, and signaling - HTML5 Rocks WebRTC支持对等通信,但它仍然需要服务器,以便客户端可以交换元数据,以通过称为信令的过程协调通信,并处理网络地址转换器(NAT)和防火墙。 本.

爱孜文 3186

【ue4】【新手入门】|静态网格模型碰撞设置和合并Actor(合并静态网格体)

上一期学到把构建好的房子模型变成一个静态网格体(也是一个模型)但是静态网格体是没有碰撞的 所以要给这个模型设置碰撞。

m0_63501513的博客 4420

【ZeroRange WebRTC】WebRTC 基于 STUN 的 srflx 直连原理与实现

WebRTC基于STUN实现srflx直连的技术路径包括:通过STUN服务器获取NAT映射的公网IP:端口(srflx候选),交换SDP和ICE候选后进行双向连通性检查,选择最优候选对并固定5元组路径。关键环节涉及NAT打洞、DTLS-SRTP加密、STUN保活维持映射,以及Consent Freshness验证对端可达性。该方案可规避中继服务器实现点对点传输,但在对称NAT或严格防火墙环境下需回落TURN。Amazon Kinesis WebRTC SDK通过ICE状态机实现上述流程,日志可追踪候选选择与

love131452098的博客 800

多目标进化算法——NSGA-II(python实现)

NSGA-II(python实现)--最全注释,痴呆能懂--

no___good的博客 5281

2026年3月GESP真题及题解(C++七级):物流网络

2026年3月GESP真题及题解(C++七级):物流网络

王老师青少年编程 1126

WebRTC 基础 TURN的工作过程和原理

参考文档: https://www.jianshu.com/p/4a15556c6318 https://www.cnblogs.com/pannengzhi/p/5048965.html 我们在STUN工作过程介绍的文章中提到过,STUN能够处理Cone NAT,但是没有处理对称NAT的能力,也就是说位于对称NAT后面的2台内网机器是无法进行p2p连接的。 TURN协议就是为了解决对称NAT的问题,它扩展了STUN(所以说TURN服务也会提供STUN的功能), 添加了一个中继(Relayin.

nuptxiaoli 2210

VS2019项目使用CGAL6.1配置教程详细步骤

在VS2019项目中使用CGAL详细步骤

插件开发 331

WebRTC P2P技术之STUN、TURN、ICE

1.内容概述: 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet。很多时候,我们希望网络中的两台主机能够直接P2P通信,而不需要其他公共服务器的中转。由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信。这种技术通常称为NAT穿透(NAT Traversal)。最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议。 STUN,首先在RFC3489中定义

wugebucuo的博客 977

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WebRtc09:网络基础P2P/STUN/TURN/ICE

STUN存在的目的就是进行NAT穿越STUN是典型的客户端/服务端模式。客户端发送请求,服务端进行相应M必须,Option可选其目的是解决对称NAT无法穿越的问题其建立在STUN之上,消息格式使用STUN格式消息TURN Client要求服务端分配一个公共IP和Port用于接收或发送数据常用工具linux服务端用tcpdump其他端WireShark。

upset_poor的博客 1453

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: WebRTC 基础 NAT的类型
下一篇: WebRTC 基础 TURN的工作过程和原理
guothree2003
博客等级 码龄19年 29粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值