您的位置:首页 > 其它

Freeswitch中文用户手册(第四章 SIP)----2

2015-03-18 15:43 435 查看
转载:http://www.cnblogs.com/cnsanshao/p/3309640.html

通过 B2BUA 呼叫

在真实世界中,bob 和 alice 肯定要经常改变位置,那么它们的 SIP 地址也会相应改变,并且,如果他们之中有一个或两个处于 NAT 的网络中时,直接通信就更困难了。所以,他们通常会借助于一个服务器来相互通信。通过注册到服务器上,他们都可以获得一个服务器上的 SIP 地址。注册服务器的地址一般是不变的,因此他们的 SIP 地址就不会发生变化,因而,他们总是能够进行通信。

我们让他们两个都注册到 FreeSWITCH 上。上面已经说过,FreeSWITCH 监听的端口是 SIP 默认的端口 5060。bob 和 alice 注册后,他们分别获得了一个服务器的地址(SIP URI):sip:bob@192.168.4.4 和 sip:alice@192.168.4.4(默认的端口号 5060 可以省略)。

下面是 bob 呼叫 alice 的流程。需要指出,如果 bob 只是发起呼叫而不接收呼叫,他并不需要向 FreeSWITCH 注册(有些软交换服务器需要先注册才能发起呼叫,但 SIP 是不强制这么做的)。

------------------------------------------------------------------------

recv 1118 bytes from udp/[192.168.4.4]:26000 at 13:31:39.938891:

------------------------------------------------------------------------

INVITE sip:alice@192.168.4.4 SIP/2.0

Via: SIP/2.0/UDP 192.168.4.4:26000;branch=z9hG4bK-d8754z-56adad736231f024-1---d8754z-;rport

Max-Forwards: 70

Contact: <sip:bob@192.168.4.4:26000>

To: "alice"<sip:alice@192.168.4.4>

From: "Bob"<sip:bob@192.168.4.4>;tag=15c8325a

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 1 INVITE

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO

Content-Type: application/sdp

User-Agent: X-Lite release 1014k stamp 47051

Content-Length: 594

上面的消息中省略了 SDP 的内容,我们将留到以后再探讨。bob 的 UAC 通过 INVITE 消息向 FreeSWITCH 发起请求。bob 的 UAC 用的是 X-Lite(User-Agent),它运行在端口 26000 上(实际上,它默认在端口也是 5060,但由于在我的实验环境下它也是跟 FreeSWITCH 运行在一台机器上,已被占用,因此它需要选择另一个端口)。其中,From 为主叫用户的地址,To 为被叫用户的地址。此时 FreeSWITCH 作为一个 UAS 接受请求并进行响应。它得知 bob 要呼叫 alice,需要在自己的数据库中查找 alice 是否已在服务器上注册,好知道应该怎么找到 alice。但在此之前,它先通知 bob 它已经收到了他的请求。

------------------------------------------------------------------------

send 345 bytes to udp/[192.168.4.4]:26000 at 13:31:39.940278:

------------------------------------------------------------------------

SIP/2.0 100 Trying

Via: SIP/2.0/UDP 192.168.4.4:26000;branch=z9hG4bK-d8754z-56adad736231f024-1---d8754z-;rport=26000

From: "Bob"<sip:bob@192.168.4.4>;tag=15c8325a

To: "alice"<sip:alice@192.168.4.4>

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 1 INVITE

User-Agent: FreeSWITCH-mod_sofia/1.0.trunk-16981M

Content-Length: 0

FreeSWITCH 通过 100 Trying 消息告诉 bob “我已经收到你的消息了,别着急,我正在联系 alice 呢...” 该消息称为呼叫进展消息。

------------------------------------------------------------------------

send 826 bytes to udp/[192.168.4.4]:26000 at 13:31:39.943392:

------------------------------------------------------------------------

SIP/2.0 407 Proxy Authentication Required

Via: SIP/2.0/UDP 192.168.4.4:26000;branch=z9hG4bK-d8754z-56adad736231f024-1---d8754z-;rport=26000

