STUN协议简介

STUN协议详解 1.概述 STUN(session traversal utilities for NAT),一种处理NAT传输的协议,主要作为工具来服务其他协议。它允许位于NAT(或多重NAT后的客户端找出自己的公网地址,查出自己位于那种类型的NAT之后以及NAT为某一个本地端口所绑定的internet端口),这些信息被用来两个同时处于NAT路由器之后的主机之间建立UDP通信。目的就是找到外界连接内部地址所需的信息。 2.STUN协议架构 1.请求/响应(request/response)类型,由客户端给服务器 阅读详情

STUN结构

注意:be表示big endian;le表示little endian

         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |0 0| STUN Message Type (14bit) |    Message Length (16bit)     |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                         Magic Cookie (32bit)                  |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                                                               |
        |                     Transaction ID (96 bits)                  |
        |                                                               |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

STUN协议结构由20字节头和若干个属性组成,属性的个数可以为0。且统一是大端字节序的二进制序列

1、开头两位永远为0
2、Message Type、Message Length
// 图示为大端字节序排列
                        0                 1
                        2  3  4 5 6 7 8 9 0 1 2 3 4 5
                       +--+--+-+-+-+-+-+-+-+-+-+-+-+-+
                       |M |M |M|M|M|C|M|M|M|C|M|M|M|M|
                       |11|10|9|8|7|1|6|5|4|0|3|2|1|0|
                       +--+--+-+-+-+-+-+-+-+-+-+-+-+-+

STUN Message Type用于定义消息类(request, success response, failure response, or indication)和消息方法
STUN虽然有四个消息类,但是只有两种事务:request/response transactions 和 indication transactions

C0 - C1指定消息类,M0 - M11指定消息方法
0x0001 : Binding Request
0x0101 : Binding Response
0x0111 : Binding Error Response
0x0002 : Shared Secret Request
0x0102 : Shared Secret Response
0x0112 : Shared Secret Error Response

// msg_type是主机字节序,为上面中的一种
#define IS_REQUEST(msg_type)       (((msg_type) & 0x0110) == 0x0000)
#define IS_INDICATION(msg_type)    (((msg_type) & 0x0110) == 0x0010)
#define IS_SUCCESS_RESP(msg_type)  (((msg_type) & 0x0110) == 0x0100)
#define IS_ERR_RESP(msg_type)      (((msg_type) & 0x0110) == 0x0110)

Message Length是后面属性的总字节数,不包括20字节的STUN头部

3、Magic Cookie 和 Transaction ID

在传输中,一般都认为Cookie是Transaction ID的一部分,故Transaction ID被认为是16字节内容但是cookie在[RFC 3489]中是固定数值0x2112A442(be)Transaction ID是由请求一方产生,在回复时需要和请求时Transaction ID一样,同一请求使用相同的Transaction ID,但客户端需为新的事务选择新的Transaction ID

4、STUN Attributes
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Type (16bit)          |            Length (16bit)     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Value (variable)                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Attributes紧跟在STUN头部之后,每个Attributes组成方式为Type-Length-Value。
Attributes的length字段表示Value字段的长度,由于要求Attributes的长度需是4字节倍数,
故会对Value部分进行填充,因此length表示的是填充之前的Value的长度,value中填充部分在处理时忽略

下面是Attributes Type定义的原话,无法直接翻译

A STUN Attribute type is a hex number in the range 0x0000 - 0xFFFF.
STUN attribute types in the range 0x0000 - 0x7FFF are considered comprehension-required;
STUN attribute types in the range 0x8000 - 0xFFFF are considered comprehension-optional.

Comprehension-required range (0x0000-0x7FFF):
0x0000: (Reserved)
0x0001: MAPPED-ADDRESS
0x0002: RESPONSE-ADDRESS
0x0003: CHANGE-ADDRESS
0x0004: SOURCE-ADDRESS
0x0005: CHANGED-ADDRESS
0x0006: USERNAME
0x0007: PASSWORD
0x0008: MESSAGE-INTEGRITY
0x0009: ERROR-CODE
0x000A: UNKNOWN-ATTRIBUTES
0x000B: REFLECTED-FROM
0x0014: REALM
0x0015: NONCE
0x0020: XOR-MAPPED-ADDRESS
Comprehension-optional range (0x8000-0xFFFF):
0x8022: SOFTWARE/SERVER
0x8023: ALTERNATE-SERVER
0x8028: FINGERPRINT

