stun协议深入解剖_第1页
stun协议深入解剖_第2页
stun协议深入解剖_第3页
stun协议深入解剖_第4页
stun协议深入解剖_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、stun协议深入解剖STUN协议的全称是Simple Traversal of User Datagram Protocol Through Network Address Translators,主要功能是检测是否位于NAT后面,如果位于NAT后面,经过NAT 转换后的地址和端口是什么,另外可以检测NAT的类型。1.NAT类型NAT的类型:全锥形NAT:所有从同一个内网IP和端口号发送过来的请求都会被映射成同一个外网IP地址和端口号。而且任何一个外网主机都可以通过这个映射的外网IP和端口号向这台内网主机发关怉。受限制锥形:它也是所有从同一个内网IP和端口号发送过来的请求都会被映射成同一个外网

2、IP和端口号。和Full-Cone NAT不同的是,一个拥有IP地址X的外网主机如果想要给内网主机发送数据包,必须是这台内网主机之前给IP地址X发送过数据包才可以。端口受限制锥形NAT:它和Restricted Cone很相似,只不过它包括端口号,也就是,一台IP地址X 和端口P的外网主机想给内网主机发送数据包,必须是这台内网主机之前给这个IP地址X和端口P发送过数据包才可以。对称NAT:对称NAT就是,所有从同一个内网IP和端口发送到一个特定的目的IP和端口的请求,都会被映射到同一个IP和端口。如果同一台主机用相同的源地址和端口号发送数据包,但是发往不同的目的地,NAT将会使用不同的映射。进

3、一步说,只有当外网主机收到内网主机发送来的数据包之后才能向内网主机往回发送数据包。2.STUN服务器STUN Binding Request使用UDP协议发送到STUN服务器,当Binding Request 消息到达服务器的时候它可能经过了一个或者多个NAT。结果是STUN服务器收到的request消息的源IP地址被映射成最靠近STUN服务器的NAT的IP地址,STUN服务器把这个源IP地址和端口号复制到一个Bind Response消息中,通过发送回拥有这个IP地址和端口号的客户端,对于上面提到的所有类型的NAT,这个消息都会到达客户端。3.如何区分不同的NAT(1)是否处于NAT后面当S

4、TUN客户端收到STUN Binding Response消息之后,它会将自己发送Request时bind的本地IP地址和端口号同Response消息中的IP地址端口号进行比较,如果不匹配,就表示客户端正处于一个或者多个NAT的前面。在Full-Cone NAT的情况下,在STUN Response消息中的IP地址和端口是属于公网的,公网上的任何主机都可以使用这个IP地址和端口号向这个应用程序发送数据包,应用程序只需要在刚才发送STUN Binding Request的IP地址和端口上监听即可。(2)是否在对称NAT后面当然,主机可能并不在一个full-core NAT的前面,实际上,它并不知

5、道自己在一个什么类型的NAT的前面。为了确定NAT的类型,客户端使用附加的STUN Binding Request.具体过程是很灵活的,但一般都会像下面这样工作。客户端再发送一个STUN Binding Request,这次发往另一个IP地址,但是使用的是跟上一次同一个源IP地址和源端口号,如果返回的数据包里面的IP地址和端口号和第一次返回的数据包中的不同,客户端就会知道它是在一个对称NAT的后面。(3)客户端如何确定自己是否在一个完全锥形NAT的后面在客户端发送的消息中,有一个标志包含了Server的另一个IP,客户端发给Server消息,Server解析消息,取出这个IP,然后Server

6、用这个IP向客户端发送消息。如能通过,则是完全锥形。如不能通过,则是受限制或端口受限。(4)客户端如何确定自己是在受限锥形NAT还是端口受限NAT在客户端发送的消息中,有一个标志包含了Server的另一个端口,客户端发给Server消息,Server解析消息,取出这个端口,然后Server用这个原IP和端口向客户端发送消息。如能通过,则是仅仅IP受限锥形。如不能通过,则是端口受限型。4.STUN消息一览STUN消息是使用大端字节流编码的TLV(type-length-value).所有的STUN消息都以一个STUN头开始,紧跟着STUN的载核数据(Payload)。Payload 是一系列的S

7、TUN属性集合,它们取决于STUN消息的类型。STUN的消息头包含了STUN message type,transation ID,and length.STUN message type 可以是Binding Request,Binding Response,Binding ERROR Response, Shared Secret Request,Shared Secrect Response或Shared Secret Error Response.Transaction ID的作用是将请求(Request)和响应(Response)联系起来。长度字段代表STUN Payload数据的整