From: "Bob"<sip:bob@192.168.4.4>;tag=15c8325a

To: "alice" <sip:alice@192.168.4.4>;tag=B4pem31jHgtHS

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 1 INVITE

User-Agent: FreeSWITCH-mod_sofia/1.0.trunk-16981M

Accept: application/sdp

Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER,

NOTIFY, PUBLISH, SUBSCRIBE

Supported: timer, precondition, path, replaces

Allow-Events: talk, presence, dialog, line-seize, call-info, sla,

include-session-description, presence.winfo, message-summary, refer

Proxy-Authenticate: Digest realm="192.168.4.4",

nonce="31c5c3e0-cc6e-46c8-a661-599b0c7f87d8", algorithm=MD5, qop="auth"

Content-Length: 0

但就在此时,FreeSWITCH 发现 bob 并不是授权用户,因而它需要确认 bob 的身份。它通过发送带有 Digest 验证信息的 407 消息来通知 bob(注意,这里与注册流程中的 401 不同)。

------------------------------------------------------------------------

recv 319 bytes from udp/[192.168.4.4]:26000 at 13:31:39.945314:

------------------------------------------------------------------------

ACK sip:alice@192.168.4.4 SIP/2.0

Via: SIP/2.0/UDP 192.168.4.4:26000;branch=z9hG4bK-d8754z-56adad736231f024-1---d8754z-;rport

To: "alice" <sip:alice@192.168.4.4>;tag=B4pem31jHgtHS

From: "Bob"<sip:bob@192.168.4.4>;tag=15c8325a

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 1 ACK

Content-Length: 0

bob 回送 ACK 证实消息向 FreeSWITCH 证实已收到认证要求。并重新发送 INVITE,这次,附带了验证信息。

------------------------------------------------------------------------

recv 1376 bytes from udp/[192.168.4.4]:26000 at 13:31:39.945526:

------------------------------------------------------------------------

INVITE sip:alice@192.168.4.4 SIP/2.0

Via: SIP/2.0/UDP 192.168.4.4:26000;branch=z9hG4bK-d8754z-87d60b47b6627c3a-1---d8754z-;rport

Max-Forwards: 70

Contact: <sip:bob@192.168.4.4:26000>

To: "alice"<sip:alice@192.168.4.4>

From: "Bob"<sip:bob@192.168.4.4>;tag=15c8325a

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 2 INVITE

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO

Content-Type: application/sdp

Proxy-Authorization: Digest username="bob",realm="192.168.4.4",

nonce="31c5c3e0-cc6e-46c8-a661-599b0c7f87d8",

uri="sip:alice@192.168.4.4",response="327887635344405bcd545da06763c466",

cnonce="c164b74f625ff2161bd8d47dba3a0ee2",nc=00000001,qop=auth,

algorithm=MD5

User-Agent: X-Lite release 1014k stamp 47051

Content-Length: 594

这里也省略了 SDP 消息体。

------------------------------------------------------------------------

send 345 bytes to udp/[192.168.4.4]:26000 at 13:31:39.946349:

------------------------------------------------------------------------

SIP/2.0 100 Trying

Via: SIP/2.0/UDP 192.168.4.4:26000;branch=z9hG4bK-d8754z-87d60b47b6627c3a-1---d8754z-;rport=26000

From: "Bob"<sip:bob@192.168.4.4>;tag=15c8325a

To: "alice"<sip:alice@192.168.4.4>

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 2 INVITE

User-Agent: FreeSWITCH-mod_sofia/1.0.trunk-16981M

Content-Length: 0

FreeSWITCH 重新回 100 Trying,告诉 bob 呼叫进展情况。

至此,bob 与 FreeSWITCH 之间的通信已经初步建立,这种通信的通道称作一个信道(channel)。该信道是由 bob 的 UA 和 FreeSWITCH 的一个 UA 构成的,我们称它为 FreeSWITCH 的一条腿,叫做 a-leg。

接下来 FreeSWITCH 要建立另一条腿,称为 b-leg。它通过查打本地数据库,得到了 alice 的位置,接着启动一个 UA(用作 UAC),向 alice 发送 INVITE 消息。如下:

------------------------------------------------------------------------

send 1340 bytes to udp/[192.168.4.4]:5090 at 13:31:40.028988:

------------------------------------------------------------------------

INVITE sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP SIP/2.0

Via: SIP/2.0/UDP 192.168.4.4;rport;branch=z9hG4bKey90QUyHZQXNN

Route: <sip:alice@192.168.4.4:5090>;rinstance=e7d5364c81f2b879;transport=UDP

Max-Forwards: 69

From: "Bob" <sip:bob@192.168.4.4>;tag=Dp9ZQS3SB26pg

To: <sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP>

Call-ID: 0d74ac35-cca4-122d-81a2-2990e5b2bd3e

CSeq: 130069214 INVITE

Contact: <sip:mod_sofia@192.168.4.4:5060>

User-Agent: FreeSWITCH-mod_sofia/1.0.trunk-16981M

Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER,

NOTIFY, PUBLISH, SUBSCRIBE

Supported: timer, precondition, path, replaces

Allow-Events: talk, presence, dialog, line-seize, call-info, sla,

include-session-description, presence.winfo, message-summary, refer

Content-Type: application/sdp

Content-Disposition: session

Content-Length: 313

X-FS-Support: update_display

Remote-Party-ID: "Bob" <sip:bob@192.168.4.4>;party=calling;screen=yes;privacy=off

你可以看到,该INVITE 的 Call-ID 与前面的不同,说明这是另一个 SIP 会话(Session)。另外,它还多了一个 Remote-Party-ID,它主要是用来支持来电显示。因为,在 alice 的话机上,希望显示 bob 的号码,显示呼叫它的那个 UA(负责 b-leg的那个 UA)没什么意义。与普通的 POTS 电话不同,在 SIP 电话中,不仅能显示电话号码(这里是 bob),还能显示一个可选的名字(“Bob”)。这也说明了 FreeSWITCH 这个 B2BUA 本身是一个整体,它虽然是以一个单独的 UA 呼叫 alice,但还是跟负责 bob 的那个 UA 有联系--就是这种背靠背的串联。

------------------------------------------------------------------------

recv 309 bytes from udp/[192.168.4.4]:5090 at 13:31:40.193634:

------------------------------------------------------------------------

SIP/2.0 100 Trying

Via: SIP/2.0/UDP 192.168.4.4;rport=5060;branch=z9hG4bKey90QUyHZQXNN

To: <sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP>

From: "Bob" <sip:bob@192.168.4.4>;tag=Dp9ZQS3SB26pg

Call-ID: 0d74ac35-cca4-122d-81a2-2990e5b2bd3e

CSeq: 130069214 INVITE

Content-Length: 0

跟上面的流程差不多,alice回的呼叫进展。此时,alice 的 UA 开始振铃。

------------------------------------------------------------------------

recv 431 bytes from udp/[192.168.4.4]:5090 at 13:31:40.193816:

------------------------------------------------------------------------

SIP/2.0 180 Ringing

Via: SIP/2.0/UDP 192.168.4.4;rport=5060;branch=z9hG4bKey90QUyHZQXNN

Contact: <sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP>

To: <sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP>;tag=3813e926

From: "Bob"<sip:bob@192.168.4.4>;tag=Dp9ZQS3SB26pg

Call-ID: 0d74ac35-cca4-122d-81a2-2990e5b2bd3e

CSeq: 130069214 INVITE

User-Agent: Zoiper rev.5415

Content-Length: 0

180也是呼叫进展消息,它说明,我这边已经准备好了,alice 的电话已经响了,她听到了一会就会接听。

send 1125 bytes to udp/[192.168.4.4]:26000 at 13:31:40.270533:

------------------------------------------------------------------------

SIP/2.0 183 Session Progress

