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
评论前必须登录!
注册