WebRTC服务器Coturn服务器中的通信协议

1、概述

作为WebRTC服务器,coturn通信协议主要是STUN和TURN协议
STUN&TURN协议头部都是20个字节,用 Message Type来区分不同的协议

|------2------|------2------|------------4------------|------------------------12-------------------------|-----------------------------x-------------------------|

|--消息类型--|--消息长度---| ------魔法cookie--------|-----------------------事务ID----------------------|---------------------属性------------------------|

备注: 内容部分的属性,每个属性都由(类型(2)、长度(2)、值(x))三个部分组成,其中类型占用2个字节,长度2个字节,值(x),根据长度定义

2 STUN协议

探测客户端NAT映射地址, 主要是获取客户端的公网地址

2.1 Binding Request

获取客户端的公网IP和Port

Message Type: 0x0001

eg: 抓包数据

说明这个binding request的长度就是20个字节,Message Length为0,说明内容部分为可变长度为0,也即属性没有

2.2 Binding Response

Message Type: 0x0101

返回客户端的公网IP和端口

eg:

\

XOR-MAPPED-ADDRESS‌:

表示客户端经过NAT转换后的公网IP地址和端口(通过异或运算加密处理),用于后续P2P通信的地址交换。此属性用于取代旧版协议中的MAPPED-ADDRESS以提高兼容性‌

MAPPED-ADDRESS

表示客户端在NAT后的公网IP地址和端口(明文形式)。在旧版STUN(RFC3489)中使用,新版协议(RFC5389)已逐渐用XOR-MAPPED-ADDRESS替代

RESPONSE-ORIGIN

表示STUN服务器发送响应时使用的源IP地址和端口。客户端可通过此字段验证响应是否来自合法的服务器,防止伪造响应‌

OTHER-ADDRESS

表示服务器提供的备用地址或端口,通常用于冗余或负载均衡场景。例如,当主服务器地址不可达时,客户端可尝试使用此备用地址

3 TURN协议

3.1 Allocate

分配中继地址与端口

3.1.1 Allocate Request

Message Type: 0x0003

Message Length: 8 表示内容属性部分为8个字节长度, 其中属性值为UDP(0x11),类型(2),长度(2)

3.1.2 Allocate Response

Message Type: 0x0113

Message Length: 52,报告401错误,未授权,需要第二次Allocate Reqest带上用户名跟密码,第一次其实是客户端请求返回nonce和realm,第二次的Alocate请求才是真正验证数据

3.1.3 第二次 Allocate Request请求

Message Type: 0x0003

3.1.4 第二次Allocate 的响应(对应4.2.1.3的请求)

Message Type: 0x0103

XOR-RELAYED-ADDRESS

中继服务器的地址和端口

XOR-MAPPED-ADDRESS

客户端的地址和端口

LEFETIME

中继地址的有效期,客户端必须在这个时间过期之前发送REFRESH请求续期

MESSAGE-INTEGRITY

消息签名-防篡改,基于HMAC-SHA1算法

3.2. Channel Binding

优化数据包传输效率

3.2.1 Channel Binding Request

Message Type: 0x0009

3.2.2 Channel Binding Response

Message Type: 0x0109

3. 3 Create Permission

授权对等端通信权限

3.3.1 Create Permission Request

Message Type: 0x0008

3.3.2 Create Permission Response

Message Type: 0x0108

3.4 Send Indicate

利用中继,测试两端数据是否通,发送连通性报文

3.4.1 Send Indicate Request

Message Type: 0x0016

3.4.2 Send Indicate Response

Message Type: 0x0017

相关推荐
莹莹学编程—成长记8 分钟前
string的模拟实现
服务器·c++·算法
正经教主7 小时前
【问题】解决docker的方式安装n8n,找不到docker.n8n.io/n8nio/n8n:latest镜像的问题
运维·docker·容器·n8n
joker_zsl8 小时前
docker的安装和简单使用(ubuntu环境)
运维·docker·容器
Run1.8 小时前
深入解析 Linux 中动静态库的加载机制:从原理到实践
linux·运维·服务器
VI8664956I268 小时前
全链路自动化AIGC内容工厂:构建企业级智能内容生产系统
运维·自动化·aigc
码农hbk10 小时前
linux ptrace 图文详解(七) gdb、strace跟踪系统调用
linux·服务器
264玫瑰资源库10 小时前
斗鱼娱乐电玩平台源码搭建实录
运维·服务器·游戏·娱乐
hotlinhao10 小时前
ThinkPHP6模型中多组条件逻辑或Or查询的使用
linux·服务器·数据库
Jogging-Snail10 小时前
从零开始掌握Linux数据流:管道与重定向完全指南
linux·运维·管道·重定向·linux 数据流·管道原理