Via: SIP/2.0/UDP 192.168.4.4:26000;branch=z9hG4bK-d8754z-87d60b47b6627c3a-1---d8754z-;rport=26000

From: "Bob"<sip:bob@192.168.4.4>;tag=15c8325a

To: "alice" <sip:alice@192.168.4.4>;tag=cDg7NyjpeSg4m

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 2 INVITE

Contact: <sip:alice@192.168.4.4:5060;transport=udp>

User-Agent: FreeSWITCH-mod_sofia/1.0.trunk-16981M

Accept: application/sdp

Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER,

NOTIFY, PUBLISH, SUBSCRIBE

Supported: timer, precondition, path, replaces

Allow-Events: talk, presence, dialog, line-seize, call-info, sla,

include-session-description, presence.winfo, message-summary, refer

Content-Type: application/sdp

Content-Disposition: session

Content-Length: 267

Remote-Party-ID: "alice" <sip:alice@192.168.4.4>

FreeSWITCH 在收到 alice 的 180 Ringing 消息后,便告诉 bob 呼叫进展情况,183 与 180 不同的是,它包含 SDP,即接下来它会向 bob 发送 RTP 的媒体流,就是回铃音。

------------------------------------------------------------------------

recv 768 bytes from udp/[192.168.4.4]:5090 at 13:31:43.251980:

------------------------------------------------------------------------

SIP/2.0 200 OK

Via: SIP/2.0/UDP 192.168.4.4;rport=5060;branch=z9hG4bKey90QUyHZQXNN

Contact: <sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP>

To: <sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP>;tag=3813e926

From: "Bob"<sip:bob@192.168.4.4>;tag=Dp9ZQS3SB26pg

Call-ID: 0d74ac35-cca4-122d-81a2-2990e5b2bd3e

CSeq: 130069214 INVITE

Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE

Content-Type: application/sdp

User-Agent: Zoiper rev.5415

Content-Length: 226

alice 接听电话以后,其 UA 向 FreeSWITCH 送 200 OK,即应答消息。

------------------------------------------------------------------------

send 436 bytes to udp/[192.168.4.4]:5090 at 13:31:43.256692:

------------------------------------------------------------------------

ACK sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP SIP/2.0

Via: SIP/2.0/UDP 192.168.4.4;rport;branch=z9hG4bKF72SSpFNv0K8g

Max-Forwards: 70

From: "Bob" <sip:bob@192.168.4.4>;tag=Dp9ZQS3SB26pg

To: <sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP>;tag=3813e926

Call-ID: 0d74ac35-cca4-122d-81a2-2990e5b2bd3e

CSeq: 130069214 ACK

Contact: <sip:mod_sofia@192.168.4.4:5060>

Content-Length: 0

FreeSWITCH 向 alice 回送证实消息,证实已经知道了。至此,b-leg已经完全建立完毕,多半这时 alice 已经开始说话了:“Hi, bob,你好……”

------------------------------------------------------------------------

send 1135 bytes to udp/[192.168.4.4]:26000 at 13:31:43.293311:

------------------------------------------------------------------------

SIP/2.0 200 OK

Via: SIP/2.0/UDP 192.168.4.4:26000;branch=z9hG4bK-d8754z-87d60b47b6627c3a-1---d8754z-;rport=26000

From: "Bob"<sip:bob@192.168.4.4>;tag=15c8325a

To: "alice" <sip:alice@192.168.4.4>;tag=cDg7NyjpeSg4m

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 2 INVITE

Contact: <sip:alice@192.168.4.4:5060;transport=udp>

User-Agent: FreeSWITCH-mod_sofia/1.0.trunk-16981M

Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER,

NOTIFY, PUBLISH, SUBSCRIBE

Supported: timer, precondition, path, replaces

Allow-Events: talk, presence, dialog, line-seize, call-info, sla,

include-session-description, presence.winfo, message-summary, refer

Session-Expires: 120;refresher=uas

Min-SE: 120

Content-Type: application/sdp

Content-Disposition: session

Content-Length: 267