4.1、MAPPED-ADDRESS
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |0 0 0 0 0 0 0 0| Family (8bit) |       Port (16bit)            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      |                 Address (32 bits or 128 bits)                 |
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Family 取值有两种
0x01:IPv4
0x02:IPv6

4.2、XOR-MAPPED-ADDRESS
      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |x x x x x x x x|    Family     |         X-Port                |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                X-Address (Variable)
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Family同MAPPED-ADDRESS的Family
X-Port的计算方法是将主机字节序的NAT映射端口与cookie的高16位异或,再将结果转为网络字节序
IPv4情况下
X-Address的计算方法是将主机字节序的NAT端IP与cookie进行异或,再将结果转为网络字节序
IPv6情况下
X-Address的计算方法是将cookie和Transaction ID组成的128位进行异或,并将结果转为网络字节序

举例:以下是一段STUN报文
01 01 00 24 68 e7 4e 45 2c 28 53 47 9e 44 15 86
0f 60 73 60 00 01 00 08 00 01 08 67 6f 1e 20 52
00 04 00 08 00 01 0d 96 0a 00 18 11 00 20 00 08
00 01 60 80 07 f9 6e 17

红色部分是XOR-MAPPED-ADDRESS,蓝色部分是MAPPED-ADDRESS
type: 0x0020; length: 0x0008;
family: 0x01; x-port: 0x6080(24704); x-address: 0x07f96e17(7.249.110.23)
实际NAT映射端口是0x0867(be)(2151) cookie的高16位为0x68e7(be)
0x0867 XOR 0x68e7 = 0x6080

4.3、USERNAME

USERNAME属性用于消息完整性检查。
It identifies the username and password combination used in the MESSAGE-INTEGRITY check.

4.4、MESSAGE-INTEGRITY
4.5、SOURCE-ADDRESS

此属性的结构组成和MAPPED-ADDRESS一样,但是其内容是STUN服务器的IP和端口

4.6、CHANGE-REQUEST
		    0                   1                   2                   3
		    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
		   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
		   |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 A B 0|
		   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

CHANGE-REQUEST是用于客户端请求STUN服务器发送另一个STUN服务器的IP和端口,以便探测其NAT类型
服务器会回复带有CHANGED-ADDRESS属性的响应
虽然CHANGE-REQUEST是32位的长度但是只使用AB两位,其余为0
A位设置为1表示修改IP
B位设置为1表示修改Port

4.7、CHANGED-ADDRESS

其结构与MAPPED-ADDRESS结构一样,其组成是新的STUN服务器的IP、Family、Port
此属性只能出现在Binding Response中

4.8、ERROR-CODE
		     0                   1                   2                   3
		     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
		    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
		    |                   0                     |Class|     Number    |
		    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
		    |      Reason Phrase (variable)                                ..
		    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Class表示错误号的百位数字,只可取 1-6
Number是错误号的十位和个位的数字,只可取0-99
下面列出错误号
400 (Bad Request) – 请求格式不正确
401 (Unauthorized) – 绑定请求不包含MESSAGE-INTEGRITY属性
420 (Unknown Attribute) – 服务器无法理解请求中的属性
430 (Stale Credentials) – 绑定请求确实包含MESSAGE-INTEGRITY属性,但它使用了已过期的共享密
431 (Integrity Check Failure) – 绑定请求包含MESSAGE-INTEGRITY属性,但HMAC验证失败
432 (Missing Username) – 绑定请求包含MESSAGE-INTEGRITY属性,但不包含USERNAME属性
433 (Use TLS) – 共享密钥请求必须通过TLS发送,但未通过TLS接收
500 (Server Error) – 服务器出现临时错误
600 (Global Failure) – 服务器拒绝完成请求。客户端不应重试

