STUN详解

STUN详解STUN是一个简单的客户端-服务器协议。客户端发送一个请求到一台服务器,而服务器返回一个响应。有两种类型的请求:绑定请求(通过UDP发送)和共享密钥请求(发送TLS(通过TCP))。共享秘密请求服务器返回一个临时的用户名和密码。此用户名和密码用于在随后的绑定请求和绑定响应,身份验证和消息完整性的目的。STUN客户和STUN服务器之间可能有一个或多个NAT。

大家好,又见面了,我是你们的朋友全栈君。

STUN是一个简单的客户端 – 服务器协议。客户端发送一个请求到一台服务器,而服务器返回一个响应。

有两种类型的请求:

绑定请求(通过UDP发送)和共享密钥请求(发送TLS (通过TCP)) 。

共享秘密请求服务器返回一个临时的用户名和密码。此用户名和密码用于在随后的绑定请求和绑定响应,身份验证和消息完整性的目的。

STUN客户和STUN服务器之间可能有一个或多个NAT 。其结果是,由服务器接收该请求的源地址将通过在NAT最接近服务器创建的映射地址。

STUN服务器复制该源IP地址和端口到一个STUN绑定响应,并将其发送回源IP地址和端口

的STUN请求。对于所有类型的NAT,这种响应都将能够到达STUN客户。

一个STUN服务器必须准备接收绑定请求在四个

地址/端口组合:(A1, P1 ),(A2 ,P1) , (A1, P2)和(A2 ,

P2)。 

( A1 , P1)表示主地址和端口,而这些都是通过下面的客户端发现程序中获得的值。

通常情况下, P1的端口是3478 (默认的STUN端口)。 A2和P2是任意的。 A2和P2都通过CHANGED – ADDRESS属性告诉客户端的,如下所述。

一旦建立套接字,客户端发送绑定请求。可靠性通过客户端重传完成的。客户应在100ms的时间间隔仍未收到响应后开始重传请求,第二次在200ms的时间间隔仍未收到响应则开始重传,每次等待重传增加一倍的时间,直到时间间隔达到1.6秒。重传继续以1.6秒的间隔,直到收到响应,或总共9个请求已被发送。如果最后一个请求已发送1.6秒钟后仍未收到响应,客户应考虑该链接已经失败。换句话说,请求将在时间0毫秒, 100毫秒, 300毫秒, 700毫秒, 1500毫秒, 3100ms,4700ms , 6300ms和7900ms发送 。在9500ms如果没有收到响应客户认为请求已经失败。

以下是stun过程解析:​

test1:

客户端发送一个STUN绑定请求到服务器,在属性CHANGE-REQUEST中在不设置任何标志,并且没有 RESPONSE-ADDRESS属性。这会导致服务器会从接收请求的的地址和端口发送响应返回给客户端。

test2:

客户端发送一个带有同时设置“改变IP”和“改变端口” 的CHANGE-REQUEST属性的绑定请求

test3:

客户端发送一个带有设置“改变端口” 的CHANGE-REQUEST属性的绑定请求

STUN详解

############################################################

​完全NAT(full-cone NAT): test1(MAPPED-ADDRESS属性里的IP和端口与本地IP地址、端口不同)->test2(收到响应)

​对称NAT(symmetric NAT): test1(收到响应)->(向另一IP端口)test1(收到响应但响应里面的 MAPPED-ADDRESS 属性里的IP和端口与第一次的不一样)

IP受限NAT: 判断完对称NAT之后->test3(收到响应)

端口受限NAT: 判断完对称NAT之后->test3(没有收到响应)

#############################################################

客户端首先发起第一次test1,如果这个测试没有响应,客户端知道了,这个网络是不能够运行UDP协议的连接。如果测试产生了一个响应,客户端检查响应的MAPPED-ADDRESS属性 。如果这个地址、端口和本地IP地址、端口是相同的,客户端知道它不是在NAT后面了。

