SIP IP电话系统定义了注册/注销、呼叫、重定向、能力查询四种工作过程。

注册/注销过程

  SIP为用户定义了注册和注销过程,其目的是可以动态建立用户的逻辑地址和其当前联系地址之间的对应关系,以方便实现呼叫路由和对用户移动性的支持。逻辑地址和联系地址的分离也方便了用户,它不论在何处、使用何种设备,都可以通过唯一的逻辑地址进行通信。

  注册/注销过程是通过REGISTER消息和200成功响应来实现的。在注册/注销时,用户将其逻辑地址和当前联系地址通过REGISTER消息发送给其注册服务器,注册服务器对该请求消息进行处理,并以200成功响应消息通知用户注册/注销成功。

例 

REGISTER sip:192.168.0.157 SIP/2.0

Via: SIP/2.0/UDP 192.168.0.212;rport;branch=z9hG4bKc0a800d4000000104c21966c00007c9900000004
Content-Length: 0
Contact: <sip:8002@192.168.0.212:5060>
Call-ID: 19AC17CC-55FE-42A0-9127-9F53943F5291@192.168.0.212
CSeq: 2 REGISTER
From: <sip:8002@192.168.0.157>;tag=1525750021180
Max-Forwards: 70
To: <sip:8002@192.168.0.157>
User-Agent: SJphone/1.60.289a (SJ Labs)
Authorization: Digest username="8002",realm="asterisk",nonce="4fc62d23",uri="sip:192.168.0.157",response="39677e3edaed7037bd8af592d8d2a038",algorithm="MD5"
 

SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.0.212;branch=z9hG4bKc0a800d4000000104c21966c00007c9900000004;received=192.168.0.212;rport=5060
From: <sip:8002@192.168.0.157>;tag=1525750021180
To: <sip:8002@192.168.0.157>
Call-ID: 19AC17CC-55FE-42A0-9127-9F53943F5291@192.168.0.212
CSeq: 2 REGISTER
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:8002@192.168.0.157>
Content-Length: 0

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.212;branch=z9hG4bKc0a800d4000000104c21966c00007c9900000004;received=192.168.0.212;rport=5060
From: <sip:8002@192.168.0.157>;tag=1525750021180
To: <sip:8002@192.168.0.157>;tag=as3d657ebf
Call-ID: 19AC17CC-55FE-42A0-9127-9F53943F5291@192.168.0.212
CSeq: 2 REGISTER
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Expires: 120
Contact: <sip:8002@192.168.0.212:5060>;expires=120
Date: Wed, 23 Jun 2010 05:07:00 GMT
Content-Length: 0
 

呼叫过程

  SIP IP电话系统中的呼叫是通过INVITE邀请请求、成功响应和ACK确认请求的三次握手来实现的。即当主叫用户代理要发起呼叫时,它构造一个INVITE 消息,并发送给被叫。被叫收到邀请后决定接受该呼叫,就回送一个成功响应(状态码为200)。主叫方收到成功响应后,向对方发送ACK请求。被叫收到 ACK请求后,呼叫成功建立。

  呼叫的终止通过BYE请求消息来实现。当参与呼叫的任一方要终止呼叫时,它就构造一个BYE请求消息,并发送给对方。对方收到BYE请求后,释放与此呼叫相关的资源,回送一个成功响应,表示呼叫已经终止。

  当主被叫双方已建立呼叫,如果任一方想要修改当前的通信参数(通信类型、编码等),可以通过发送一个对话内的INVITE请求消息(称为re- INVITE)来实现。

INVITE sip:8001@192.168.0.163:49152 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.157:5060;branch=z9hG4bK0083a186;rport
From: "8002" <sip:8002@192.168.0.157>;tag=as044943cc
To: <sip:8001@192.168.0.163:49152>
Contact: <sip:8002@192.168.0.157>
Call-ID: 04c421db5d7f5c942393cb65621016dc@192.168.0.157
CSeq: 102 INVITE
User-Agent: Asterisk PBX
Max-Forwards: 70
Date: Wed, 23 Jun 2010 05:13:11 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Content-Type: application/sdp
Content-Length: 363

 

SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 192.168.0.212;branch=z9hG4bKc0a800d40000002b4c2197e00000549c0000004a;received=192.168.0.212;rport=5060
From: "unknown"<sip:8002@192.168.0.157>;tag=156294689213
To: <sip:8001@192.168.0.157>;tag=as46e231f6
Call-ID: EC15DE5D-CE4E-46E7-A506-B37BB42F164B@192.168.0.212
CSeq: 2 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:8001@192.168.0.157>
Content-Length: 0

 

SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.0.157:5060;branch=z9hG4bK0083a186;rport=5060;received=192.168.0.157
From: "8002" <sip:8002@192.168.0.157>;tag=as044943cc
To: "unknown" <sip:8001@192.168.0.163:49152>;tag=653819a85587
Call-ID: 04c421db5d7f5c942393cb65621016dc@192.168.0.157
CSeq: 102 INVITE
Content-Length: 0
Server: SJphone/1.65.377a (SJ Labs)

 

OPTIONS sip:192.168.0.157 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.212;rport;branch=z9hG4bKc0a800d4000000104c2197e100000a7a0000004d
Content-Length: 0
Call-ID: 84F39028-3828-41E7-A0F6-C52C1E17EBAE@192.168.0.212
CSeq: 18 OPTIONS
From: <sip:8002@192.168.0.157>;tag=1563048416840
Max-Forwards: 70
To: <sip:192.168.0.157>

 

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.212;branch=z9hG4bKc0a800d4000000104c2197e100000a7a0000004d;received=192.168.0.212;rport=5060
From: <sip:8002@192.168.0.157>;tag=1563048416840
To: <sip:192.168.0.157>;tag=as3aafc1a7
Call-ID: 84F39028-3828-41E7-A0F6-C52C1E17EBAE@192.168.0.212
CSeq: 18 OPTIONS
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: <sip:192.168.0.157>
Accept: application/sdp
Content-Length: 0

 

SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 192.168.0.157:5060;branch=z9hG4bK0083a186;rport=5060;received=192.168.0.157
From: "8002" <sip:8002@192.168.0.157>;tag=as044943cc
To: "unknown" <sip:8001@192.168.0.163:49152>;tag=653819a85587
Contact: <sip:8001@192.168.0.163:49152>
Call-ID: 04c421db5d7f5c942393cb65621016dc@192.168.0.157
CSeq: 102 INVITE
Content-Length: 0
Server: SJphone/1.65.377a (SJ Labs)

 

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.157:5060;branch=z9hG4bK0083a186;rport=5060;received=192.168.0.157
From: "8002" <sip:8002@192.168.0.157>;tag=as044943cc
To: "unknown" <sip:8001@192.168.0.163:49152>;tag=653819a85587
Contact: <sip:8001@192.168.0.163:49152>
Call-ID: 04c421db5d7f5c942393cb65621016dc@192.168.0.157
CSeq: 102 INVITE
Content-Length: 271
Content-Type: application/sdp
Server: SJphone/1.65.377a (SJ Labs)
Supported: replaces,norefersub,timer

 

ACK sip:8001@192.168.0.163:49152 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.157:5060;branch=z9hG4bK4ed93e8f;rport
From: "8002" <sip:8002@192.168.0.157>;tag=as044943cc
To: <sip:8001@192.168.0.163:49152>;tag=653819a85587
Contact: <sip:8002@192.168.0.157>
Call-ID: 04c421db5d7f5c942393cb65621016dc@192.168.0.157
CSeq: 102 ACK
User-Agent: Asterisk PBX
Max-Forwards: 70
Content-Length: 0
 

重定向过程

  当重定向服务器(其功能可包含在代理服务器 和用户终端中)收到主叫用户代理的INVITE邀请消息,它通过查找定位服务器发现该呼叫应该被重新定向(重定向的原因有多种,如用户位置改变、实现负荷分担等等),就构造一个重定向响应消息(状态码为3xx),将新的目标地址回送给主叫用户代理。主叫用户代理收到重定向响应消息后,将逐一向新的目标地址发送INVITE邀请,直至收到成功响应并建立呼叫。如果尝试了所有的新目标而无法建立呼叫,则本次呼叫失败。

能力查询过程

  SIP IP电话系统还提供了一种让用户在不打扰对方用户的情况下查询对方通信能力的手段。可查询的内容包括:对方支持的请求方法(methods)、支持的内容类型、支持的扩展项、支持的编码等等。

  能力查询通过OPTION请求消息来实现。当用户代理想要查询对方的能力时,它构造一个OPTION请求消息,发送给对方。对方收到该请求消息后,将自己支持的能力通过响应消息回送给查询者。如果此时自己可以接收呼叫,就发送成功响应(状态码为200),如果此时自己忙,就发送自身忙响应(状态码为 486)。因此,能力查询过程也可以用于查询对方的忙闲状态,看是否能够接受呼叫。