5、举例
5.1、Binding Request
00 01 00 00 90 a2 69 8a f8 84 b5 4e ac 84 89 43 9f 45 58 63
Message Type: Binding Request (0x0001)
Message Length: 0x0000
Message Transaction ID: 90a2698af884b54eac8489439f455863
5.2、Binding Response
01 01 00 44 90 a2 69 8a f8 84 b5 4e ac 84 89 43
9f 45 58 63 00 01 00 08 00 01 08 5e 6f 1e 20 52
00 04 00 08 00 01 0d 96 d9 0a 44 91 00 05 00 08
00 01 0d 97 d9 74 7a 8d 80 20 00 08 00 01 98 fc
ff bc 49 d8 80 22 00 10 56 6f 76 69 64 61 2e 6f
72 67 20 30 2e 39 36 00
Message Type: Binding Response (0x0101)
Message Length: 0x0044
Message Transaction ID: 90a2698af884b54eac8489439f455863
Attribute: MAPPED-ADDRESS
    Attribute Type: MAPPED-ADDRESS (0x0001)
    Attribute Length: 8
    Protocol Family: IPv4 (0x0001)
    Port: 2142
    IP: 111.30.32.82
Attribute: SOURCE-ADDRESS
    Attribute Type: SOURCE-ADDRESS (0x0004)
    Attribute Length: 8
    Protocol Family: IPv4 (0x0001)
    Port: 3478
    IP: 217.10.68.145
Attribute: CHANGED-ADDRESS
    Attribute Type: CHANGED-ADDRESS (0x0005)
    Attribute Length: 8
    Protocol Family: IPv4 (0x0001)
    Port: 3479
    IP: 217.116.122.141
Attribute: XOR_MAPPED_ADDRESS
    Attribute Type: XOR_MAPPED_ADDRESS (0x8020)
    Attribute Length: 8
    Protocol Family: IPv4 (0x0001)
    Port (XOR-d): 39164
    [Port: 2142]
    IP (XOR-d): 255.188.73.216
    [IP: 111.30.32.82]
Attribute: SERVER
    Attribute Type: SERVER (0x8022)
    Attribute Length: 16
    Server version: Vovida.org 0.96
5.3、Binding Request With CHANGE-REQUEST
00 01 00 08 0a e1 ce 2e aa bc 1f 43 9e 0f 5d 53
67 14 93 c8 00 03 00 04 00 00 00 06
Message Type: Binding Request (0x0001)
Message Length: 0x0008
Message Transaction ID: 0ae1ce2eaabc1f439e0f5d53671493c8
Attributes
    Attribute: CHANGE-REQUEST
        Attribute Type: CHANGE-REQUEST (0x0003)
        Attribute Length: 4
        .... .... .... .1.. = Change IP: Set
        .... .... .... ..1. = Change Port: Set
5.4、Binding Response With CHANGED-ADDRESS
01 01 00 44 90 a2 69 8a f8 84 b5 4e ac 84 89 43
9f 45 58 63 00 01 00 08 00 01 08 5e 6f 1e 20 52
00 04 00 08 00 01 0d 96 d9 0a 44 91 00 05 00 08
00 01 0d 97 d9 74 7a 8d 80 20 00 08 00 01 98 fc
ff bc 49 d8 80 22 00 10 56 6f 76 69 64 61 2e 6f
72 67 20 30 2e 39 36 00
Message Type: Binding Response (0x0101)
Message Length: 0x0044
Message Transaction ID: 90a2698af884b54eac8489439f455863
Attribute: MAPPED-ADDRESS
    Attribute Type: MAPPED-ADDRESS (0x0001)
    Attribute Length: 8
    Protocol Family: IPv4 (0x0001)
    Port: 2142
    IP: 111.30.32.82
Attribute: SOURCE-ADDRESS
    Attribute Type: SOURCE-ADDRESS (0x0004)
    Attribute Length: 8
    Protocol Family: IPv4 (0x0001)
    Port: 3478
    IP: 217.10.68.145
Attribute: CHANGED-ADDRESS
    Attribute Type: CHANGED-ADDRESS (0x0005)
    Attribute Length: 8
    Protocol Family: IPv4 (0x0001)
    Port: 3479
    IP: 217.116.122.141
Attribute: XOR_MAPPED_ADDRESS
    Attribute Type: XOR_MAPPED_ADDRESS (0x8020)
    Attribute Length: 8
    Protocol Family: IPv4 (0x0001)
    Port (XOR-d): 39164
    [Port: 2142]
    IP (XOR-d): 255.188.73.216
    [IP: 111.30.32.82]
Attribute: SERVER
    Attribute Type: SERVER (0x8022)
    Attribute Length: 16
    Server version: Vovida.org 0.96
6、发现过程

