十五、网络传输基本知识-STUN

注:以下图片来自慕课网,侵权可删

STUN介绍

  • STUN存在的目的就是进行NAT穿越
  • STUN是典型的客户端/服务器模式。客户端发送请求,服务器进行响应

RFC STUN规范

  • RFC3489/STUN
    Simple Traversal of UDP Through NAT 通过UDP进行NAT穿越(失败率较高)
  • RFC5389/STUN
    Session Traversal Utilities for NAT 包括UDP和TCP两种协议进行NAT穿越

STUN协议

  • (协议头)包括 20字节的 STUN header
  • (协议体)Body 中可以有 0个或多个 Attribute

RFC3489/STUN header格式

  • 2字节(16bit)类型
  • 2字节(16bit)消息长度,不包括消息头本身这20字节
  • 16字节(128bit)事物ID,请求与响应事务ID相同
RFC5389/STUN header格式

不同点:

  • 5389中前两位必须是0 0
  • 3489中事务ID是128位,5389中是96位,另外32位被单独划分出来用做Magic Cookie
STUN Message Type
  • 前两位必须是00, 以区分复用同一端口号的不同协议是不是STUN协议
  • 2位用于分类,即C0和C1
    C0和C1占两位,所以它有四种类型,请求,指示,成功应答、错误应答四种类型
  • 12位用于定义请求/指示
    比如,1代表绑定,2代表私有消息,隐私数据等



    0b00:表示是一个请求
    0b01:表示一个指示
    0b10:表示是请求成功的响应
    0b11:表示是失败请求的响应



    最后一位1代表绑定 1前面的 00代表消息 10代表响应
    最后一位2代表私密 2前面的 00代表消息 10代表响应
    5389中将第二种类型去掉了
大小端模式
  • 大端模式:数据的高字节保存在内存的低地址中
  • 小端模式:数据的高字节保存在内存的高地址中
  • 网络字节顺序:采用大端排序方式



    右边是后发送过来的,属于低端,低字节

Transaction ID
  • 4字节, 32位, Magic Cookie,固定值 0x2112A442。(有即为5389)通过它可以判断客户端是否可以识别某些属性
  • 12字节,96位, 标识同一事务的请求和响应

STUN Message Body

  • 跟在消息头后,有0或多个属性
  • 每个属性进行 TLV编码:Type,Length,Value



你可能感兴趣的:(十五、网络传输基本知识-STUN)