Remote-Party-ID: "alice" <sip:alice@192.168.4.4>

与此同时,它也给 bob 送应答消息,告诉他电话已经接通了,可以跟 alice 说话了。在需要计费的情况下,应该从此时开始对 bob 的电话计费。bob 的 UA 收到该消息后启动麦克风让 bob 讲话。

------------------------------------------------------------------------

recv 697 bytes from udp/[192.168.4.4]:26000 at 13:31:43.413025:

------------------------------------------------------------------------

ACK sip:alice@192.168.4.4:5060;transport=udp SIP/2.0

Via: SIP/2.0/UDP 192.168.4.4:26000;branch=z9hG4bK-d8754z-ef53864320037c04-1---d8754z-;rport

Max-Forwards: 70

Contact: <sip:bob@192.168.4.4:26000>

To: "alice"<sip:alice@192.168.4.4>;tag=cDg7NyjpeSg4m

From: "Bob"<sip:bob@192.168.4.4>;tag=15c8325a

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 2 ACK

Proxy-Authorization: Digest username="bob",realm="192.168.4.4",

nonce="31c5c3e0-cc6e-46c8-a661-599b0c7f87d8",

uri="sip:alice@192.168.4.4",response="327887635344405bcd545da06763c466",

cnonce="c164b74f625ff2161bd8d47dba3a0ee2",nc=00000001,qop=auth,

algorithm=MD5

User-Agent: X-Lite release 1014k stamp 47051

Content-Length: 0

bob 在收到应答消息后也需要回送证实消息。至此 a-leg 也建立完毕。双方正常通话。

------------------------------------------------------------------------

recv 484 bytes from udp/[192.168.4.4]:5090 at 13:31:49.949240:

------------------------------------------------------------------------

BYE sip:mod_sofia@192.168.4.4:5060 SIP/2.0

Via: SIP/2.0/UDP 192.168.4.4:5090;branch=z9hG4bK-d8754z-2146ae0ddd113efe-1---d8754z-;rport

Max-Forwards: 70

Contact: <sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP>

To: "Bob"<sip:bob@192.168.4.4>;tag=Dp9ZQS3SB26pg

From: <sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP>;tag=3813e926

Call-ID: 0d74ac35-cca4-122d-81a2-2990e5b2bd3e

CSeq: 2 BYE

User-Agent: Zoiper rev.5415

Content-Length: 0

终于聊完了,alice 挂断电话,发送 BYE 消息。

------------------------------------------------------------------------

send 543 bytes to udp/[192.168.4.4]:5090 at 13:31:49.950425:

------------------------------------------------------------------------

SIP/2.0 200 OK

Via: SIP/2.0/UDP 192.168.4.4:5090;branch=z9hG4bK-d8754z-2146ae0ddd113efe-1---d8754z-;rport=5090

From: <sip:alice@192.168.4.4:5090;rinstance=e7d5364c81f2b879;transport=UDP>;tag=3813e926

To: "Bob"<sip:bob@192.168.4.4>;tag=Dp9ZQS3SB26pg

Call-ID: 0d74ac35-cca4-122d-81a2-2990e5b2bd3e

CSeq: 2 BYE

User-Agent: FreeSWITCH-mod_sofia/1.0.trunk-16981M

Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER,

NOTIFY, PUBLISH, SUBSCRIBE

Supported: timer, precondition, path, replaces

Content-Length: 0

FreeSWITCH 返回 OK,b-leg 释放完毕。

------------------------------------------------------------------------

send 630 bytes to udp/[192.168.4.4]:26000 at 13:31:50.003165:

------------------------------------------------------------------------

BYE sip:bob@192.168.4.4:26000 SIP/2.0

Via: SIP/2.0/UDP 192.168.4.4;rport;branch=z9hG4bKggvjUH0rS99tc

Max-Forwards: 70

From: "alice" <sip:alice@192.168.4.4>;tag=cDg7NyjpeSg4m

To: "Bob" <sip:bob@192.168.4.4>;tag=15c8325a

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 130069219 BYE

