
1
SIP语音环境下的常见问题
-
不能注册或呼叫到SIP服务器端
-
30秒挂断呼叫的黄金法则
-
咬线或摘机状态
-
单通或无语音
-
收到400 bad request
-
收到413,513 Request Entity Too Large或Message Too Large消息
-
收到408, 480或者487 消息
-
483 – Too Many Hops
-
488 – Not Acceptable Here
具体关于经典问题的讨论,读者可以阅读笔者文章:
SIP语音环境中十大经典问题及解决办法
其中在涉及到NAT问题中,比较常见的问题包括:
-
SIP账户注册不上,Register报文收不到响应消息
-
呼叫通话中出现语音单通,内网设备收不到公网媒体流
-
收不到ACK信令,呼叫接通持续30秒自动挂断
-
收不到BYE消息,通话挂不断
2
NAT产生的三个原因
-
动态NAT
-
静态NAT
-
STUN穿透
3
NAT穿越原理示例
以鼎信IAD语音网关为例,设备上开启动态NAT功能后,发出取得请求消息via头里会携带rport字段,如下:
1)发送REGISTER消息,在请求信息的Via头域中包含了无具体rport端口参数,如下所示:
REGISTER sip: 124.40 . 120.188 : 5060 SIP / 2.0
Via的rport 空白
Via: SIP/ 2.0 / UDP 124.42 . 4.203 : 15500 ;branch = z9hG4bK - d8754z -1049ed261d2e643d - 1 --- d8754z -;rport
Max - Forwards: 70
Contact: < sip: 19988888888 @ 192.168 . 2.65 : 12344 ;rinstance =7cd1c532e92fdb0e > ;expires =
To: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >
From: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >;tag =203ba359
Call -ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 1 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User - Agent: eyeBeam release 1105a stamp 56793
Length:
SIP / 2.0 200 OK
Via: SIP / 2.0 / UDP 124.42 . 4.203 : 15500 ;branch = z9hG4bK - d8754z -1049ed261d2e643d - 1 --- d8754z - ;rport = 15500 ;received = 124.42. 4.203
From: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >;tag = 203ba359
To: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 > ;tag= 0005 - 058 - 7d6dc90516ae2e21
Call - ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 4 REGISTER
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,NOTIFY,MESSAGE
Contact: < sip: 124.40 . 120.188 : 5060 >
Content - Length:
3)设备在收到响应200OK信息后,从rport和received字段里获取NAT公网地址和端口,设备之后发SIP消息时会更改为路由器公网的IP和端口。如下列,Contact头部携带变换成124.42.4.203: 15500,例如新发的REGISTER信息变为:
REGISTER sip: 124.40 . 120.188 : 5060 SIP / 2.0
Via: SIP / 2.0 / UDP 124.42 . 4.203 : 15500 ;branch = z9hG4bK - d8754z -1049ed261d2e643d - 1 --- d8754z - ;rport
Max - Forwards: 70
Contact: < sip: 19988888888 @ 124.42 . 4.203 : 15500 ;rinstance =7cd1c532e92fdb0e > ;expires =
To: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >
From: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >;tag = 203ba359
Call - ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 2 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User - Agent: eyeBeam release 1105a stamp 56793
Content - Length:
SIP系列讲座-SIP-防火墙-NAT-Hole Punching探讨
SIP系列讲座-NAT解决方法探讨Symmetric RTP-UPnP-ALG
4
STUN穿透原理示例
-
开启STUN后,设备作为客户端,会自动用SIP端口和不同的RTP端口往STUN服务器发STUN探测消息; -
服务器收到后会在响应消息里携带设备所在网络的NAT地址和端口; -
路由器会记录保持对应的NAT地址表 -
设备收到STUN服务器响应消息后自动记录NAT公网IP和端口 -
设备发起的SIP报文里contact头字段和SDP字段会自动携带公网地址 -
设备会定时刷新STUN报文,用于NAT洞保持打开状态 -
开启STUN报文注册消息如下:
更多关于的具体概念和解释,读者可以查阅笔者历史文章:
SIP系列讲座-NAT解决方法探讨-STUN-TURN-ICE
5
静态NAT示例
6
其他相关NAT解决方案讨论
图解边界会话控制器(SBC)的20个最常用功能
SIP系列讲座-NAT解决方法探讨Symmetric RTP-UPnP-ALG
Asterisk课堂-SIP和NAT
SIP呼叫和路由器ALG相关配置详解
6
总结

