STUN/TURN/ICE

8 篇文章 1 订阅
订阅专栏

RFC 5389 - Session Traversal Utilities for NAT (STUN)

 

https://www.cnblogs.com/pannengzhi/p/5041546.html

https://www.cnblogs.com/pannengzhi/p/5048965.html

STUN : Session Traversal Utilities for NAT, 一个协助穿越NAT的工具,运行在UDP和TCP之上。

NAT(Network Address Translation)

STUN by itself is not a solution to the NAT traversal problem. Rather, STUN defines a tool that can be used inside a larger solution. 

STUN 作用:位于 NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于 NAT 路由器之后的主机之间建立UDP通信。同时可以检测端点间的连接性,也可以作为一种保活(keep-alive)协议来维持NAT的绑定。

STUN is a client-server protocol.

 

It supports two types of transactions. 

request/response transaction (请求/响应):  a  client sends a request to a server, and the server returns a  response.

indication transaction(指示): either  agent -- client or server -- sends an indication that generates no response.

 

消息格式:(采用大端编码(big-endian),即最高有效位在左边)

STUN消息头:20字节

All STUN messages start with a fixed header that includes a method, a  class, and the transaction ID.

1)最高的2位必须置零,这可以在当STUN和其他协议复用端口的时候,用来区分STUN包和其他数据包。

2)STUN Message Type:

Method (方法): 如 Binding

Class(类别):如 a request  / a success response / an error response /  an indication

3)Message Length:不包括20字节头的STUN消息长度

4)Magic Cookie: 固定为 RFC 3489 0x2112A442,这是为了前向兼容classic STUN,因为在classic STUN( RFC 3489 )中,这一区域是Transaction ID的一部分。

5)Transaction ID(事务ID):a randomly selected 96-bit number  

对于request/response传输,Transaction ID由客户端选择,服务器收到后以同样的Transaction ID返回response;

对于indication则由发送方自行选择。

Transaction ID的主要功能是把request和response联系起来,同时也在防止攻击方面有一定作用。服务端也把Transaction ID当作一个Key来识别不同的STUN客户端,因此必须格式化且随机在0~2^(96-1)之间。

重发同样的request请求时可以重用相同的Transaction ID,但是客户端进行新的传输时,必须选择一个新的Transaction ID。

  

STUN消息体:0个或者多个TLV属性

Following the fixed header comes zero or more attributes, which are Type-Length-Value extensions that convey additional information for the specific message.(紧跟固定头部的是0个或者多个TLV属性)

其中Type字段和Length字段占用16位,Value字段为32位表示(STUN属性以32bit边界对齐),即属性内容不足4字节的都会以padding bit进行补齐。

Length:不包含补齐(padding bit)的Value长度,以字节为单位。

Type:字为属性的类型。任何属性类型都有可能在一个STUN报文中出现超过一次。除非特殊指定,否则其出现的顺序是有意义的:即只有第一次出现的属性会被接收端解析,而其余的将被忽略。

属性区域被分为两个部分:

Type值在0x0000-0x7FFF之间的属性被指定为强制理解,意思是STUN终端必须要理解此属性,否则将返回错误信息;

而0x8000-0xFFFF之间的属性为选择性理解,即如果STUN终端不识别此属性则将其忽略。

常见的属性:

FINGERPRINT:CRC校验。放在属性列表的最后,即若存在的话应当是最后一个属性。多个协议复用一个端口时,可以用来区分是否是STUN消息。

Wireshark抓包示例:

 

TURN: 在STUN的基础上增加relay功能。在有些情况下,有可能终端无法和其对等端(peer)进行直接的通信,这时就需要公网的服务器作为一个中继,对来往的数据进行转发。这个转发的协议就被定义为TURN。

ICE状态

The RTCIceConnectionState enum defines the string constants used to describe the current state of the ICE agent and its connection to the ICE server (that is, the  STUN or  TURN server).

Constant

Description

"new"

The ICE agent is gathering addresses or is waiting to be given remote candidates through calls to  RTCPeerConnection.addIceCandidate() (or both).

"checking"

The ICE agent has been given one or more remote candidates and is checking pairs of local and remote candidates against one another to try to find a compatible match, but has not yet found a pair which will allow the peer connection to be made. It's possible that gathering of candidates is also still underway.

"connected"