Test I:仅发送Binding Request
响应时携带MAPPED-ADDRESS、SOURCE-ADDRESS、CHANGED-ADDRESS、XOR_MAPPED_ADDRESS、SERVER(没啥作用)
Test II:发送带有修改IP和Port标志的CHANGE-REQUEST属性的请求
Test III:发送仅修改Port标志的CHANGE-REQUEST请求

                        +--------+
                        |  Test  |
                        |   I    |
                        +--------+
                             |
                             |
                             V
                            /\              /\
                         N /  \ Y          /  \ Y             +--------+
          UDP     <-------/Resp\--------->/ IP \------------->|  Test  |
          Blocked         \ ?  /          \Same/              |   II   |
                           \  /            \? /               +--------+
                            \/              \/                    |
                                             | N                  |
                                             |                    V
                                             V                    /\
                                         +--------+  Sym.      N /  \
                                         |  Test  |  UDP    <---/Resp\
                                         |   II   |  Firewall   \ ?  /
                                         +--------+              \  /
                                             |                    \/
                                             V                     |Y
                  /\                         /\                    |
   Symmetric  N  /  \       +--------+   N  /  \                   V
      NAT  <--- / IP \<-----|  Test  |<--- /Resp\               Open
                \Same/      |   I    |     \ ?  /               Internet
                 \? /       +--------+      \  /
                  \/                         \/
                  |                           |Y
                  |                           |
                  |                           V
                  |                           Full
                  |                           Cone
                  V              /\
              +--------+        /  \ Y
              |  Test  |------>/Resp\---->Restricted
              |   III  |       \ ?  /
              +--------+        \  /
                                 \/
                                  |N
                                  |       Port
                                  +------>Restricted

1、测试从Test I开始,如果此测试未产生响应,则客户端立刻知道无法进行udp连接
如果接收到响应,则检测MAPPED-ADDRESS属性,验证返回的IP、Port是否和本地的Ip、Port一致
如果相同,则知道ip和port未被nat转变,可能处于公网环境或处于类似Full Cone的nat环境,进行TEST II
如果收到响应,则表明上述猜测正确,否则处于防火墙下
2、如果Test I返回的IP、Port响应和本地的不一致,客户端知道其处于Nat后面,则执行Test II
如果收到响应则表明处于Full Cone Nat
如果未收到响应,则向’Test I’返回的CHANGED-ADDRESS中的Ip和port发送Test I
当收到响应时(一般可以收到)检测MAPPED-ADDRESS属性,是否和第一步Test I返回的一致,不一致则表明是对称NAT symmetric
如果相同,则表明处于restricted NAT或者port restricted NAT后面,如此则需要进行Test III以确定具体是哪一种。
当收到回应表明是restricted NAT,未收到响应表明是port restricted NAT

7、检测绑定生存期

原理:二分查找法
准备两个udp socket,X和Y,Y发送一次Binding Request请求。
用X定时T秒发送带有RESPONSE-ADDRESS属性的bind request
RESPONSE-ADDRESS中是Y的MAPPED-ADDRESS的IP、Port
当Y收到响应时增加时间一秒,如此反复
当Y未收到响应时减少一秒,如此反复
当找到在[T, T + 1]区间内的值,换成每次增加或减少100ms,在反复

虽然这样做确实可以找到,但是对于程序来说耗时太久,故找到一个合适的T即可,但一般来说30s以内的映射不会失效,所以可以以30s做一个参考

8、NAT穿透

假设 Full Cone = 1, Restricted = 2, Port Restricted = 3, symmetric = 4
则有 NAT-A + NAT-B <= 6才能使用stun穿透成功,故当两个nat是Port Restricted或symmetric其中之一时无法穿透,但是Port Restricted和Port Restricted除外
注意:以下指NAPT型

8.1、处于同一NAT下时

在这里插入图片描述

通过STUN服务可以获取其NAT的公网IP和端口,从服务器中获取到想要连接的对端公网IP和端口后可以比较IP,相同则处于同一NAT下,此时只需内部连接即可

8.2、处于不同NAT下时

在这里插入图片描述

1、Client A,Client B分别登录STUN服务器,获取其对外ip和port
记作A:202.120.23.79:5500 B: 202.120.36.181:6600
假如A想同B建立连接,则只需要通过STUN服务向B发送A的IP和Port,让B主动向A发消息,这样在B的NAT会有一条202.120.36.181:6600 -> 202.120.23.79:5500 的纪录
此时A再向B发消息就可以通过NAT到达B

