RFC3489 STUN之客户端所处环境探测流程与部分属性含义说明

1 STUN客户端所处环境探测流程

1.1 流程图

1.2 流程图中Binding请求类型说明

  • 类型1:Binding请求消息中不设置CHANGE-REQUEST,或若设置其相应更改IP与端口标志位都清零
  • 类型2:Binding请求消息中设置CHANGE-REQUEST,并且其相应更改IP与端口标志位都置位
  • 类型3:Binding请求消息中设置CHANGE-REQUEST,并且仅更改端口标志位置位

2 部分属性含义说明

2.1 CHANGE-REQUEST

前提:STUN服务器按协议要求一般会使用两个IP地扯、两个UDP端口号,组合出4个地扯对,每个地扯对创建一个UDP socket。

应用说明:该属性用于在STUN客户端发送Binding请求消息给STUN服务器时,该客户端希望或期待服务器返回响应消息时所使用的源IP或源端口是否要更改成不同于该请求消息的目的IP或目的端口,该属性是一个32位无符号整数,其LSB+1位表示是否更改响应消息的源端口不同于相应请求的目的端口、其LSB+2位表示是否更改响应消息的源IP不同于相应请求的目的IP。

示例:某STUN服务器使用IP1、IP2两个IP与3478、3479两个端口创建出4个UDP socket,分别为usocket1(绑定IP1与3478)、usocket2(绑定IP1与3479)、usocket3(绑定IP2与3478)、usocket4(绑定IP2与3479)。若STUN客户端向该STUN服务器的usocket1发送Binding请求消息并且其CHANGE-REQUEST属性的LSB+1置1,LSB+2位置0,这时该STUN服务器使用usocket2向客户端返回Binding响应消息(usocket2与usocket1绑定的IP相同,端口不同);若STUN客户端向该STUN服务器的usocket1发送Binding请求消息并且其CHANGE-REQUEST属性的LSB+1置1,LSB+2位置1,这时该STUN服务器使用usocket4向客户端返回Binding响应消息(usocket4与usocket1绑定的IP不同,端口也不同);若STUN客户端向该STUN服务器的usocket1发送Binding请求消息时不包括CHANGE-REQUEST属性或包括但其LSB+1置0,LSB+2位置0,这时该STUN服务器直接使用usocket1向客户端返回Binding响应消息。

2.2 SOURCE-ADDRESS

表示STUN服务器向STUN客户端返回Binding响应消息时实际使用的本端IP与端口号,用于判断客户是否处于多级NAT后面。

2.3 CHANGED-ADDRESS

在STUN服务器向STUN客户端返回Binding响应时,固定返回该属性,有点类似于备选STUN IP与端口的意思,实际上是STUN服务器在收到Binding请求消息时,不管该请求消息是否包含CHANGE-REQUEST属性、也不管其值如何,都假如CHANGE-REQUEST属性的LSB+1置1与LSB+2位置1,这时用于发送相应响应消息所使用的IP或端口即构成CHANGED-ADDRESS属性的值。

2.4 MAPPED-ADDRESS

STUN客户端发送Binding请求消息给STUN服务器,STUN服务器端通过recvfrom读取该请求消息的同时其第5个参数获取到的该请求消息的源地扯即为MAPPED-ADDRESS,由服务器通过Binding响应消息返回给客户端,若客户端位于NAT之后,通常是NAT设备转换后的地扯(多级NAT是从客户端至服务器方向上最后一级NAT转换后的地扯),否则是其本身地扯(是公网地扯)。

2.5 RESPONSE-ADDRESS

该属性表示STUN客户端向STUN服务器发送Binding请求后,希望服务器回复响应消息时所采用的目标IP与端口。

2.6 REFLECTED-FROM

STUN服务器收到Binding请求后,若该请求包括RESPONSE-ADDRESS,其响应必须包括REFLECTED-FROM,若前述Binding请求的完整性由UserName验证并且该UserName由Shared Secret Request这个请求所对应的响应获取,哪么REFLECTED-FROM属性的值为Shared Secret Request这个请求的源IP与源端口;若前述UserName不是由Shared Secret Request所获得的,哪么REFLECTED-FROM属性的值为获取UserName的实体的源IP或源端口;否则如果前述Binding请求不包括UserName属性,哪么REFLECTED-FROM属性的值为Binding请求的源IP与源端口。其目的是提供可追溯性,这样一个 STUN 服务器就不可能被用作拒绝服务攻击的一个反射器。

时间: 2024-08-30 04:11:56

RFC3489 STUN之客户端所处环境探测流程与部分属性含义说明的相关文章

CAS服务器集群和客户端集群环境下的单点登录和单点注销解决方案

CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户session所在的具体客户应用服务器,而不是转发到其他集群服务器上,二是解决CAS服务端集群环境下各种Ticket信息的共享. CAS集群部署 由于CAS Server是一个Web应用,因此可部署在Tomcat等容器中.直接部署CAS集群并使用负载均衡配置后,由于每次访问的CAS Server不固定,会发生通

配置ORACLE 10g或11g绿色版客户端和PLSQL环境

 本方法是通过使用ORACLE官方提供的精简版客户端,即绿色免安装的客户端. 下载地址(此处提供的是官方各版本下载地址): Windows 32位系统中使用的客户端下载地址 其他系统环境中使用的客户端下载地址 Instant client的版本很多:主要是Basic和Basic Lite. Basic版本包括了所有的支持运行OCI.OCCI.JDBC.JDBC-OCI的文件,支持多种语言. Basic Lite是Basic版本的精简版,只包括了英文的错误描述,也只支持Unicode.ASCII和

Gitlab 与 Git Windows 客户端一起使用的入门流程

我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3824934.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验. 准确来说,大部分的功能都还没有探索过,这只是暂时摸索出来的一个简单流程~ 先建个branch吧 用命令行建肯定是可以的.我采用的方法是在gitlab的web端上直接建.方法如下: 来到工程的branch列表页面 (链接是现在培训的地址,作为例子). 点击左侧的New Branch. 在Name

thrift 服务端linux C ++ 与客户端 windows python 环境配置(thrift 自带tutorial为例)

关于Thrift文档化的确是做的不好.摸索了很久才终于把跨linux与windows跨C++与python语言的配置成功完成.以下是步骤: 1)                 Linux下环境配置 l  完成thrift所依赖的其他软件包的安装:Boost.libtool.libevent.bison.flex 解压boost_1_55_0,进入boost_1_55_0目录下 chmod 777 bootstrap.sh chmod 777 ./tools/build/v2/engine/bu

Exchange 2016 客户端外网环境无法使用outlook2013/2016连接故障

组网环境: Win2012R2 ,WIN 7 ,Outlook2013\2016 SMTP01.SMTP02使用NLB虚IP,DNS是mail.xxx.com. MX为邮件网关,内外网的DNS都是mx.xxx.com. 证书包含了相关的所有主机名和域名. 客户端导入根证书,非域环境内网测试正常. ECP上将所有虚拟目录配置了外部URL地址. DNS内外网都配置了自动发现,SRV及PRT,解析及测试正常. 故障描述: 内网域外用户使用outlook2013\2016客户端能正常连接,外部网络环境异

Android 客户端设计之环境考虑

我做过两三个android客户端应用的整体设计和部分的编码,这里仅仅谈一下设计方面的故事(此乃原创2015:11:02). 做客户端设计,首先要考虑应用所在的环境,包括三方面:1 要设计的apk是在一个低内存,低运行速率,多应用共同运行(现在很多应用都在后台一直存活,不死鸟)的环境中:2 要设计的apk需要调用系统其它的数据或功能接口:3 apk置身于整体手机的运行环境中,必然手机的各种状态的变化,会对apk的运行造成影响,例如开网断网,亮屏灭屏等. 从1来考虑,必须要在设计之初,从数据流考虑a

(转)配置ORACLE 11g绿色版客户端和PLSQL环境

本文转载自:http://my.oschina.net/jang/blog/83009 本方法是通过使用ORACLE官方提供的精简版客户端,即绿色免安装的客户端. 下载地址(此处提供的是官方各版本下载地址):Windows 32位系统中使用的客户端下载地址其他系统环境中使用的客户端下载地址 Instant client的版本很多:主要是Basic和Basic Lite. Basic版本包括了所有的支持运行OCI.OCCI.JDBC.JDBC-OCI的文件,支持多种语言. Basic Lite是B

Hadoop之HDFS(客户端操作) 1.环境准备

HDFS客户端操作 1.HDFS客户端环境准备 1.根据自己电脑的操作系统拷贝对应的编译后的hadoop jar包到非中文路径(例如:D:\Develop\hadoop-2.7.2),如图所示. 图 编译后的hadoop jar包 2.配置HADOOP_HOME环境变量,如图所示. 图  配置HADOOP_HOME环境变量 3. 配置Path环境变量,如图所示. 图  配置Path环境变量 4.创建一个Maven工程HdfsClientDemo 5.导入相应的依赖坐标+日志添加 <depende

Oracle客户端配置字符集环境变量

1查询服务端字符集 指令:select userenv('language') from dual; 结果:AMERICAN_AMERICA.AL32UTF8 2配置本地环境变量 在系统变量中新加 变量名:NLS_LANG 变量值:AMERICAN_AMERICA.AL32UTF8 3重启plsql