11661010s211831001669993
2STUN
f21工作原理STUN的全称是SimpleTraversalofUDPThroughNAT,即UDP对NAT的简单穿越方式。是一种网络协议它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的I
ter
et端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间建立UDP通信。该协议由RFC3489定义。1应用程序(即STUNCLIENT)向NAT外的STUNSERVER通过UDP发送请求STUN消息询问自身的转换后地址,2STUNSERVER收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即STUNCLIENT在NAT上对应的外部端口。响应消息通过NAT发送给STUNCLIENT,3STUNCLIENT通过响应消息体中的内容得知其在NAT上对应的外部地址,并且将其填入以后呼叫协议的UDP负载中,告知对端,同时还可以在终端注册时直接注册这个转换后的公有IP地址,这样就解决SIP穿越NAT的通信建立问题以及作为被叫时的问题。4本端的接收地址和端口号为NAT外的地址和端口号。由于通过STUN协议已在NAT上预先建立媒体流的NAT映射表项,故媒体流可顺利穿越NAT。22网络结构图
23工作流程示意图
fA:192168010ANAT:19216811STUNSERVER:21183100110B:1921681111BNAT:192168111
2118310010021183100120
分析:1d211831001101111s19216801010102d211831001101111s2118310010020203d211831001002020s2118310010020204d1921680101010s2118310010020205d211831001202222s192168111130306d211831001202222s2118310012040407d211831001204040s2118310012022228d19216811113030s211831001202222A与B接收到STUN的响应消息就得到信令和媒体流在NAT上的映射地址,并将这些地址写到SIP消息中的ViaCo
tact字段以及SDP中的媒体流传送地址,代替原有的私网地址。如A的SDP带的端口为10000,B的SDP带的端口为20000,A、B相互告知对端它的端口,最后终端注册时直接用这个转换后的公有IP地址注册。所以端口10000BNAT是打开的,端口20000ANAT是打开的,所以RTP包可路由。9d211831001204040s21183100100888810d211831001008888s21183100120404024需要注意
1NATPAT对于地址转换关系是有一定生命期的,某个地址转换后在一段时间内没有被使用将会被清除,当这个业务流再次出现时,将会建立一个新的地址转换关系,这就意味着STUN的询问过程以及终端的注册过程都需要再执行一遍才能保证通信的正确。解决这个问题一个比较通行的方案是采用某种方式保持NATPAT的转换关系,例如在Nr