参考:

RFC 3489
RFC 5389

WebRTC-STUN协议详解 STUN(Session Traversal Utilities for NAT)NAT会话穿透工具,STUN是一个Client/Server协议,支持请求/响应类型、指示类型两种类型。STUN作为ICE(Interactive Connectivity Establishment,交互式连接建立)解决方案的一种工具使用,STUN协议本身没有穿透等能力,只是为穿透提供反射地址,穿透不成功时,需要使用TURN协议。1.1 请求/响应类型(request/response) 阅读详情

相关推荐

STUN协议解析

文章目录Message HeaderMessage AttributesMAPPED-ADDRESSRESPONSE_ADDRESSCHANGE-REQUESTERROR-CODERESPONSE-ORIGINOTHER-ADDRESSRFC3478 VS RFC5780RFC3478 NAT类型定义完全圆锥形NAT(Full cone NAT)受限圆锥形NAT(Address-Restricte...

123456789 8253

stun协议笔记一(stun格式简介)

一、stun协议格式 1、STUN报文头 1)最高的2位必须置零,这可以在当STUN和其他协议复用的时候,用来区分STUN包和其他数据包。 2)STUN Message Type 字段定义了消息的类型(请求/成功响应/失败响应/指示)和消息的主方法。 虽然我们有4个消息类别,但在STUN中只有两种类型的事务,即请求/响应类型和指示类型。响应类型分为成功和出错两种,用来帮助快速处理STUN...

CrystalShaw的博客 6098

zabbix添加IBM服务器SNMPV3监控

本地采用欧冠的是zabbix5.0,服务器型号是SR860,使用snmpv3因为只支持这个,醉了。说明:本地采用欧冠的是zabbix5.0,服务器型号是SR860。

萌新包大人的博客 1984

stun 协议 NAT穿透方式 简介

STUN是RFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NAT的IP和端口。毫无疑问的,它对穿越早期的NAT起了巨大的作用,并且还将继续在NAT穿透中占有一席之地。 STUN的探测过程需要有一个公网IP的STUN server,在NAT后面的UAC必须和此server配合,互相之间发送若干个UDP数据包。UDP包中包含有UAC需要了解的信息,比如NAT外网IP,PORT等等。UAC...

whatday的专栏 4224

Arch Linux双系统安装避坑指南:从Windows分区到桌面环境全流程

本文提供了一份详尽的Arch Linux与Windows双系统安装避坑指南。内容涵盖从安装前的UEFI环境确认、BitLocker处理、分区规划,到Live环境进入、基础系统安装、GRUB引导配置,再到显卡驱动安装、KDE/GNOME桌面环境部署及中文化设置的全流程。重点解决了双系统安装中的核心痛点,帮助用户在不破坏现有Windows系统的前提下,顺利完成Arch Linux的安装。

nice1的博客 535

利用Ghidra与SVD插件实现STM32固件深度逆向分析

本文详细介绍了如何利用Ghidra逆向工程框架结合SVD插件,实现对STM32固件(.bin文件)的深度逆向分析。通过加载描述芯片外设寄存器的SVD文件,Ghidra能将晦涩的硬件地址操作转换为可读的寄存器符号,极大提升了对嵌入式固件中通信协议、安全校验等关键逻辑的分析效率。文章涵盖了从Java环境搭建、工具配置到实战逆向解析的完整流程。

peach的博客 942

stun协议笔记二(webrtc之turn流程简介)

一、turn典型应用场景 这张图描述的是TURN Client、PeerA、PeerB三方会议之间,网络报文互相通讯的场景。其中: 1、TURN Client客户端、PeerA分别连接到两个内网中,并且通过一个或者多个NAT到达公网。 2、TURN服务器架设在公网中,不同的客户端以TURN服务器为中继和其他peer进行通信。如上图所示:TURN Client客户端通过中继和其他peer进行通...

CrystalShaw的博客 9524

从jieba分词到BERT-wwm——中文自然语言处理(NLP)基础分享系列(12)

今天是本系列的最后一期,完整代码呈现Huggingface transformers平台上微调BERT-wwm-ext的过程方法。

weixin_49518391的博客 3763

【网络通信 -- 直播】网络通信协议简介 -- STUN

