STUN协议学习

STUN协议学习1 STUN 协议介绍 STUN 存在的目的就是进行 NAT 穿越 STUN 是典型的客户端 服务端模式 客户端发送请求 服务端进行响应 2 RFCSTUN 规范 RFC3489 STUNSimpleTr STUNSessionT STUN 协议 3 1 包括 20 字节的 STUNheader3 2 Body 中可以有

1.STUN协议介绍:

STUN存在的目的就是进行NAT穿越。

STUN是典型的客户端/服务端模式。客户端发送请求,服务端进行响应。

2.RFC STUN规范

RFC3489/STUN

        Simple Traversal of UDP Through NAT

RFC5389/STUN

        Session Traversal Utilities for NAT

3.STUN协议:

   3.1.包括20字节的STUN header 

   3.2.Body中可以有0个或多个Attribute

4.STUN header格式

STUN协议学习

1)最高的2位必须置零,这可以在当STUN和其他协议复用的时候,用来区分STUN包和其他数据包。

    

STUN协议学习

其中显示的位为从最高有效位M11到最低有效位M0,M11到M0表示方法的12位编码。C1和C0两位提示消息是什么类型。

C0C1:

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

例:

STUN协议学习

STUN协议学习

3)Message Length 字段存储了信息的长度,以字节为单位,不包括20字节的STUN头部。由于所有的STUN属性都是都是4字节对齐(填充)的,因此这个字段最后两位应该恒等于零,这也是辨别STUN包的一个方法之一。

4)Magic Cookie 字段包含固定值0x2112A442,这是为了前向兼容RFC3489,因为在classic STUN中,这一区域是事务ID的一部分。另外选择固定数值也是为了服务器判断客户端是否能识别特定的属性。还有一个作用就是在协议多路复用时候也可以将其作为判断标志之一

5)Transaction ID 字段是个96位的标识符,用来区分不同的STUN传输事务。对于request/response传输,事务ID由客户端选择,服务器收到后以同样的事务ID返回response;对于indication则由发送方自行选择。事务ID的主要功能是把request和response联系起来,同时也在防止攻击方面有一定作用。服务端也把事务ID当作一个Key来识别不同的STUN客户端,因此必须格式化且随机在0~2^(96-1)之间。重发同样的request请求时可以重用相同的事务ID,但是客户端进行新的传输时,必须选择一个新的事务ID。

4字节,32位,固定值0x2112A442。通过它可以判断客户端是否可以支持某些属性。

12字节,96位,标识同一个事务的请求和响应。

 

4.STUN Message Body

消息头后有0或多个属性

每个属性进行TLV编码: type, length,value

4.1.TLV格式:

STUN协议学习

RFC3489定义的属性:

STUN协议学习

Attribute的使用:

STUN协议学习

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219028.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:57
下一篇 2026年3月17日 下午10:58


相关推荐

  • 微视的特效怎么弄的_微视入口

    微视的特效怎么弄的_微视入口欢迎大家前往"腾讯云+社区",获取更多腾讯海量技术实践干货哦~本文由"腾讯视频云终端团队"发表于"云+社区专栏"常青,20

    2022年8月6日
    7
  • md 语法之表格:对齐和换行

    md 语法之表格:对齐和换行对齐下面将对齐 数量 列的元素 左对齐 md 写法 硬币 数量 五毛 3 一角 5 效果 硬币数量五毛 3 一角 5 居中 md 写法 硬币 数量 五毛 3 一角 5 效果 硬币数量五毛 3 一角 5 右对齐 md 写法 硬币 数量

    2025年9月12日
    6
  • Github Copilot在选择了Claude模型后生成文件时就报网络错误

    Github Copilot在选择了Claude模型后生成文件时就报网络错误

    2026年3月15日
    3
  • python游戏代码200行_python做贪吃蛇

    python游戏代码200行_python做贪吃蛇python语言,总所周知是比较简单的,而且代码也不会像java那样多,下面就使用python的第三方库pygame进行开发一个贪吃蛇游戏。1.pygame的安装直接在cmd当中使用pipinstallpygame进行安装。或者在pycharm当中自动导入安装也OK2.全局变量的定义在代码当中会使用到很多这种变量的值,直接在最开始进行定义,后面获取变量即可W=600#屏幕宽H=400#高fps=12#帧率size=(W,H)ROW=

    2025年9月13日
    7
  • excel多列合并关联数据[通俗易懂]

    excel多列合并关联数据[通俗易懂]假设现在有三张表第一张第二张第三张姓名与操作id相对应,现在想弄出这样的一个表,将多列数据整合起来那怎么做呢?需要用到函数vlookup这个查找值是合并时不变的那列,在这个案例下,就是指日期+姓名+操作id这三列,但是这里是不能写这么多的,只能是一列的第一个值,作为查找值,应该是像主键一样具有唯一的id。第一步,将三列合并为一列,需要用到函数concatenate公式

    2022年7月17日
    16
  • 英文斜体复制_斜体英文转换器,斜体英文26个字母可复制

    英文斜体复制_斜体英文转换器,斜体英文26个字母可复制斜体英文在网上用得越来越多,《复仇者联盟4》上映时,很多人在微博上都看到过它里面的经典台词:????????????????????????????????,????????????????????????????????????????????????????????????????????????.还可能看到过:?????????????????????????????????????????????????????????????????????????????????????

    2022年4月29日
    2.0K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号