然后它执行的测试二。如果收到一个响应,客户端知道它有开放互联网(或者,至少在一个有一个防火墙其行为像全锥型NAT ,但是没有转发) 。如果没有响应被接收时,客户端知道它的对称的UDP防火墙后面(主机出口处没有NAT设备,但有防火墙,且防火墙规则如下:从主机UDP端口A发出的数据包保持源地址,但只有从之前该主机发出包的目的IP/PORT发出到该主机端口A的包才能通过防火墙.)。

第一次test1中如果MAPPED-ADDRESS属性里的IP和端口与本地IP地址、端口不同,  

客户端知道自己在NAT后面,他再执行test2如果这个响应被收到了则客户端位于

 full-cone NAT(全锥形NAT),如果没有收到响应,客户端将继续执行第二次test1,但是这次这样做:绑定请求发向的地址不再是之前的地址而是第一次test1的响应中CHANGED-ADDRESS 属性里的IP地址和端口。

如果这次收到的响应里面的 MAPPED-ADDRESS 属性里的IP和端口与第一次的不一样,那么客户端就是在symmetric NAT(对称NAT)后面,如果这个地址是一样的那么客户端要么是在限制NAT之后要么是在端口受限NAT之后,要决定具体在那个NAT之后要进行test3,如果收到响应在是在受限NAT之后,如果没有响应收到的,其背后的一个端口受限NAT 。

在多个NAT之后的情况客户机与因特网之间,该类型被发现会是在客户机和之间最严格的NAT的类型互联网。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160514.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • AVI视频文件编码格式不受支持0xc00d5212怎么解决?「建议收藏」

    AVI视频文件编码格式不受支持0xc00d5212怎么解决?「建议收藏」AVI视频格式的优点是图像质量好,但最普遍的现象就是高版本Windows媒体播放器播放不了采用早期编码编辑的AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格式视频。所以我们在进行一些AVI格式的视频播放时,常会出现由于视频编码问题而造成的视频不能播放或即使能够播放,但存在不能调节播放进度和播放时只有声音没有图像等一些莫名其妙的问题。今天来讲讲编码格式不受…

    2022年9月30日
    0
  • 堆糖网热门图片下载[通俗易懂]

    堆糖网热门图片下载[通俗易懂]下载目标是堆糖网热门图片,打开网页并下拉发现图片是通过ajax加载的,按F12打开开发者工具选择nerwork并筛选xhr,继续下拉网页找到ajax请求的api,如下图所示然后就可以构造请求获取包含

    2022年7月2日
    27
  • apk反编译后smali文件_apk反编译失败

    apk反编译后smali文件_apk反编译失败APK反编译之一:基础知识原文作者:lpohvbe| http://blog.csdn.net/lpohvbe/article/details/7981386APK、Dalvik字节码和smali文件APK文件  大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR

    2022年9月2日
    0
  • IntelliJ IDEA输出打印System.out.println()的快捷键[通俗易懂]

    IntelliJ IDEA输出打印System.out.println()的快捷键[通俗易懂]在eclipse中习惯了使用syso,开始用idea很不习惯。在idea中直接输入sout,自动出现提示,不像eclipse中那样还要alt+/,这算是idea的一个优点了。sout看图:按Tab或Enter都可以出现…

    2022年10月2日
    0
  • read函数的用法

    read函数的用法原文出自:https://blog.csdn.net/zbk840901528/article/details/7849644非常感谢网友的分享,对本人很有帮助,谢谢!!!read的用法read函数可以读取文件。读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。使用格式如下:number=read(handle,buff…

    2022年6月22日
    297
  • ideamaven仓库设置_搭建maven仓库

    ideamaven仓库设置_搭建maven仓库1、Maven下载在maven官网下载maven安装:http://maven.apache.org/download.cgi下载之后解压到安装路径:完成安装。2、Maven本地仓库配置在本地新建本地仓库文件夹,替代默认新建在系统盘的仓库地址,因为随着时间,仓库会越来越大,所以建议自己新建一个本地仓库:Maven远程库也是位于网络上的存储库。因为maven在获取需要的jar包时会首先从本地仓库获取,当本地仓库不存在需要的jar包时会从setting.xml的…

    2022年9月23日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号