ICE之STUN协议---Binding Request

参考文档

按照时间顺序:

stun协议

使用

https://tools.ietf.org/html/rfc5389#section-14

  • stun不是NAT穿透问题的解决方案。
  • stun只能作为大解决方案的一个工具。
    ICE之STUN协议---Binding Request

stun message structure

https://tools.ietf.org/html/rfc5389#section-6

ICE之STUN协议---Binding Request

binding request

ICE之STUN协议---Binding Request

  • message type 分析

    • 14bits表示message type

    • 2bits表示class,C0和C1,也就是说一共四个class类型

      • 0b00 : request
      • 0b01 : indication
      • 0b10 : success response
      • 0b11 : error response
    • 12bits表示method,M0-M11
      ICE之STUN协议---Binding Request

    • 下面这个是在rfc3489的描述
      https://tools.ietf.org/html/rfc3489#section-11.1
      说明:

      • 0b000000000001 :表示Binding方法
      • 0b000000000010 :表示Shared Secret方法
        ICE之STUN协议---Binding Request
  • cookie 必须是 0x2112a442
    ICE之STUN协议---Binding Request

  • messgae length

    • 单位是字节
    • 不包含20字节头
      ICE之STUN协议---Binding Request
  • transaction id

    • 随机值
    • 0至2961{2^{96}-1}
      ICE之STUN协议---Binding Request

attributes

  • 跟在header之后
  • 可以没有
  • TLV(Type-Length-Value)格式
    ICE之STUN协议---Binding Request

ICE之STUN协议---Binding Request

Type

ICE之STUN协议---Binding Request

Length
  • 只表示value的长度

  • 但是如果长度不是整4个字节,要补0
    ICE之STUN协议---Binding Request
    比如这就是补的三个0
    ICE之STUN协议---Binding Request

  • 具体案例分析
    ICE之STUN协议---Binding Request

  • username
    ICE之STUN协议---Binding Request

  • ice-controlling

    • Tie breaker 是一个64bits的随机值,是当两端的角色相同时,在服务端做决策的,决定哪一端改变角色。
      ICE之STUN协议---Binding Request
  • use-candidate
    ICE之STUN协议---Binding Request

  • priority
    ICE之STUN协议---Binding Request

  • message-integrity
    ICE之STUN协议---Binding Request

  • fingerprint
    ICE之STUN协议---Binding Request