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之客户端所处环境探测流程与部分属性含义说明的更多相关文章

  1. 大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建

    大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建 大数据应用之Windows平台Hbase客户端Eclipse环境搭建-Java版 作者:张子良 版权所有,转载请注明出处 引子 ...

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

    CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户sessio ...

  3. cocos2d-x 3.11 游戏开发环境搭建流程

    cocos2d-x 3.11.1 游戏开发环境搭建流程 1. 准备下面的软件 1) Windows7 64Bit+ VS2013 (VC++) 这个不用多说. 2) cocos2d-x-3.11.1. ...

  4. Grunt搭建自动化web前端开发环境--完整流程

    Grunt搭建自动化web前端开发环境-完整流程 jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前 ...

  5. 联盟链初识以及Fabric环境搭建流程

    这篇文章首先简单介绍了联盟链是什么,再详细的介绍了Fabric环境搭建的整个流程. 区块链分类: 以参与方式分类,区块链可以分为:公有链.联盟链和私有链. 定义: 我们知道区块链就是一个分布式的,去中 ...

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

    关于Thrift文档化的确是做的不好.摸索了很久才终于把跨linux与windows跨C++与python语言的配置成功完成.以下是步骤: 1)                 Linux下环境配置 ...

  7. Android 客户端设计之环境考虑

    我做过两三个android客户端应用的整体设计和部分的编码,这里仅仅谈一下设计方面的故事(此乃原创2015:11:02). 做客户端设计,首先要考虑应用所在的环境,包括三方面:1 要设计的apk是在一 ...

  8. linux下svn客户端安装及环境配置(转)

    一.    源文件编译安装.源文件共两个,为: 1.   下载subversion源文件 subversion-1.6.1.tar.gz http://d136.d.iask.com/fs/800/1 ...

  9. LDAP客户端在Windows环境的部署及配置

    ldap客户端配置安装目录的子目录C:\OpenLDAP\etc\openldap,编辑slapd.conf,修改密码,保存并关闭文件.rootdn           "cn=Manage ...

随机推荐

  1. vector,list,deque

    stl提供了三个最基本的容器:vector,list,deque. vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由 ...

  2. SQL中游标的使用--遍历数据逐行更新或删除:相当于for循环

    --------------------------------------例子1 单纯的游标-------------------------------- create TABLE Table1 ...

  3. centos 日常操作指令

    ls  ls -li 查看当前目录下所有目录 ls -al 查看当前目录下所有目录包括隐藏文件 CD  cd 目录 跳转指定目录 cd ..返回上级目录 cd / 返回根目录 VI  1. 使用vi进 ...

  4. Windows Search Service

    Windows Search Service是一个全方位的托管云服务,可以允许开发者通过.Net SDK或者REST API多种多样的搜索服务. 如果你想开发一个搜索服务,那么你的服务应该包含以下组件 ...

  5. SweetTips: 快意灵动的Android提示库!

    此文章是我在简书的文章,自行搬到博客园.简书地址:SweetTips: 快意灵动的Android提示库! 源码及所在DEMO已上传至GitHub:SweetTips,欢迎大家提Bug,喜欢的话记得St ...

  6. Oralce生成前N年的年数据

    今天做一个统计报表的时候正好碰到这个问题,原来,一般是通过后台代码来生成.现在直接通过oracle来生成,记录一下. 方法一: SELECT YEAR FROM ( , UNION SELECT TO ...

  7. sql server 查询出的结果集,拼接某一列赋值给一个变量

    现有表Area 如下: SELECT [Areaid] ,[Areaname] ,[Areapid] FROM [Northwind].[dbo].[Area] 查询结果如下图: 需求:用 “-“ ” ...

  8. WEB服务器:Apache、Tomcat、JBoss、WebLogic、Websphere、IIS的区别与关系

    1)Apache  免费,世界使用排名第一的Web服务器.它可以运行在几乎所有广泛使用的计算机平台上.Apache的特点是简单.速度快.性能稳定,并可做代理服务器来使用.Apache是以进程为基础的结 ...

  9. 利用poi向excle写入数据

    import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import org ...

  10. [妙味Ajax]第三课:AJAX跨域解决方案:JSONP

    知识点总结: JSONP(JSON with Padding): 1.script标签 2.用script标签加载资源是没有跨域问题的 在资源加载进来之前定义好一个函数,这个函数接收一个参数(数据), ...