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
个地扯对,每个地扯对创建一个UDP socket。
位无符号整数,其LSB+1位表示是否更改响应消息的源端口不同于相应请求的目的端口、其LSB+2位表示是否更改响应消息的源IP不同于相应请求的目的IP。
个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 服务器就不可能被用作拒绝服务攻击的一个反射器。
RFC3489 STUN之客户端所处环境探测流程与部分属性含义说明的更多相关文章
- 大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建
大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建 大数据应用之Windows平台Hbase客户端Eclipse环境搭建-Java版 作者:张子良 版权所有,转载请注明出处 引子 ...
- CAS服务器集群和客户端集群环境下的单点登录和单点注销解决方案
CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户sessio ...
- cocos2d-x 3.11 游戏开发环境搭建流程
cocos2d-x 3.11.1 游戏开发环境搭建流程 1. 准备下面的软件 1) Windows7 64Bit+ VS2013 (VC++) 这个不用多说. 2) cocos2d-x-3.11.1. ...
- Grunt搭建自动化web前端开发环境--完整流程
Grunt搭建自动化web前端开发环境-完整流程 jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前 ...
- 联盟链初识以及Fabric环境搭建流程
这篇文章首先简单介绍了联盟链是什么,再详细的介绍了Fabric环境搭建的整个流程. 区块链分类: 以参与方式分类,区块链可以分为:公有链.联盟链和私有链. 定义: 我们知道区块链就是一个分布式的,去中 ...
- thrift 服务端linux C ++ 与客户端 windows python 环境配置(thrift 自带tutorial为例)
关于Thrift文档化的确是做的不好.摸索了很久才终于把跨linux与windows跨C++与python语言的配置成功完成.以下是步骤: 1) Linux下环境配置 ...
- Android 客户端设计之环境考虑
我做过两三个android客户端应用的整体设计和部分的编码,这里仅仅谈一下设计方面的故事(此乃原创2015:11:02). 做客户端设计,首先要考虑应用所在的环境,包括三方面:1 要设计的apk是在一 ...
- linux下svn客户端安装及环境配置(转)
一. 源文件编译安装.源文件共两个,为: 1. 下载subversion源文件 subversion-1.6.1.tar.gz http://d136.d.iask.com/fs/800/1 ...
- LDAP客户端在Windows环境的部署及配置
ldap客户端配置安装目录的子目录C:\OpenLDAP\etc\openldap,编辑slapd.conf,修改密码,保存并关闭文件.rootdn "cn=Manage ...
随机推荐
- Signal and Slots
Signal and Slots 用于对象之间通信. 它是 Qt 的核心特性之一, 并且也是Qt 与其它框架差别最大的部分. 概述 在GUI编程中, 如果我们改变了一个控件, 我们可能想其它控件知道: ...
- Python学习笔记——基础篇【第五周】——os模块和sys模块
OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录 ...
- java 调用打印机 打印服务
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import javax ...
- 安装PHP
'./configure' '--prefix=/usr/local/php5.6.21' '--with-config-file-path=/usr/local/php5.6.21/etc' '-- ...
- 仿简书分享:UIActivityViewController系统原生分享
接下来介绍UIActivityViewController: 1. 创建要分享的数据内容,加在一个数组 ActivityItems里. NSString *textToShare = @"我 ...
- 非常不错的MySQL优化的8条经验
1.选取最适用的字段属性 MySQL 可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度 ...
- JAVA中数组总结(课堂总结)
数组的特点: Arrays(数组)一种简单的数据结构元素具有相同的数据类型一旦创建之后,尺寸保持不变元素在内存中连续分布例子一:按引用与按值传递的示例源代码: // PassArray.java // ...
- LoadRunner参数值定义-摘自一米阳光
深入解析LoadRunner下的参数化取值 熟悉LoadRunner的人,相信都会经常使用参数化功能,但是对于参数化的使用到底了解多少,就值得深思了.包括本人在内也是,每次在做压力测试的时候,基本 ...
- Android Studio环境下代码混淆+签名打包
Android Studio环境下代码混淆+签名打包 作者 Mr_冯先生 关注 2016.08.21 01:10 字数 1040 阅读 734评论 5喜欢 34 注:本文使用的Android Stud ...
- phpQuery 无法解析 html 结构
有时候解析一段 HTML 代码时 phpQuery 无法解析原因: 可能是缺少类似下面的 meta 信息,在带解析的字符串任意位置添上即可 : <meta http-equiv="Co ...