Contact: <sip:alice@192.168.4.4:5060;transport=udp>

User-Agent: FreeSWITCH-mod_sofia/1.0.trunk-16981M

Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER,

NOTIFY, PUBLISH, SUBSCRIBE

Supported: timer, precondition, path, replaces

Reason: Q.850;cause=16;text="NORMAL_CLEARING"

Content-Length: 0

接下来 FreeSWITCH 给 bob 发送 BYE,通知要拆线了。出于对 bob 负责,它包含了挂机原因(Hangup Cause),此处 NOMAL_CLEARING 表示正常释放。

------------------------------------------------------------------------

recv 367 bytes from udp/[192.168.4.4]:26000 at 13:31:50.111765:

------------------------------------------------------------------------

SIP/2.0 200 OK

Via: SIP/2.0/UDP 192.168.4.4;rport=5060;branch=z9hG4bKggvjUH0rS99tc

Contact: <sip:bob@192.168.4.4:26000>

To: "Bob"<sip:bob@192.168.4.4>;tag=15c8325a

From: "alice"<sip:alice@192.168.4.4>;tag=cDg7NyjpeSg4m

Call-ID: YWEwYjNlZTZjOWZjNDg3ZjU3MjQ3MTA1ZmQ1MDM5YmQ.

CSeq: 130069219 BYE

User-Agent: X-Lite release 1014k stamp 47051

Content-Length: 0

bob 回送 OK,a-leg 释放完毕,通话结束。从下图可以很形象地看出 FreeSWITCH 的两条“腿”-- a-leg 和 b-leg。

B2BUA



整个呼叫流程图示如下:

bob (UAC) [ UAS-UAC ] (UAS) alice

| | | |

| INVITE | | |

|-------------------->| | |

| 100 Trying | | |

|<--------------------| | |

| 407 Authentication Required |

|<--------------------| | |

| ACK | | |

|-------------------->| | |

| INVITE | | |

|-------------------->| | |

| 100 Trying | | INVITE |

|<--------------------< >-------------------->|

| | | 100 Trying |

| | |<--------------------|

| 183 Progress | | 180 Ringing |

|<--------------------< |<--------------------|

| | | 200 OK |

| | |<--------------------|

| 200 OK | | ACK |

|<--------------------< >-------------------->|

| ACK | | |

|-------------------->| | |

| |

| Call Connected |

| |

| | | BYE |

| | |<--------------------|

| BYE | | 200 OK |

|<--------------------< >-------------------->|

| 200 OK | | |

|-------------------->| | |

| | | |

从流程图可以看出,右半部分跟上一节“UA间直接呼叫”一样,而左半部分也类似。这就更好的说明了实际上有 4 个 UA (两对)参与到了通信中,并且,有两个 Session。

再论 SIP URI

上面我们介绍了一些 FreeSWITCH 的基本概念,并通过一个真正的呼叫流程讲解了一下 SIP。由于实验中所有 UA 都 运行在一台机器上,这可能会引起迷惑,如果我们有三台服务器,那么情况可能是:

/---------------\

| FreeSWITCH |

| 192.168.0.1 |

\ --------------/

sip:bob@192.168.0.1 / \ sip:alice@192.168.0.1

/ \

/ \

/-----------------\ /-----------------\

| bob | | alice |

| 192.168.0.100 | | 192.168.0.200 |

\-----------------/ \-----------------/

sip:bob@192.168.0.100 sip:alice@192.168.0.200

alice 注册到 FreeSWITCH,bob呼叫她时,使用她的服务器地址,即 sip:alice@192.168.0.1,FreeSWITCH 接到请求后,查找本地数据库,发现 alice 的实际地址是 sip:alice@192.168.0.200,便可以建立呼叫。

SIP URI 除使用 IP 地址外,也可以使用域名,如 sip:alice@freeswitch.org.cn。更高级也更复杂的配置则需要 DNS 的 SRV 记录,在此就不做讨论了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: