前面的几个例子中都是个用户代理和另一个直接通信,但双方通信过程中更可能 涉及重定向服务器。当小:叫用户不知道被叫的当前地址时,U叫用户可以重定向服务器 发出一个INVITE请求消息,重定向服务器应答这个请求时,通常会传递一个供选择的 地址,告诉主叫方应该将INVITE请求消息发送到这个指定的地址上。重定向呼叫的例 子如下图所示。
图 重定向呼叫的示例
在该例中,Daniel希望呼叫Boss,但Daniel不知道Boss的当前地址,Daniel向重定 向服务器发出INVITE消息,消息的格式为:C----------S: INVITE sip: manager@server, work, com SIP/2. 0
Via: SIP/2.0/UDP stationl.work.com
From: Daniel <CSip: Daniel@work.com>
To: Boss <CSip: Boss@work. com>
Call-ID: 3298420299@stationl. work, com
CSeq: 1 INVITE
Subject: Boss, Come here
Content-Type : application/sdp
Content-Length = •••
<消息体> 略
设Boss此时不在办公室,并注册了一个不同的地址“Boss @ home, com”。重定向服 务器收到INVITE消息后,査询到Boss的当前地址,回送应答消息,在应答消息中的状态 代码是302(临时移开),并且在应答消息中包括Contact头部字段,这个字段的内容就是 呼叫方应该重试的可选地址。应答消息的格式为:
S------------C: SIP/2. 0 302 Moved Temporarily
Via: SIP/2.0/UDP stationl.work.com
From: Daniel <Sip: Daniel@work.com>>
To: Boss <CSip:
Boss@work.com >
Call-ID: 3298420299@stationl. work, com
CSeq: 1 INVITE
Contact: Sip:Boss@home. com
Content-Length = 0
客户端收到该应答消息后.根据该消息中Contact字段给出的地址生成一个新的INVITE 消息,这个新的 INVITE 消息使用从重定向服务器中收到的应答消息中 Contact 字段给出的地址作为Request-URL,而To头部则保持不变。“Call-ID”也会保持不变,但 是命令序列号码(CSeq)是递增后的值。该消息的格式为:
C----------S: INVITE sip: Boss @ home.com SIP/2.0
Via: SIP/2.0/UDP stationl.work.com
From: Daniel <CSip: Daniel@work.com>
To: Boss〈Sip: Boss @ work.com〉
Call-ID: 3298420299@stationl. work, com
CSeq: 2 INVITE Subject: Boss,
Come here Content-Type : application/sdp
Con tent-Length = •••
<消息体> 略
这个例子说明了 SIP如何通过重定向服务器提供信息,使用户能够找到被叫的当前 地址。