【网络通信 -- 直播】网络通信协议简介 -- STUN 资料链接 STUN RFC5389 中/英文版,链接:https://pan.baidu.com/s/1cgSgssJyultDUipSNG8VAA 提取码:28il 参考致谢 本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。 【1】STUN_RFC5389 【2】P2P技术详解(四):P2P技术之STUN、TURN、ICE详解 【3】WebRTC网络基础 九、第四节 STUN协议 ..

CopperSun 技术博客 2067

ROS四旋翼无人机快速上手指南(4):阿木实验室PX4功能包飞行控制分析与讲解(重点章节)

成就更好的自己 这一章详细讲解一下阿木实验室(AMOV)的开源项目px4_command功能包,此功能包通过mavlink协议直接控制烧录px4固件的自驾仪,还融合了来自各个传感器的位姿,距离等信息,此外,功能包提供的接口向上对接应用层算法级的程序例如SLAM,kfc目标检测引导,路径规划等算法,因此,在整个无人机控制中起到了承上启下至关重要的作用。 用到的文件及工具包链接如下: AMOV实验室源码如下: https://gitee.com/theroadofengineers/px4_comman

The Road of Engineer 6171

华为OD新系统机试真题 - 获取大写字母瓷砖拼出独特图案数量

华为OD机试新系统真题【获取大写字母瓷砖拼出独特图案数量】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统四月二十九号机试真题【获取大写字母瓷砖拼出独特图案数量】

qq_45776114的博客 1218

WebRTC 中 ICE 流程优化:SRS 轻量级部署与 NAT 类型检测实战

STUN(Session Traversal Utilities for NAT ,NAT 会话遍历实用程序 )是一套网络协议,最初由 RFC3489 定义,后因局限性多,迭代出。

m0_73359068的博客 1761

数字孪生教程大全之 我们如何构建数字孪生?数字孪生的五个级别都是什么

文章摘要 什么是数字孪生? 我们如何构建数字孪生? 开发智能数字孪生系统的框架 什么是数字孪生? 数字孪生是一个不言自明的术语,用于识别物理系统的数字化版本。数字孪生的最早参考来自大卫·格伦特(David Gelernter )的小说作品。在他 1995 年的书中,Gelernter 博士为读者提供了未来有趣的可能性——万维网。前网络书籍谈到了计算机系统上的镜像数字世界。有些人可能会争辩说,我们的 Meta-verse 是新的数字世界——现实世界的数字孪生。但是,还有其他可能性,时间可能会讲述一个更好的

iCloudEnd的博客 3631

玩物尚志第一篇

这几天有点玩物长志,没有把时间用到刃上,感觉有点后悔。但是应该振作起来把握好明天。 刚刚收到公司培训xmpp的邮件,外派没有机会去听,但是至少给我指明了方向,明天按照邮件的list自己研究好了。 附上邮件中的list: 1.xmpp协议简介; 2.jingle协议扩展; 3.nat穿透 stun协议; 4.smack框架简介; 5. Jingle协议框架...

java开发指南博客 【转载】 164

Android14 Qcom 从Framework到Driver带你连接WIFI(一)

前面已经讲完了WIFI打开的流程,那么通过UI这时候是可以选择需要连接的网络进行连接。从这里开始我们看连接的流程。

IAYLBL的博客 695

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STUN协议

STUN简介 STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT 路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。一旦客户端

843

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

STUN/TURN协议

STUN和TURN协议解析 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet。很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转。由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信。这种技术通常称为NAT穿透(NAT Traversal)。最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议。

流媒体巅峰之路 2117

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WebRTC学习七:WebRTC 中 STUN 协议详解

最近在看zlmediakit源码,发现webrtc部分涉及到STUN和DTLS协议,为了更方便的看懂这部分代码,网上查了下STUN协议和DTLS协议,将STUN协议部分先做个记录,后面结合代码如果有更深入的理解,再来更新其中的内容。

wel_006的博客 2116

STUN协议简要介绍

参考:https://www.rfc-editor.org/rfc/rfc5766.html STUN/TURN https://www.rfc-editor.org/rfc/rfc5389.html STUN协议在RFC5389中被重新命名为Session Traversal Utilities for NAT,即NAT会话穿透工具。在这里,NAT会话穿透工具被定位为一个...

infi 5206
上一篇: 封装红黑树代码-3 c++
下一篇: libco 宏分析
山有木兮啊
博客等级 码龄8年 135粉丝 132原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值