stun 协议 NAT 穿透方法简介
STUN是RFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NAT的IP和端口。毫无疑问的,它对穿越早期的NAT起了巨大的作用,并且还将继续在NAT穿透中占有一席之地。
STUN的探测过程需要有一个公网IP的STUN server,在NAT后面的UAC必须和此server配合,互相之间发送若干个UDP数据包。UDP包中包含有UAC需要了解的信息,比如NAT外网IP,PORT等等。UAC通过是否得到这个UDP包和包中的数据判断自己的NAT类型。
假设有如下UAC(B),NAT(A),SERVER(C),UAC的IP为IPB,NAT的IP为 IPA ,SERVER的 IP为IPC1 、IPC2。请注意,服务器C有两个IP,后面你会理解为什么需要两个IP。
(1)NAT的探测过程
STEP1:B向C的IPC1的port1端口发送一个UDP包。C收到这个包后,会把它收到包的源IP和port写到UDP包中,然后把此包通过IP1C和port1发还给B。这个IP和port也就是NAT的外网IP和port,也就是说你在STEP1中就得到了NAT的外网IP。
熟悉NAT工作原理的朋友可以知道,C返回给B的这个UDP包B一定收到(如果你不知道,去读下我的其它文章)。如果在你的应用中,向一个STUN服务器发送数据包后,你没有收到STUN的任何回应包,那只有两种可能:1、STUN服务器不存在,或者你弄错了port。2、你的NAT设备拒绝一切UDP包从外部向内部通过(不支持cone NAT)。
当B收到此UDP后,把此UDP中的IP和自己的IP做比较,如果是一样的,就说明自己是在公网,下步NAT将去探测防火墙类型,我不想多说。如果不一样,说明有NAT的存在,系统进行STEP2的操作。
STEP2:B向C的IPC1发送一个UDP包,请求C通过另外一个IPC2和PORT(不同与SETP1的IP1)向B返回一个UDP数据包(现在知道为什么C要有两个IP了吧,为了检测cone NAT的类型)。
我们来分析一下,如果B收到了这个数据包,那说明什么?说明NAT来着不拒,不对数据包进行任何过滤,这也就是STUN标准中的full cone NAT。遗憾的是,full cone nat太少了,这也意味着你能收到这个数据包的可能性不大。如果没收到,那么系统进行STEP3的操作。
STEP3:B向C的IPC2的port2发送一个数据包,C收到数据包后,把它收到包的源IP和port写到UDP包中,然后通过自己的IPC2和port2把此包发还给B。
和step1一样,B肯定能收到这个回应UDP包。此包中的port是我们最关心的数据,下面我们来分析:
如果这个port和step1中的port一样,那么可以肯定这个NAT是个CONE NAT,否则是对称NAT。道理很简单:根据对称NAT的规则,当目的地址的IP和port有任何一个改变,那么NAT都会重新分配一个port使用,而在step3中,和step1对应,我们改变了IP和port。因此,如果是对称NAT,那这两个port肯定是不同的。
如果在你的应用中,到此步的时候PORT是不同的,恭喜你,你的STUN已经死了。如果不同,那么只剩下了restrict cone 和port restrict cone。系统用step4探测是是那一种。
STEP4:B向C的IP2的一个端口PD发送一个数据请求包,要求C用IP2和不同于PD的port返回一个数据包给B。
我们来分析结果:如果B收到了,那也就意味着只要IP相同,即使port不同,NAT也允许UDP包通过。显然这是restrict cone NAT。如果没收到,没别的好说,port restrict NAT.
(2)SIP怎么使用STUN
个人认为这是个很不值得提的问题,不过有许多人问我,还是简要提一下。其实这是个很简单的问题,SIP通过STUN得到NAT的外网IP和SIP的信令监听端口的外网port,替换SIP注册包中的contact头中的IP和port,然后注册。这样就可以确保当有人呼叫你的的时候注册服务器能找到你。需要提醒你的是,NAT发现一个连接超过一段时间后没有活动,它就会关闭这个影射,因此你必须间隔一端时间发送一个数据包出去以keep alive。
另外,当你要和别人建立RTP通讯的时候,不要忘记把你的SDP中的IP和PORT改成公网IP和PORT。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
stun协议的作用
STUN协议的全称是Simple Traversal of User Datagram Protocol Through Network Address Translators,主要功能是检测是否位于NAT后面,如果位于NAT后面,经过NAT转换后的地址和端口是什么,另外可以检测NAT的类型。
基本思想
在私网内部安装一个STUN client,在公网上安装一个STUN Server,STUN协议定义了一些消息格式,大体上分成Request/Response,client向server发送request,server发送response给client。如何检测STUN client是否在NAT后面呢?原理很简单,Server在收到client的UDP包以后,Server将接收到该包的地址和端口利用udp传回来给client,client把这些地址和端口与本机的ip地址和端口进行比较,如果不同,说明在NAT后面,否则就位于NAT后面。为了检测不同类型的NAT,STUN协议定义了一些消息属性,要求Server有不同的动作,比如发送响应的时候使用不同的IP地址和端口,或者改变端口等等。STUN协议对NAT可能有效,但是对防火墙就无能为力了,因为防火墙可能不会打开UDP端口。
NAT分类
STUN协议将NAT粗略分为4种类型,即Full Cone、Restricted Cone、Port Restricted Cone和Symmetric。举个实际例子来说明这四种NAT的区别:
A机器在私网(192.168.0.4)
NAT服务器(210.21.12.140)
B机器在公网(210.15.27.166)
C机器在公网(210.15.27.140)
现在,A机器连接过B机器,假设是 A(192.168.0.4:5000)-> NAT(转换后210.21.12.140:8000)-> B(210.15.27.166:2000)。
同时A从来没有和C通信过。
则对于不同类型的NAT,有下列不同的结果:
Full Cone NAT:C发数据到210.21.12.140:8000,NAT会将数据包送到A(192.168.0.4:5000)。因为NAT上已经有了192.168.0.4:5000到210.21.12.140:8000的映射。
Restricted Cone:C无法和A通信,因为A从来没有和C通信过,NAT将拒绝C试图与A连接的动作。但B可以通过210.21.12.140:8000与A的 192.168.0.4:5000通信,且这里B可以使用任何端口与A通信。如:210.15.27.166:2001 -> 210.21.12.140:8000,NAT会送到A的5000端口上。
Port Restricted Cone:C无法与A通信,因为A从来没有和C通信过。而B也只能用它的210.15.27.166:2000与A的192.168.0.4:5000通信,因为A也从来没有和B的其他端口通信过。该类型NAT是端口受限的。
Symmetric NAT:上面3种类型,统称为Cone NAT,有一个共同点:只要是从同一个内部地址和端口出来的包,NAT都将它转换成同一个外部地址和端口。但是Symmetric有点不同,具体表现在:只要是从同一个内部地址和端口出来,且到同一个外部目标地址和端口,则NAT也都将它转换成同一个外部地址和端口。但如果从同一个内部地址和端口出来,是到另一个外部目标地址和端口,则NAT将使用不同的映射,转换成不同的端口(外部地址只有一个,故不变)。而且和Port Restricted Cone一样,只有曾经收到过内部地址发来包的外部地址,才能通过NAT映射后的地址向该内部地址发包。
现针对Symmetric NAT举例说明:
A机器连接过B机器,假使是 A(192.168.0.4:5000)-> NAT(转换后210.21.12.140:8000)-> B(210.15.27.166:2000)
如果此时A机器(192.168.0.4:5000)还想连接C机器(210.15.27.140:2000),则NAT上产生一个新的映射,对应的转换可能为A(192.168.0.4:5000)-> NAT(转换后210.21.12.140:8001)-> C(210.15.27.140:2000)。此时,B只能用它的210.15.27.166:2000通过NAT的210.21.12.140: 8000与A的192.168.0.4:5000通信, C也只能用它的210.15.27.140:2000通过NAT的210.21.12.140:8001与A的192.168.0.4:5000通信,而 B或者C的其他端口则均不能和A的192.168.0.4:5000通信。
下面对SIP协议产生NAT穿透问题,作一些解释;及提出解决的办法。
1、大致有4种类型的NAT。
a) Full Cone 完全圆锥体
b) restricted cone 受限制的圆锥体
c) port restricted 端口受限制的圆锥体
d) symmetric 对称的
其中a,b,c 也称作非对称的NAT。
2、SIP终端在NAT后面,其工作有可能出现问题。原因是SIP信令走的路径,和媒体流走的路径不一样。
3、Full Cone 完全圆锥体NAT
因特网上的任何PC,可以发送数据包到IP:port对;而NAT将这个IP:port对(公网 上的)映射到内网的IP:port对(私有网络的)。
4、restricted cone 受限制的圆锥体NAT
NAT外面的PC,只有那些内网中已有PC与之联系过的PC,才能通过这个映射 进来。例如,我通过内网的一台机器,IP 地址是10.1.1.1:123,与PC(a)联系,则PC(a)也可以通过这个NAT的映射,联系到我。而PC(b)则不行。
10.1.1.1:123 —NAT —> 202.70.65.78:10000 ——pc(a)
如果pc(b)也发送数据到 202.70.65.78:10000,则不会有数据送到10.1.1.1:123。
补充说明:
如果我也联系过pc(b),则pc(b)也可以进来了。
10.1.1.1:123 —NAT —> 202.70.65.78:10000 ——pc(b)
如果pc(b)也发送数据到202.70.65.78:10000,则数据送到 10.1.1.1:123。
5、port restricted 端口受限制的圆锥体NAT
除了4的条件外,即不但要检测pc(a)的源IP地址,还要检测其端口是否 与前面也一样。
10.1.1.1:123 —>NAT—->202.70.65.78:10000 —–> pc(a)[213.123.324.34:8000]
这个NAT只会接收从IP地址 213.123.324.34 且端口为 8000来的数据,让进入到10.1.1.1:123。
6、对称的NAT 这是关系描述最简单的一个
10.1.1.1:1000 —-NAT —–> 200.123.123.34:1234 —-pc(a)
10.1.1.1:1000 —-NAT —–> 200.123.123.34:2222—-pc(b)
这种NAT的IP:port对,对每个外部的程序,都是不同的。因而每一个外部的程 序,都有自己的映射(NAT分配的IP:port对)。而前面的三种,多个外部程序,可能共用一个NAT的IP:port对。
7、RTP的问题
在RTP的消息正文内,有UA能够成功通信所需要的一些信息。这种消息正文,就叫做SDP消息。
问题在于,SIP终端(UA)可能对NAT一无所知。因而在SDP中包含的IP地址,通常使用内部的IP地址,也就是SIP终端知道的IP。这样, 当通信的对方想与SIP终端通信时,就查看SDP消息中的IP地址,但是什么也没有得到,因为这里使用的是内部IP地址。
下面举个例子说明:
INVITE sip:040600@192.168.20.2:5060 SIP/2.0.
Record-Route: <sip:143.248.130.35;ftag=3a7ceb24a6ac50c4;lr=on>.
Via: SIP/2.0/UDP 143.248.130.35;branch=z9hG4bK758e.976609c7.0.
Via: SIP/2.0/UDP
192.168.20.3;rport=1024;received=223.178.140.109;branch=z9hG4bK34efcab2403aa20d.
From: "Iqbal" <sip:040618@sip.dom.com>;tag=3a7ceb24a6ac50c4.
To: <sip:040600@sip.dom.com>.
Contact: <sip:040618@223.178.140.109:1024>.
Supported: replaces.
Call-ID: 7f2c327896a5b0e1@192.168.20.3.
CSeq: 8717 INVITE.
User-Agent: Grandstream HT487 1.0.5.18.
Max-Forwards: 16.
Allow: IN
VITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE.
Content-Type: application/sdp.
Content-Length: 343.
.
v=0.
o=040618 8000 1 IN IP4 192.168.20.3.
s=SIP Call.
c=IN IP4 192.168.20.3.
t=0 0.
m=audio 38660 RTP/AVP 0 8 4 18 2 15 99.
a=sendrecv.
a=rtpmap:0 PCMU/8000/3.
a=rtpmap:8 PCMA/8000/3.
SIP消息的标题头,类似于邮件的标题头。从后往前看,从From行开始,看到第一个Via行,这是SIP终端自己认为的IP地址,例如 192.168.20.3。但是SIP代理服务器是聪明的,它知道这个消息是从哪里发过来的,它添加了rport和接收到的标志:
Via: SIP/2.0/UDP
192.168.20.3;rport=1024;received=223.178.140.109;branch=z9hG4bK34efcab2403aa20d.
也就是说,SIP代理服务器,知道发消息的SIP终端的公网地址是223.178.140.109:1024。
这样,SIP代理服务器是可 以与SIP终端通信的,因为它知道SIP终端的公网地址。
但是,可怜的老式的RTP被阻塞了,因为它的标题头如下:
v=0.
o=040618 8000 1 IN IP4 192.168.20.3.
s=SIP Call.
c=IN IP4 192.168.20.3.
t=0 0.
m=audio 38660 RTP/AVP 0 8 4 18 2 15 99.
a=sendrecv.
a=rtpmap:0 PCMU/8000/3.
a=rtpmap:8 PCMA/8000/3.
SIP终端期望从端口 port m=38660 且IP地址IP c= 192.168.20.3来接收RTP数据,而这个192.168.20.3:38660,就是通信的对方试图发RTP数据的目的地址。
这就是SIP电话振铃总是能够听到,而接起来却没有声音的原因。
8 解决办法 告诉SIP终端,不要如此傻地工作,而要想办法知道NAT分配给自己的端口映射。
并将公网的IP地址:端口放到SDP消息中。这样,SIP终端就问NAT….。或者是问公网的某个服务器,NAT分配给自己的映射是什么。
9 问NAT。 这种办法就是使用UPnP协议,另外去参见UPnP的资料。
10 问公网上的某个服务器。 如STUN服务器。
SIP终端发送一个探测数据包,到公网上的服务器。公网上的服务器会发回数据包,会包含 有关NAT的详细信息。有了这些信息,SIP终端就会知道它是否在NAT后面。这种探测方法,可以用于上面4种NAT,都有效。例如SIP终端从 10.1.1.1:1000发送一个数据包,则SDP消息中包含的是m=1000 and c=10.1.1.1。但是,如果SIP终端先进行NAT探测,则会知道NAT会分配公网的IP:端口是212.134.123.23:12345。则 SIP终端直接在SDP消息写m=12345,c=212.134.123.23。
产生的问题 因为NAT的端口分配是动态的,因而有可能会改变。这样,在发送了NAT探测消息后,要很快地发送出SIP消息。而且,SIP终端发送数据的端口和接收数 据的端口要是一样的。
注意受限制的圆锥体(包括端口受限制的圆锥体)NAT,它不让回来的消息进来,除非SIP终端先发了一个数据包给它。因而,SIP终端需要先发一个 数据包给对方。这样以后对方来的数据,就可以进入NAT内部了(不过,不需要为这个操作担心,有办法的)。
上面的办法在对称的NAT后面,不能够工作。因为,对称的NAT,它在分配给SIP终端外部的IP:port时,每次都变化(不同的对方不一样)。 也就是SIP终端在探测NAT时,得到的IP:port,与它后来发SIP消息时,分配的IP:port不一样。这样,对方来的语音数据就进不来,因为对 方得不到正确的IP:port。
11、上面描述的过程,其实就是采用STUN协议时,解决问题的过程。就是SIP终端向STUN服务器发探测NAT的数据包。
12、对称的NAT 解决办法 就是在公网上放一个中转语音流的服务器。这个中转语音流的服务器有时就是一个Out Bound proxy。注意,这个中转语音流的服务器,可能会成为瓶颈。由于语音要经过中转语音流的服务器,所以路径增长了,音质会变差。所以,对称的NAT,要 SIP能够工作,总之是个麻烦。
不过,目前大多数的NAT,都可以做“虚拟服务器的端口转发”,即将SIP工作需要的端口转发到SIP终端上去。如果在NAT设备上,做了“虚拟服 务器的端口转发”,则NAT会保留SIP工作需要的端口,专用于SIP终端,这样SIP终端就相当于是在一个Full Cone完全圆锥体的NAT后面,SIP用STUN工作没有问题。SIP终端需要的端口数是这样确定的,一个端口用于SIP信令,比如5060。RTP端 口的数量,取决于通话的路数。一路通话需要2个RTP端口。每增加一路通话,则需要多2个端口。
只支持一路通话的SIP话机,需要NAT映射3个 端口。
前面三种的NAT,可统称为非对称的NAT。非对称的NAT,都可以用STUN协议穿过NAT。
将对称的NAT,通过端口转发的方式,变为完全圆锥体的NAT,是解决NAT问题的最好办法。首先应当用这种办法来解决。没有办法映射端口,再想其 它的办法。当然,建议大家不要买那种不能够映射端口的宽带路由器,那样的路由器太差了。
===================================================================================
2. 案例
2.1. asterisk作为服务器,在nat之外,voip电话在nat之内。
2.1.1. 呼叫来自nat后面的电话终端,asterisk把媒体发到私网ip
如果voip电话没有使用stun或其他机制来获取它的公网地址(并把公网地址写入invite消息),asterisk就把媒体发到私网地址,被路由器丢弃导致单通。
这种情况发生在sip.conf中主叫用户配置了nat=never,或nat=no,或nat=rfc3581。与nat的类型无关。
那就只有nat=route可以了,即主叫发送媒体到asterisk后,asterisk再按原路返回rtp.(asterisk如何获得rtp的路由?)
2.1.2. 呼叫来自nat后面的电话,asterisk发送媒体到错误端口
voip电话能检测到自己的公网ip并写入invite头,asterisk知道rtp的ip地址。
如果nat类型是Cone(full cone,restricted cone),nat转发rtp到asterisk的端口不是原来voip电话的媒体端口,asterisk按照原端口发送rtp
。这时nat就不知道把从asterisk收到的rtp包转给谁(cone是内网ip:port对应外网ip:port,一一对应)。
nat=route或nat=yes可以解决这个问题。
如果只有一个电话在nat后面,可以做端口映射,把该电话使用的rtp端口都做内外网映射。
如果有多个电话在nat后面,则可以把rtp端口范围不重叠的分派给每个电话,然后分别做端口映射。(?)
使用symmetric nat或stun服务器也可以解决这个问题
上一篇: 计算机网络 (21) - NAT 穿透 - NAT 穿透问题
下一篇: NAT 技术和渗透原理分析
推荐阅读
-
stun 协议 NAT 穿透方法简介
-
NAT 穿透技术简介和实施场景分析-2.STUN 简介
-
在 ICE 协议下实现 NAT 穿越(STUN&TURN)
-
NAT 穿透解析-1.简介
-
穿透式 NAT 类型以及 STUN 和 TURN 简介
-
介绍 PJNATH -- 用于 NAT 穿透的开源 ICE、STUN 和 TURN
-
pwnat - 基于 UDP 打洞技术的 NAT 点对点 P2P 穿透新方法,无需第三方服务器
-
ssh工作流程及原理-SSH(Secure Shell Protocol,安全的壳程序协议),它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。ssh协议本身提供两个服务器功能:一个是类似telnet的远程连接使用shell的服务器;另一个就是类似ftp服务的sftp-server,提供更安全的ftp服务。 连接加密技术简介 目前常见的网络数据包加密技术通常是通过“非对称密钥系统”来处理的。主要通过两把不一样的公钥与私钥来进行加密与解密的过程。 公钥(public key):提供给远程主机进行数据加密的行为,所有人都可获得你的公钥来将数据加密。 私钥(private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。私钥只有自己拥有。 SSH工作过程:在整个通讯过程中,为实现SSH的安全连接,服务端与客户端要经历如下五个阶段: 版本号协商阶段 SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本 密钥和算法协商阶段 SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法 认证阶段 SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证 会话请求阶段 认证通过后,客户端向服务器端发送会话请求 交互会话阶段 会话请求通过后,服务器端和客户端进行信息的交互 一、版本协商阶段 服务器端打开端口22,等待客户端连接; 客户端向服务器端发起TCP初始连接请求,TCP连接建立后,服务器向客户端发送第一个报文,包括版本标志字符串,格式为“SSH-<主协议版本号>.<次协议版本号>.<软件版本号>”,协议版本号由主版本号和次版本号组成,软件版本号主要是为调试使用。 客户端收到报文后,解析该数据包,如果服务器的协议版本号比自己的低,且客户端能支持服务器端的低版本,就使用服务器端的低版本协议号,否则使用自己的协议版本号。 客户端回应服务器一个报文,包含了客户端决定使用的协议版本号。服务器比较客户端发来的版本号,决定是否能同客户端一起工作。如果协商成功,则进入密钥和算法协商阶段,否则服务器断开TCP连接。 说明:上述报文都是采用明文方式传输。 二、密钥和算法协商阶段 服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等等。 服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法。 服务器端和客户端利用DH交换(Diffie-Hellman Exchange)算法、主机密钥对等参数,生成会话密钥和会话ID。 由此,服务器端和客户端就取得了相同的会话密钥和会话ID。对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传送的安全。在认证阶段,两端会使用会话用于认证过程。 会话密钥的生成: 客户端需要使用适当的客户端程序来请求连接服务器,服务器将服务器的公钥发送给客户端。(服务器的公钥产生过程:服务器每次启动sshd服务时,该服务会主动去找/etc/ssh/ssh_host*文件,若系统刚装完,由于没有这些公钥文件,因此sshd会主动去计算出这些需要的公钥文件,同时也会计算出服务器自己所需要的私钥文件。) 服务器生成会话ID,并将会话ID发给客户端。 若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户主目录内的~/.ssh/known_hosts。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。客户端生成会话密钥,并用服务器的公钥加密后,发送给服务器。 ****服务器用自己的私钥将收到的数据解密,获得会话密钥。 服务器和客户端都知道了会话密钥,以后的传输都将被会话密钥加密。 三、认证阶段 SSH提供两种认证方法: 基于口令的认证(password认证):客户端向服务器发出password认证请求,将用户名和密码加密后发送给服务器,服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败消息。 基于密钥的认证(publickey认证):客户端产生一对公共密钥,将公钥保存到将要登录的服务器上的那个账号的家目录的.ssh/authorized_keys文件中。认证阶段:客户端首先将公钥传给服务器端。服务器端收到公钥后会与本地该账号家目录下的authorized_keys中的公钥进行对比,如果不相同,则认证失败;否则服务端生成一段随机字符串,并先后用客户端公钥和会话密钥对其加密,发送给客户端。客户端收到后将解密后的随机字符串用会话密钥发送给服务器。如果发回的字符串与服务器端之前生成的一样,则认证通过,否则,认证失败。 注:服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表。客户端从认证方法列表中选取一种认证方法再次进行认证,该过程反复进行。直到认证成功或者认证次数达到上限,服务器关闭连接为止。实例
-
RCWL-0516/RCWL-9196模块简介 & 微波感应模块简介-前言 RCWL-0516是一款由无锡日晨物联科技有限公司开发的微波感应模块(资料下载),见图0.0、图0.1,用于检测物体(人体)移动,具有以下特征: 1.穿透感应:可穿透适当厚度的玻璃、木板以及墙壁。 2.抗干扰:不受温度、灰尘等环境因素影响。 3.感应距离:5~8m(可调,见后文) 4.可重复触发、触发时间可调(见后文) 5.工作电压:3.3~18V 6.稳压输出:提供3.3V电压输出(最大100mA) 7.夜晚自动工作:外接光敏电阻和一个电阻实现 当模块检测到物体在感应范围内移动时,OUT引脚输出一段时间的高电平(该时间可通过电容“C-TM”调节,见后文);若在输出高电平期间再次检测到物体移动,高电平持续时间将延长一段时间(又称为重复触发),该时间不可叠加。 模块使用的注意事项如下,示意图见图0.2: 1. 感应面正前方不能有金属遮挡。 2. 感应面前后方预留2cm以上空间。若对灵敏度要求很高,应预留4cm以上距离,且模块后方遮挡空间应尽可能小。 3. 模块与安装载体平面尽可能平行。 4. 有元器件面为正感应面,反面为负感应面,负感应面效果略差。 5. 相同模块,单个个体之间间距应大于2m。 图0.0-模块实物图(正) 图0.1-模块实物图(反) 图0.2-感应区域示意图 原理 关于此模块的原理,有2种主流观点,这些观点所争论的焦点在于哪种解释是最主要的: 1. 以Roger Clark为代表的“反射”解释:模块上的振荡器会发射出微波信号,位于模块感应区域内的物体会反射模块所发出的微波信号,这些反射信号又被模块所接收,接收到的反射信号会改变流经晶体管发射极的电流I。外界环境不变的情况下,模块内部的调节电路会稳定振荡器,此时振荡器处于稳定状态,电流I也处于稳定;当外界环境发生变化(例如,有物体进入感应区域),该物体的反射信号会使振荡器暂时失去稳定,从而导致电流I发生变化。模块通过检测该电流I的变化,以检测物体移动。此过程中,发射频率的变化只是由于振荡器受反射信号影响而进入一个“暂稳态”所导致。 2.以Joe Desbonnet为代表的“多普勒效应”解释:位于模块感应区域内的物体会反射模块所发出的微波信号,这些反射信号的频率由于物体移动而发生改变(多普勒效应)。模块通过对比发射与反射频率的差异,以判断是否有物体进入感应区域。 应用 降低感应距离:模块背面丝印“R-GN”处添加1MΩ的电阻,模块的感应距离可降低到5m;如果不接,感应距离为7m。 调节触发时间:模块背面丝印“C-TM”处添加不同容值的电容,可以调节触发时间(“C-TM”电容容值的选择见后文);若不安装电容,触发时间为2~4s。 夜晚自动工作:模块正面丝印“CDS”处添加光敏电阻、模块背面丝印“R-CDS”处添加适当阻值的电阻,可控制模块在夜晚自动工作。“CDS”与“R-CDS”的选择方法见后文。 以上应用的实际电路请参考图1.0、图1.1。 图1.0-测试电路(正) 图1.1-测试电路(反) 测试 测试由5部分组成: 1.测量模块处于不同状态时的功耗,见表0.0。 2.未接入电阻“R-GN”时,测试模块最大感应距离,见表0.1。 3.接入电阻“R-GN”,测试模块最大感应距离,见表0.2。 4.以下步骤将介绍如何根据确定的光敏电阻“CDS”,选择电阻“R-CDS”的阻值,以实现模块夜间自动工作的功能。 1-白天,接入可调电阻“R-CDS”(推荐2MΩ)、光敏电阻“CDS”。 2-触发模块后(在模块面前走动),调节可调电阻,直到触发消失。再次尝试触发模块,正常情况下,模块应该无法被触发(如果可以触发,重复步骤2)。 3-将光敏电阻感光面遮住,尝试触发模块,正常情况下,模块应该可以被触发(如果无法触发,重复步骤3)。 4-此时可调电阻阻值即为电阻“R-CDS”的正确阻值。 5.电容“C-TM”分别接入不同容值的无极电容,测试模块单次触发所持续的时间,见表0.3。 测试条件 总电流(mA) 总功耗(mW) +5V供电电压,模块未触发 3.63 18.15 +5V供电电压,模块被触发 4.33 21.65 表0.0-模块功耗信息 正面最大感应距离(M) 6 反面最大感应距离(M) 2 表0.1-未接入电阻“R-GN”时,模块最大感应距离[1] 正面最大感应距离(M) 5 反面最大感应距离(M) 1 表0.2-接入电阻“R-GN”=1MΩ时,模块最大感应距离[1] 电容“C-TM”容值 悬空 103(10nF) 104(100nF) 224(220nF) 474(470nF) 105(1uF) 理论单次触发时间(s) 2~4 6 30 66 140 300 实际单次触发时间(s) 3 6 32 67 122 210 表0.3-电容“C-TM”容值 vs. 模块单次触发持续时间 结论 RCWL-0516是一款性价比高的人体感应模块,具有以下优缺点: 优点: