美文网首页
stun的报文结构

stun的报文结构

作者: 古则 | 来源:发表于2017-05-20 13:09 被阅读231次

    所有的STUN消息都包含20个字节的消息头,包括16位的消息类型,16位的消息长度和128位的事务ID。
    消息类型 16位
    消息长度 16位
    事务ID 128位

    消息类型许可的值如下:
    0x0001:捆绑请求
    0x0101:捆绑响应
    0x0111:捆绑错误响应
    0x0002:共享私密请求
    0x0102:共享私密响应
    0x0112:共享私密错误响应
    消息长度,是消息大小的字节数,但不包括20字节的头部。
    事务ID,128位的标识符,用于随机请求和响应,请求与其相应的所有响应具有相同的标识符。

    消息头之后是0或多个属性,每个属性进行TLV编码,包括16位的属性类型、16位的属性长度和变长属性值。

    属性类型 16位
    属性长度 16位
    属性值
    ……

    属性类型定义如下:
    MAPPED-ADDRESS
    MAPPED-ADDRESS属性表示映射过的IP地址和端口。它包括8位的地址族,16位的端口号及长度固定的IP地址。
    RESPONSE-ADDRESS
    RESPONSE-ADDRESS属性表示响应的目的地址
    CHASNGE-REQUEST
    客户使用32位的CHANGE-REQUEST属性来请求服务器使用不同的地址或端口号来发送响应。
    SOURCE-ADDRESS
    SOURCE-ADDRESS属性出现在捆绑响应中,它表示服务器发送响应的源IP地址和端口。
    CHANGED-ADDRESS
    如果捆绑请求的CHANGE-REQUEST属性中的“改变IP”和“改变端口”标志设置了,则CHANGED-ADDRESS属性表示响应发出的IP地址和端口号。
    USERNAME
    USERNAME属性用于消息的完整性检查,用于消息完整性检查中标识共享私密。USERNAME通常出现在共享私密响应中,与PASSWORD一起。当使用消息完整性检查时,可有选择地出现在捆绑请求中。
    PASSWORD
    PASSWORD属性用在共享私密响应中,与USERNAME一起。PASSWORD的值是变长的,用作共享私密,它的长度必须是4字节的倍数,以保证属性与边界对齐。
    MESSAGE-INTEGRITY
    MESSAGE-INTEGRITY属性包含STUN消息的HMAC-SHA1,它可以出现在捆绑请求或捆绑响应中;MESSAGE-INTEGRITY属性必须是任何STUN消息的最后一个属性。它的内容决定了HMAC输入的Key值。
    ERROR-CODE
    ERROR-CODE属性出现在捆绑错误响应或共享私密错误响应中。它的响应号数值范围从100到699。
    下面的响应号,与它们缺省的原因语句一起,目前定义如下:
    400(错误请求):请求变形了。客户在修改先前的尝试前不应该重试该请求。
    401(未授权):捆绑请求没有包含MESSAGE-INTERITY属性。
    420(未知属性):服务器不认识请求中的强制属性。
    430(过期资格):捆绑请求没有包含MESSAGE-INTEGRITY属性,但它使用过期
    的共享私密。客户应该获得新的共享私密并再次重试。
    431(完整性检查失败):捆绑请求包含MESSAGE-INTEGRITY属性,但HMAC验
    证失败。这可能是潜在攻击的表现,或者客户端实现错误
    432(丢失用户名):捆绑请求包含MESSAGE-INTEGRITY属性,但没有
    USERNAME属性。完整性检查中两项都必须存在。
    433(使用TLS):共享私密请求已经通过TLS(Transport Layer Security,即安全
    传输层协议)发送,但没有在TLS上收到。
    500(服务器错误):服务器遇到临时错误,客户应该再次尝试。
    600(全局失败):服务器拒绝完成请求,客户不应该重试。

    UNKNOWN-ATTRIBUTES
    UNKNOWN-ATTRIBUTES属性只存在于其ERROR-CODE属性中的响应号为420的捆绑错误响应或共享私密错误响应中。
    REFLECTED-FROM
    REFLECTED-FROM属性只存在于其对应的捆绑请求包含RESPONSE-ADDRESS属性的捆绑响应中。属性包含请求发出的源IP地址,它的目的是提供跟踪能力,这样STUN就不能被用作DOS攻击的反射器。
    属性空间分为可选部分与强制部分,值超过0x7fff的属性是可选的,即客户或服务器即使不认识该属性也能够处理该消息;值小于或等于0x7fff的属性是强制理解的,即除非理解该属性,否则客户或服务器就不能处理该消息。

    相关文章

      网友评论

          本文标题:stun的报文结构

          本文链接:https://www.haomeiwen.com/subject/pmeyxxtx.html