WebRTC服务器理论铺垫(四):STUN协议和STUN Header


前言

一、STUN协议

STUN存在的目的就是进行NAT穿越。
什么是NAT穿越?
NAT穿越介绍
STUN协议详细介绍
在这里插入图片描述
1)Client A和Client B分别向STUN服务器发出请求,询问并注册自身的转换后地址。
2)STUN Server收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即Client A(B)在NAT上对应的外部端口,然后响应消息通过NAT发送给Client A(B)。
3)Client A将其在NAT上对应的外部地址和端口信息包含在消息中,发送给STUN Server请求要和Client B通讯。
4)STUN Server收到请求信息后,向A和B发送对方的NAT映射地址。
5)Client B接收到A的外部地址后,将A的外部地址作为目的地址发送Hole Punching UDP数据报,该数据报使得B端网络的NAT设备允许后续的以A端地址为源地址的UDP数据报进入其内部网络。
6)Client A接收到B的外部地址后,以B的外部地址为目的发送探测UDP数据报,同样该数据报也在A端网络的NAT设备上建立对应映射。
7)Client B收到Client A的探测数据报后,向A端发送确认数据报。至此,双方建立互通的UDP连接

RFC STUN规范有以下几种:

  1. RFC3489/STUN:
    Simple Traversal of UDP through NAT
  2. RFC5389/STUN
    Session Traversal Utilies of NAT.(还可以使用TCP协议进行穿越)

二、STUN Header格式

请添加图片描述
magic cookie用来表明该消息是一个stun消息。

  • 2个字节(16bit)message type类型。前2位必须是00,用来区分复用同一端口时的STUN协议。有两位用于分类,即C0和C1。剩下12位用来定义请求或者指示。
    请添加图片描述请添加图片描述
    请添加图片描述
    注意这里的0001,0101的位置。
    如何判断请求成功还是失败呢?这就回到了我们上面说的C1 C0的判断。请添加图片描述
  • 2个字节(16bit)消息长度,不包括消息头。
  • 4个字节(32bit) magic cookie. 固定值0x2112A442,通过他可以判断客户端是否可以支持某些属性。
  • 12个字节(96bits)事务id,用来连接同一个事务的请求和响应

三、STUN Message Body

  • 消息头后有0或多个属性
  • 每一个属性进行TLV编码:type,length.value.
  • RFC3489定义的属性在这里插入图片描述
  • 不同请求和响应中不同Attribute的使用,N/A表示没有使用,O表示Optional
    在这里插入图片描述

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值