8、个长度。Shared SecretRequests一直都是承载于TCP之上发送的(实际上,是使用了承载于TCP 这上的TLS发送的)。STUN协议也定义了很多的STUN属性。第一个是MAPPED-ADDRESS属性,它是一个IP地址和端口对,Binding Response里面一直都有它,它代表了服务器在Binding Request中看到的源IP 地址和源端口号。还有一个RESPONSE-ADDRESS属性,包含一个IP地址和端口。RESPONSE-ADDRESS可以被放到Binding Request中,它告诉服务器Binding Request将会被发送到哪里。它是可选的,当不填写的时候

9、,Binding Response 会被卧发送到Binding Request的源IP地址和源端口号。(当填写的时候,Binding Response会发送到填写的IP地址和端口)该属性使用客户端发送给其他客户端,或者客户端同服务端通信。第三个属性是CHANGE-REQUEST属性,它包含了两个flag,这两个flag控制用来发送Response的IP地址和端口号。这两个标志被称为“change IP”和“change port”标志,CHANGE-REQUEST标志只允许在Binding Request中出现,在确定客户端是在Restricted Cone NAT之前还是Port Restr

10、icted Cone NAT 之前的时候,这两个标志是很有用的。它们指示Server从不同的源地址和源端口发送Binding Response。在Binding Request中CHANGE-REQUEST属性是可选的。第四个属性是CHANGED-ADDRESS属性,它出现在Binding Response中。如果客户端请求使用”change IP”和”change port”行为,它会通知客户端将会使用的源IP地址和源端口号。第五个属性是SOURCE-ADDRESS属性,它只出现在Binding Response中,它指示发送Response的源IP地址和源端口号,它在检测两个NAT配置的时

11、候是很有用的。第六个是USERNAME,它只在Shared Secret Response中出现,忽略了第七个属性是ERROR-CODE属性,它出现在Binding Error Response和Shared Secret Error Response中,它指出发生的错误。忽略了三四个属性.消息头:所有的STUN消息都包含20个字节的消息头:012301234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|STUN Message Type|Message

12、Length|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Transaction ID+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|+-+-+-+-+-+-+-+-+

13、-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Message Type可以取下面这些值:00001:Binding Request00101:Binding Response00111:Binding Error Response00002:Shared Secret Request00102:Shared Secret Response00112:Shared Secret Error ResponseMessage Length是载核数据的字节长度,不包含消息头的长度。Transaction ID是一个128位的标识符,可以随机生成。消息属

14、性STUN消息头后面跟着0个或多个属性,所有的属性都是TLV形式的,包含16位的类型,16位的长度,和变长的值。012301234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Type|Length|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Value.+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

15、+-+-+-+下面是类型的定义:00001:MAPPED-ADDRESS00002:RESPONSE-ADDRESS00003:CHANGE-REQUEST00004:SOURCE-ADDRESS00005:CHANGED-ADDRESS00006:USERNAME00007:PASSWORD00008:MESSAGE-INTEGRITY00009:ERROR-CODE0000a:UNKNOWN-ATTRIBUTES0000b:REFLECTED-FROMMAPPED-ADDRESS这个属性表示映射的IP地址和端口。012301234567890123456789012345678901+-+

16、-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|x x x x x x x x|Family|Port|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Address|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Family一般都是001,表示IPV4RESPONSE-ADDRESS这个属性的数据包形式跟MAPPED-ADDRESS相同。其它的就不

17、列出来了,具体去看rfc就好了5STUN实际中如何用呢?(如何通过STUN的消息辨别端口类型)这里讲了一个例子。实例1:ClientA发送了一个Binding Request到server,在CHANGE-REQUEST属性中没有设置任何标志,并且没有RESPONSE-ADDRESS标志。那么server将response发到ClientA的源IP端口对。如果Client收不到Binding Response,那么UDP不能连接。如果收到消息,那么Client 赶紧检查Binding Response的MAPPED-ADDRESS属性,如果端口和IP跟似有网络的IP 和端口一样,那么Clien

18、t知道他没有在NAT后,否则在NAT的后面。实例2:ClientA发送了一个Binding Request到server,在CHANGE-REQUEST属性中设置了changeIP和change port标志。那么server用changeIP和change port标志指示的端口和地址将response发到ClientA的源IP端口对。如果收到收到请求,那么可以确定是在一个全双工锥形NAT前。否则,是其他情况。如果没有收到response,我们再进行实例1,如果这一次收到的response中的MAPPED-ADDRESS属性中得IP和端口与进行第一次实例1中获得的response中的MAPPED-ADDRESS属性中得IP和端口不一致。则我

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论