口号(终端类型为SIP、H.323电话或IAD/AG下挂的ESL电话)。“RTP/AVP”为传送层协议,其值和“c”行中的地址类型有关,对于IP4来说,大多数媒体业务流都在RTP/UDP上传送,已定义如下两类协议:RTP/AVP,音频/视频应用文档,在UDP上传送;Udp,UDP协议。“8”就是RTP音频/视频应用文档中定义的媒体静荷类型。
第十九行:rtpmap属性行,指明从RTP静荷类型至编码的映射关系。RTP静荷类型“8”对应的编码为PCMA。
3.3 基本消息流程
3.3.1 SIP用户注册流程
用户每次开机时都需要向服务器注册,当SIP Client的地址发生改变时也需要重新注册。注册信息必须定期刷新。下面以SIP Phone向SoftX3000注册的流程为例,说明SIP用户的注册流程。 在下面的实例中,我们基于以下约定:
? ? ?
SoftX3000的IP地址为191.169.150.30; SIP Phone的IP地址为191.169.150.251; SIP Phone向SoftX3000请求登记。
图3-5 SIP实体和SIP服务器之间的登记流程
(1) 事件1:SIP Phone向SoftX3000发起注册请求,汇报其已经开机或重
启动。下面是Register请求消息编码的示例。
REGISTER sip:191.169.150.30 SIP/2.0
From: sip:6540012@191.169.150.30;tag=16838c16838 To: sip:6540012@191.169.150.30;tag=946e6f96 Call-Id: 1-reg@191.169.150.251 Cseq: 2762 REGISTER
Contact: sip:6540012@191.169.150.251 Expires: 100
Content-Length: 0 Accept-Language: en
Supported: sip-cc, sip-cc-01, timer User-Agent: Pingtel/1.2.7 (VxWorks) Via: SIP/2.0/UDP 191.169.150.251
第一行:请求起始行。REGISTER请求消息。表示终端向IP地址为191.169.150.30的SoftX3000发起登记。SIP版本号为2.0。
第二行:From字段。指明该REGISTER请求消息由SoftX3000(IP地址:191.169.150.30)控制的SIP Phone发起的。
第三行:To字段。指明REGISTER请求接收方的地址。此时REGISTER请求的接收方为IP地址为191.169.150.30的SoftX3000。
第四行:Call-ID字段。该字段唯一标识一个特定的邀请,全局唯一。Call-ID为“1-reg@191.169.150.251”,191.169.150.251为发起REGISTER请求的SIP Phone的IP地址,1-reg为本地标识。
第五行:Cseq字段。此时用于将REGISTER请求和其触发的响应相关联。 第六行:Contact字段。在REGISTER请求中的Contact字段指明用户可达位置。表示SIP Phone当前的IP地址为“191.169.150.251”,电话号码为“6540012”。
第七行:表示该登记生存期为100s。
第八行:表明此请求消息消息体的长度为空,即此消息不带会话描述。 第九行:表示原因短语、会话描述或应答消息中携带的状态应答内容的首选语言为英语。
第十行:表示发送该消息的UA实体支持sip-cc, sip-cc01以及timer扩展协议。timer表示终端支持session-timer扩展协议。
第十一行:发起请求的用户终端的信息。此时为SIP Phone的型号和版本。 第十二行:Via字段。该字段用于指示该请求历经的路径。“SIP/2.0/UDP”表示发送的协议,协议名为“SIP”,协议版本为2.0,传输层为UDP;“191.169.150.251”表示该请求消息发送方SIP终端IP地址为191.169.150.251。
(2) 事件2:SoftX3000返回401 Unauthorized(无权)响应,表明SoftX3000
端要求对用户进行认证,并且通过WWW-Authenticate字段携带SoftX3000支持的认证方式Digest和SoftX3000域名“huawei.com”,产生本次认证的nonce,并且通过该响应消息将这些参数返回给终端从而发起对用户的认证过程。
SIP/2.0 401 Unauthorized
From:
Call-ID: 1-reg@191.169.150.251 Via: SIP/2.0/UDP 191.169.150.251 WWW-Authenticate:
realm=\Content-Length: 0
Digest
(3) 事件3:SIP Phone重新向SoftX3000发起注册请求,携带 Authorization
字段,包括认证方式DIGEST、SIP Phone的用户标识(此时为电话号码)、SoftX3000的域名、NONCE、URI和RESPONSE(SIP Phone收到401 Unauthorized响应后根据服务器端返回的信息和用户配置等信息采用特定的算法生成加密的RESPONSE)字段。下面是Register请求消息编码的示例:
REGISTER sip:191.169.150.30 SIP/2.0
From: sip:6540012@191.169.150.30;tag=16838c16838 To: sip:6540012@191.169.150.30;tag=946e6f96 Call-Id: 1-reg@191.169.150.251 Cseq: 2763 REGISTER
Contact: sip:6540012@191.169.150.251 Expires: 100
Content-Length: 0 Accept-Language: en
Supported: sip-cc, sip-cc-01, timer User-Agent: Pingtel/1.2.7 (VxWorks) Authorization: DIGEST USERNAME=\REALM=\NONCE=\
RESPONSE=\sip:191.169.150.30\Via: SIP/2.0/UDP 191.169.150.251
(4) 事件4:SoftX3000收到SIP Phone的注册请求,首先检查NONCE的
正确性,如果和在401 Unauthorized响应中产生的NONCE相同,则通过。否则,直接返回失败。然后,SoftX3000会根据NONCE、用户名、密码(服务器端可以根据本地用户信息获取用户的密码)、URI等采用和终端相同的算法生成RESPONSE,并且对此RESPONSE和请求消息中的RESPONSE进行比较,如果二者一致则用户认证成功,否则认证失败。此时,SoftX3000返回200 OK响应消息,表明终端认证成功。
SIP/2.0 200 OK
From:
Call-ID: 1-reg@191.169.150.251 Via: SIP/2.0/UDP 191.169.150.251
Contact:
3.3.2 成功的SIP用户呼叫流程
在同一SoftX3000控制下的两个SIP用户之间的成功呼叫,呼叫流程应用实例如
图3-6所示。
在下面的实例中,我们基于以下约定:
? ? ? ? ?
SoftX3000的IP地址为191.169.200.61; SIP PhoneA的IP地址为191.169.150.101; SIP PhoneB的IP地址为191.169.150.100;
SIP PhoneA为主叫,SIP PhoneB为被叫,主叫先挂机;
SIP PhoneA的电话号码为1000,SIP PhoneB的电话号码为1001。
图3-6 SIP实体之间的SIP呼叫流程
(1) 事件1:SIP PhoneA发INVITE请求到SoftX3000,请求SoftX3000邀
请SIP PhoneB加入会话。SIP PhoneA还通过INVITE消息的会话描述,将自身的IP地址:191.169.150.101,端口号:8766,静荷类型,静荷类型对应的编码等信息传送给SoftX3000。
INVITE sip:1001@191.169.200.61 SIP/2.0 From: sip:1000@191.169.200.61;tag=1c12674 To: sip:1001@191.169.200.61
Call-Id: call-973598097-16@191.169.150.101 Cseq: 1 INVITE
Contact: sip:1000@191.169.150.101 Content-Type: application/sdp Content-Length: 203 Accept-Language: en
Allow: INVITE, ACK, CANCEL, BYE, REFER, OPTIONS, NOTIFY, REGISTER, SUBSCRIBE
Supported: sip-cc, sip-cc-01, timer User-Agent: Pingtel/1.2.7 (VxWorks) Via: SIP/2.0/UDP 191.169.150.101 v=0
o=Pingtel 5 5 IN IP4 191.169.150.101 s=phone-call
c=IN IP4 191.169.150.101 t=0 0
m=audio 8766 RTP/AVP 0 96 8 a=rtpmap:0 pcmu/8000/1
a=rtpmap:96 telephone-event/8000/1 a=rtpmap:8 pcma/8000/1
每行的详细解释请参考3.2.2 1.请求消息一节中的“请求消息示例”。 (2) 事件2:SoftX3000给SIP PhoneA回100 Trying表示已经接收到请求消
息,正在对其进行处理。
SIP/2.0 100 Trying
From:
Call-ID: call-973598097-16@191.169.150.101 Via: SIP/2.0/UDP 191.169.150.101 Content-Length: 0
(3) 事件3:SoftX3000给SIP PhoneA发407 Proxy Authentication Required
响应,表明SoftX3000端要求对用户进行认证,并且通过
Proxy-Authenticate字段携带SoftX3000支持的认证方式Digest和SoftX3000域名“huawei.com”,产生本次认证的nonce,并且通过该响应消息将这些参数返回给终端从而发起对用户的认证过程。
SIP/2.0 407 Proxy Authentication Required From:
Call-ID: call-973598097-16@191.169.150.101 Via: SIP/2.0/UDP 191.169.150.101
Proxy-Authenticate: Digest realm=\Content-Length: 0
(4) 事件4:SIP PhoneA发ACK消息给SoftX3000,证实已经收到SoftX3000
对于INVITE请求的最终响应。
ACK sip:1001@191.169.200.61 SIP/2.0 Contact: sip:1000@191.169.150.101
From:
Accept-Language: en
User-Agent: Pingtel/1.2.7 (VxWorks) Via: SIP/2.0/UDP 191.169.150.101 Content-Length: 0
(5) 事件5:SIP PhoneA重新发INVITE请求到SoftX3000。携带
Proxy-Authorization字段,包括认证方式DIGEST、SIP Phone的用户标识(此时为电话号码)、SoftX3000的域名、NONCE、URI和RESPONSE(SIP PhoneA收到407响应后根据服务器端返回的信息和用户配置等信息采用特定的算法生成加密的RESPONSE)字段。
INVITE sip:1001@191.169.200.61 SIP/2.0
From: sip:1000@191.169.200.61;tag=1c12674 To: sip:1001@191.169.200.61
Call-Id: call-973598097-16@191.169.150.101 Cseq: 2 INVITE
Contact: sip:1000@191.169.150.101 Content-Type: application/sdp Content-Length: 203 Accept-Language: en
Allow: INVITE, ACK, CANCEL, BYE, REFER, OPTIONS, NOTIFY, REGISTER, SUBSCRIBE
Supported: sip-cc, sip-cc-01, timer User-Agent: Pingtel/1.2.7 (VxWorks)
Proxy-Authorization: DIGEST USERNAME=\REALM=\NONCE=\RESPONSE=\URI=\sip:1001@191.169.200.61\Via: SIP/2.0/UDP 191.169.150.101 v=0
o=Pingtel 5 5 IN IP4 191.169.150.101 s=phone-call
c=IN IP4 191.169.150.101 t=0 0
m=audio 8766 RTP/AVP 0 96 8 a=rtpmap:0 pcmu/8000/1
a=rtpmap:96 telephone-event/8000/1 a=rtpmap:8 pcma/8000/1