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. 6.MyBaits的分页和缓存查询

    1. 创建javaweb项目MyBaits_Page_CaChe 2.在项目的WebRoot下的WEB-INF下的lib文件下加入jar文件 log4j-1.2.17.jar mybatis-3.2. ...

  2. MySQL数据库安装(CentOS操作系统/tar.gz方式)

    1. 上传Mysql安装包“mysql-5.5.40-linux2.6-x86_64.tar.gz”到部署机,位置任意: 2. 将Mysql安装包解压到其所在目录,命令如下: -linux2.-x86 ...

  3. 四大高质量且实用的chrome翻译插件推荐

    Google英译汉的质量怎么样?日常生活用语翻译还可以,但是一到专业性术语就歇菜了,翻译出来的东西简直就是惨不忍睹,惨绝人寰..对于酷爱英语学习又有强迫症的患者来说,一款既实用又方便,无疑就是雪中送炭 ...

  4. spring mvc 实现文件上传下载

    /** * 文件上传 * @param pictureFile */ @RequestMapping("/reportupload") public ResponseInfo up ...

  5. 三大框架之hibernate

    在DB Browser视图里新建一个数据库连接 Connection URL可填  jdbc:oracle:thin:@localhost:1521:orcl 或  jdbc:oracle:thin: ...

  6. Spring mail 邮件发送的简单实现

    package cn.taskSys.utils; import java.util.Properties; import org.springframework.mail.MailException ...

  7. read/sysread区别

    use warnings; use strict; my $readbuff; my $sysreadbuff; ); print "read get:$readbuff\n"; ...

  8. jqgrid参数

    jqGrid参数 名称 类型 描述 默认值 可修改 url string 获取数据的地址 datatype string 从服务器端返回的数据类型,默认xml.可选类型:xml,local,json, ...

  9. Java AOP - Aspectj

    1. 序 Aspect Oriented Programming (AOP)是近来一个比较热门的话题. AspectJ是AOP的Java语言的实现,获得了Java程序员的广泛关注. 关于AspectJ ...

  10. 【🉐】 彻底理解webservice SOAP WSDL

    原文: http://wenku.baidu.com/view/f87b55f19e31433239689314.html WebServices简介 先给出一个概念 SOA ,即Service Or ...