A usable pairing of local and remote candidates has been found for all components of the connection, and the connection has been established. It's possible that gathering is still underway, and it's also possible that the ICE agent is still checking candidates against one another looking for a better connection to use.

"completed"

The ICE agent has finished gathering candidates, has checked all pairs against one another, and has found a connection for all components.

"failed"

The ICE candidate has checked all candidates pairs against one another and has failed to find compatible matches for all components of the connection. It is, however, possible that the ICE agent did find compatible connections for some components.

"disconnected"

Checks to ensure that components are still connected failed for at least one component of the  RTCPeerConnection. This is a less stringent test than "failed" and may trigger intermittently and resolve just as spontaneously on less reliable networks, or during temporary disconnections. When the problem resolves, the connection may return to the "connected" state.

"closed"

The ICE agent for this  RTCPeerConnection has shut down and is no longer handling requests.

一旦收到ICE候选者,我们应该期望对等连接的状态最终将变为已连接状态。为了检测到这一点,我们在RTCPeerConnection中添加了一个侦听器,在此我们侦听connectionstatechange事件。

// Listen for connectionstatechange on the local RTCPeerConnection

peerConnection.addEventListener('connectionstatechange', event => {

    if (peerConnection.connectionState === 'connected') {

        // Peers connected!

    }

});

WebRTC系列- turnstun网络分析法
HOSTEN的博客
04-24 5068
文章目录1. TCPDUMP分析法1.1 简述1.2 使用2. WireShark 基本使用简述实战 之前的文章有分析各种协议包的组成,那么实际上在使用的时候是不是和分析的一样,这就需要获取到请求的包进行分析;在分析网络协议最好能抓取到数据包,然后看分析数据包是不是和规定的协议一致; 一般的网络数据包分析我们有两个常用的工具: Linux端的一般经常使用tcpdump 其他客户端一般使用WireShark 当然可以将tcpdump抓取的数据拿到wireShark中分析。 1. TCPDUMP分析法 1.
【WebRTC---入门篇】(九)WebRTC网络基础:P2P/STUN/TURN/ICE
用可见的方式来记录和分享每一次收获
09-25 469
NAT 作用:内网地址转公网地址 STUN 作用:中介将公网信息彼此交换 TURN 作用:P2P不成功的话在云端架设服务器,双方进入同一房间。可以在一起进行数据交互 ICE 作用:打包以上取最优,先尝试P2P。如果P2P不通再选择TURNICE尝试所有可能性 ...
wireshake分析stun协议
qq_38365116的博客
05-20 2706
不知道为什么,我用wireshake过滤stun协议过滤不出来,抓包发现解析出来的和3478端口交互的都是udp的数据,弄个半天没弄好,想着udp就udp吧,反正是为了学习,顺道写篇博客记录一下。 过滤掉UDP包头后,前两位是0,对应stun协议的前两位,前两个字节整体为0x0001 是bind request请求 这两个字节为0,说明这个请求的消息只有头部,没有body,没错。 这一段,前面4字节是cookie,后面 Transaction Id 记录下就行,和响应等会对比下 这个是从3478发往本
STUN/TURN/ICE协议在P2P SIP中的应用
shun35的博客
07-04 1161
目录: 1 说明 2 打洞和穿越的概念... 1 3 P2P中的打洞和穿越... 2 4 使用STUN系列 协议穿越的特点... 2 5 STUN/ TURN/ICE协议的关系... 3 6 STUN协议(RFC 5389) 3 6.1 为什么会用到STUN协议... 3 ...
STUN/TURN协议
流媒体巅峰之路
07-15 1397
STUNTURN协议解析 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet。很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转。由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信。这种技术通常称为NAT穿透(NAT Traversal)。最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议。
WebRTC 之 ICE/STUN/TURN
m0_60259116的博客
09-24 466
WebRTC 之 ICE/STUN/TURN
WebRTC:stun/turn服务器搭建
Crystalyh22的博客
08-17 7136
专业术语说明 VoIP (Voice over Internet Protocol), 一种语音通话技术,经由网际协议(IP)来达成语音通话与多媒体会议,也就是经由互联网来进行通信。 NAT (Network Address Translation) 网络地址转换。 ...
STUN/TURN服务器搭建
zhongqizhi的专栏
10-12 1142
命令行切换至此目录./configure --prefix=/usr/local/coturn/,然后./configure --prefix=/usr/local/coturn/,然后make,然后make install,安装完毕。turnserver的手动启动:./usr/local/coturn/bin/turnserver -c ./usr/local/coturn/etc/turnserver.conf,目前看来如果turnserver安装和配置没有问题,那么唯一问题就是端口映射的问题。
Stun/Turn协议草稿
fdsafwagdagadg6576的专栏
10-07 293
2 协议消息(协议头)struct,每个域介绍 2.1 stun and turn 协议 1) NAT 的实现分为四大类 2) stun 协议: 协议头示意图 3) turn 协议 4) stun and turn 协议关系 2.2 sdp协议 1) 与http 协议 2) 与sip协议结合 2.2 协议关系: ice 协议使用stun/turn, sdp,http/sip协议 收集candidates模块使用stun/turn。 offer-answer sdp模块,使用sdp协议 传输sd......
stun/turn/ice NAT穿越
06-15
非常好的学习stun/turn/ice NAT穿越资料
webRtc搭建STUN/TURN(coturn服务)
qq_34691227的博客
04-11 1445
零、运行环境 Centos7 x86_64 一、配置 Mongodb 构建环境 coturn 中虽然支持 mongodb 但是编译运行后显示 MongoDB is not supported 查资料发现:You are using the Ubuntu coturn package that has no MongoDB support compiled in it (because mongo C driver is ot a standard Debian package). If you d
WebRTC学习进阶之路 --- 三、WebRTC网络知识详解(一)(P2P/STUN/TURN/ICE)
SmallBottle-CGWLMX的博客
11-23 3060
WebRTC学习进阶之路系列总目录:https://blog.csdn.net/xiaomucgwlmx/article/details/103204274 在介绍这些基本知识之前我们要清楚WebRTC的目的以及根本要解决的问题是什么。WebRTC首要要解决的问题是两个浏览器之间如何进行音视频的实时互动,对于底层来说就是两个端点之间如何进行高效的网络传输。下边我们来一项一项的详细介绍这些内容。 ...
网络高级day03(Http)
最新发布
dghbs的博客
09-21 676
HTTP
嵌入式流媒体SRT协议:send buffer和窗口延迟机制
Dada_ping的博客
09-16 990
Handshake Packets:握手控制包(“包类型”位 = 1)用于在点对点的 SRT 会话中建立两个对等体之间的连接。早期版本的 SRT 依赖于握手扩展来在连接建立后立即交换某些参数,但自 1.3 版本起,集成机制确保所有参数作为握手的一部分进行交换。有关详细信息,请参阅本文档后面的握手部分。KM Error Response Packets(key message 错误响应包):密钥消息...
linux-网络相关概念
zdd56789的博客
09-17 690
linux-网络相关概念
USB 的工作原理:枚举和配置(第 3 部分)
qq_37255138的博客
09-18 969
在上一个教程中,我们了解了 USB 设备如何与主机控制器通信。现在,我们将在本教程中了解 USB 描述符的妙处及其在枚举和配置过程中的作用,这使得 USB 设备可热插拔,因此事不宜迟,让我们深入研究它。要理解 USB 描述符,首先我们需要很好地理解什么是 USB 请求!它们本质上只是主机发送到 USB 设备以与其通信的数据包。下面提到的是协议支持的 USB 请求类型。这里要注意的关键点是所有请求的结构都保持不变。
计算机网络34——Windows内存管理
weixin_74681777的博客
09-19 241
产生的原因:计算机内存空间有限,用户通过页表查找某页时,某页因为内存有限,被移到外存中,无法访问。在块内存在的未使用空间叫内部碎片,在块外存在的未使用空间叫外部碎片。固定分区分配可能出现内部碎片,动态分区分配可能出现外部碎片。页式存储会产生内部碎片,不会产生外部碎片。分为连续分配管理和非连续分配管理。3、逻辑地址和实际地址的互相转换。6、内部碎片和外部碎片。9、段式存储地址映射。
【计算机网络 - 基础问题】每日 3 题(七)
Newin2020的博客
09-16 1311
✍个人博客:Pandaconda-CSDN博客📣专栏地址:http://t.csdnimg.cn/fYaBd📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~📝推荐参考地址:https://www.xiaolincoding.com/(这个大佬的专栏非常有用!
"了解STUNTURN协议,NAT工作原理,及coturn的安装与配置
STUN/ TURN/ICE协议的关系:STUNTURNICE协议是用于解决实时通信中NAT问题的一组协议,它们之间有着紧密的关系。 STUN协议的工作原理:STUN协议可以帮助客户端发现自己的真实IP地址,以及NAT映射的类型和端口,...
写文章

热门文章

  • DLL的两种加载方式——静态加载和动态加载 10338
  • RTSP over UDP与RTSP over TCP取流对比 8078
  • C++程序员发展方向 2859
  • C++ 启动和停止电脑中的服务 2579
  • #include<file.h>与#include "file.h"区别 2372

分类专栏

  • WebRTC 8篇
  • Linux 9篇
  • 备忘录
  • Media 6篇
  • C++ 23篇
  • 计算机基础 4篇
  • 求职 18篇
  • 工作 11篇
  • 工具 4篇
  • Kubernets 1篇
  • ACM 22篇
  • MFC 3篇
  • JAVA 4篇

最新评论

  • git配置

    goyeer(工蚁): 干货满满,通俗易懂,期待博主再次更新!

  • DLL的两种加载方式——静态加载和动态加载

    Learnersince2020: 我静态加载按照教程还是会报错lib的解析外部符号错误,动态加载却没有问题。 怎么个事儿!

  • RTSP over UDP与RTSP over TCP取流对比

    lmw0320: gstreamer的命令是:appsrc ! video/x-raw, format=BGR ! queue ! videoconvert ! video/x-raw,width=1920,height=1080 ! queue ! x264enc ! queue ! video/x-h264, stream-format=byte-stream ! h264parse ! rtph264pay pt=96 config-interval=1 ! udpsink host=127.0.0.1 port=5400 我不是很明白几点: 1. 对于不同视频流的输入,我推送到udp上,是否也要推送到不同的udp端口去? 这样rtsp获取的时候,也根据不同的端口来获取不同的流?只要设置factory的不同名称(对rtsp的端口只要一个就可以, 而通过不同的factory名称来区别不同的流??) 2. 这么一长串的命令,实在看得云里雾里的,完全不知道具体的流是如何转换的,是否有必要用这么长的命令来实现?

  • RTSP over UDP与RTSP over TCP取流对比

    lmw0320: 请教下,我目前的需求是想将边缘设备上的获取到多个摄像头的帧数据,进行处理后,转成RTSP流的方式推送出去,要怎么做才是合适的呢? 之前的方案是将图片数据推送到udp服务中,然后起个rtsp的服务,从udp中取流,再推送。 看博文的意思,其实用tcp可能更好? 对这块完全不了解,求指点。。

  • 欧拉回路判断

    Zhaoge2334: 判断节点度真的是一点技术都。。。。

最新文章

  • Mac上命令
  • ELK + Fliebeat + Kafka日志系统
  • WebRTC问题列表
2023年18篇
2021年3篇
2020年15篇
2019年7篇
2018年1篇
2017年3篇
2016年39篇
2014年16篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家湖北高跟鞋玻璃钢雕塑赣州多彩玻璃钢雕塑销售厂家玻璃钢美术雕塑河南郑州玻璃钢雕塑定制咨询六安玻璃钢雕塑景观济南玻璃钢花盆供货商河北大型玻璃钢雕塑销售厂家北京火烈鸟玻璃钢雕塑生产厂家玻璃钢古代人物雕塑设计公司湘潭玻璃钢雕塑制作武汉定制玻璃钢雕塑销售厂家玻璃钢寺院雕塑宿州园林玻璃钢雕塑制作做玻璃钢雕塑怎样防护周口神像玻璃钢雕塑皋兰玻璃钢雕塑专业厂家玻璃钢商场美陈雕塑定制玻璃钢雕塑设计服务商场美陈挂网玻璃钢熊猫雕塑批发价格室外校园玻璃钢景观雕塑定做玻璃钢可以做雕塑忻州玻璃钢马雕塑武汉不锈钢玻璃钢雕塑深圳户外商场美陈哪里有玻璃钢广场铜雕塑大型玻璃钢花盆的图片和价格桐乡商场组合玻璃钢花盆北京玻璃钢雕塑模具定制浙江省玻璃钢雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化