SIP协议之呼叫流程

    SIP呼呼叫是SIP协议最基本的功能。一个用户呼叫另外一个用户最终完成多媒体通话。此处以常见的B2BUA的服务器模式进行介绍。

环境说明:


主叫:1006  192.168.1.131
被叫:1012  192.168.0.24
SIP服务器(以下简称服务器): 192.168.0.201  主、被叫均注册在此服务器


1 主叫输入1012号码,开始呼叫
2 被叫收到1006来电,点击接听
3 主叫点击挂断结束通话

流程图如下:
    
    

信令流程:

编号1: 主叫发出INVITE到服务器
INVITE sip:1012@192.168.0.201 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.131:56980;branch=z9hG4bK-d87543-bd00a80d61174148-1--d87543-;rport
Max-Forwards: 70
Contact: <sip:1006@192.168.1.131:56980>    //1006的联系地址
To: "1012"<sip:1012@192.168.0.201>
From: "1006"<sip:1006@192.168.0.201>;tag=11703172
Call-ID: NDI2ODA4NmE4OTNlYjlhN2NlYzIxYzcxMzc0MTEzZTY.
CSeq: 1 INVITE
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Content-Type: application/sdp   //表明后面的消息体类型是SDP
User-Agent: eyeBeam release 1011d stamp 40820
Content-Length: 436

//以下为消息体部分

v=0
o=- 8 2 IN IP4 192.168.1.131
s=CounterPath eyeBeam 1.5
c=IN IP4 192.168.1.131
t=0 0
m=audio 1572 RTP/AVP 0 8 18 101   //支持的语音编码
a=alt:1 3 : YqBcv0hx k0Ir1UAh 192.168.1.131 1572
a=alt:2 2 : x3fHBmJC A3UcAV4D 192.168.197.1 1572
a=alt:3 1 : mxpdOrEC wrgtrc0h 192.168.44.1 1572
a=fmtp:18 annexb=no
a=fmtp:101 0-15
a=rtpmap:18 G729/8000
a=rtpmap:101 telephone-event/8000
a=sendrecv
a=x-rtp-session-id:747024EE416C401C864D1F625FC7E145

编号2: 服务器回复主叫100 Trying
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.1.131:56980;branch=z9hG4bK-d87543-bd00a80d61174148-1--d87543-;rport=56980
From: "1006" <sip:1006@192.168.0.201>;tag=11703172
To: "1012" <sip:1012@192.168.0.201>
Call-ID: NDI2ODA4NmE4OTNlYjlhN2NlYzIxYzcxMzc0MTEzZTY.
CSeq: 1 INVITE
User-Agent: FreeSWITCH-mod_sofia/1.10.7-dev+git~20210720T181005Z~4c04914003~64bit
Content-Length: 0

编号3:服务器发INVITE被叫
INVITE sip:1012@192.168.0.24:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.201;rport;branch=z9hG4bK6XZZ1QaaZjr3p
Max-Forwards: 68
From: "1006" <sip:1006@192.168.0.201>;tag=SrUQ72vvXSHFK
To: <sip:1012@192.168.0.24:5060>
Call-ID: 2ffaf428-2148-123b-649f-000c29e7aea9
CSeq: 49245689 INVITE
Contact: <sip:mod_sofia@192.168.0.201:5060>
User-Agent: FreeSWITCH-mod_sofia/1.10.7-dev+git~20210720T181005Z~4c04914003~64bit
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
Content-Type: application/sdp
Content-Disposition: session
Content-Length: 424
X-FS-Support: update_display,send_info
Remote-Party-ID: "1006" <sip:1006@192.168.0.201>;party=calling;screen=yes;privacy=off

v=0
o=- 8 2 IN IP4 192.168.1.131
s=CounterPath eyeBeam 1.5
c=IN IP4 192.168.1.131
t=0 0
m=audio 1572 RTP/AVP 0 8 18 101
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=alt:1 3 : YqBcv0hx k0Ir1UAh 192.168.1.131 1572
a=alt:2 2 : x3fHBmJC A3UcAV4D 192.168.197.1 1572
a=alt:3 1 : mxpdOrEC wrgtrc0h 192.168.44.1 1572
a=x-rtp-session-id:747024EE416C401C864D1F625FC7E145


编号4:被叫回复服务器100-Trying
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.0.201;rport=5060;received=192.168.0.201;branch=z9hG4bK6XZZ1QaaZjr3p
Call-ID: 2ffaf428-2148-123b-649f-000c29e7aea9
From: "1006" <sip:1006@192.168.0.201>;tag=SrUQ72vvXSHFK
To: <sip:1012@192.168.0.24>
CSeq: 49245689 INVITE //该消息是应答序号为49245689 的INVITE(编号3)消息
Content-Length:  0

编号5: 被叫回复服务器180
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 192.168.0.201;rport=5060;received=192.168.0.201;branch=z9hG4bK6XZZ1QaaZjr3p
Call-ID: 2ffaf428-2148-123b-649f-000c29e7aea9
From: "1006" <sip:1006@192.168.0.201>;tag=SrUQ72vvXSHFK
To: <sip:1012@192.168.0.24>;tag=3fVxEhXmI66Iss8a6YjNDWRhpIFlIEP1
CSeq: 49245689 INVITE
Contact: "1012" <sip:1012@192.168.0.24:5060>
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
User-Agent: VoIP
Content-Length:  0

编号6:服务器回复主叫180 
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 192.168.1.131:56980;branch=z9hG4bK-d87543-bd00a80d61174148-1--d87543-;rport=56980
From: "1006" <sip:1006@192.168.0.201>;tag=11703172
To: "1012" <sip:1012@192.168.0.201>;tag=rF2y57BS0gUvQ
Call-ID: NDI2ODA4NmE4OTNlYjlhN2NlYzIxYzcxMzc0MTEzZTY.
CSeq: 1 INVITE   //该消息是应答序号为1的INVITE(编号1)消息
Contact: <sip:1012@192.168.0.201:5060;transport=udp>
User-Agent: FreeSWITCH-mod_sofia/1.10.7-dev+git~20210720T181005Z~4c04914003~64bit
Accept: application/sdp
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
Content-Length: 0
Remote-Party-ID: "1012" <sip:1012@192.168.0.201>;party=calling;privacy=off;screen=no


编号7:被叫接听,回复服务器200
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.201;rport=5060;received=192.168.0.201;branch=z9hG4bK6XZZ1QaaZjr3p
Call-ID: 2ffaf428-2148-123b-649f-000c29e7aea9
From: "1006" <sip:1006@192.168.0.201>;tag=SrUQ72vvXSHFK
To: <sip:1012@192.168.0.24>;tag=3fVxEhXmI66Iss8a6YjNDWRhpIFlIEP1
CSeq: 49245689 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
User-Agent: VoIP
Contact: "1012" <sip:1012@192.168.0.24:5060>
Supported: replaces, 100rel
Content-Type: application/sdp
Content-Length:   227

v=0
o=- 3856587767 3856587769 IN IP4 192.168.0.24
s=SDP
c=IN IP4 192.168.0.24
t=0 0
m=audio 10004 RTP/AVP 0 101    //协商后语音编码是0(PCMU)
c=IN IP4 192.168.0.24
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendrecv

编号8: 服务器发ACK到被叫
ACK sip:1012@192.168.0.24:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.201;rport;branch=z9hG4bK76rr3jUDvUepj
Max-Forwards: 70
From: "1006" <sip:1006@192.168.0.201>;tag=SrUQ72vvXSHFK
To: <sip:1012@192.168.0.24:5060>;tag=3fVxEhXmI66Iss8a6YjNDWRhpIFlIEP1
Call-ID: 2ffaf428-2148-123b-649f-000c29e7aea9
CSeq: 49245689 ACK
Contact: <sip:mod_sofia@192.168.0.201:5060>
Content-Length: 0

编号9: 服务器回复主叫200
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.131:56980;branch=z9hG4bK-d87543-bd00a80d61174148-1--d87543-;rport=56980
From: "1006" <sip:1006@192.168.0.201>;tag=11703172
To: "1012" <sip:1012@192.168.0.201>;tag=rF2y57BS0gUvQ
Call-ID: NDI2ODA4NmE4OTNlYjlhN2NlYzIxYzcxMzc0MTEzZTY.
CSeq: 1 INVITE
Contact: <sip:1012@192.168.0.201:5060;transport=udp>
User-Agent: FreeSWITCH-mod_sofia/1.10.7-dev+git~20210720T181005Z~4c04914003~64bit
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
Content-Type: application/sdp
Content-Disposition: session
Content-Length: 215
Remote-Party-ID: "Outbound Call" <sip:1012@192.168.0.201>;party=calling;privacy=off;screen=no

v=0
o=- 3856587767 3856587769 IN IP4 192.168.0.24
s=SDP
c=IN IP4 192.168.0.24
t=0 0
m=audio 10004 RTP/AVP 0 101
c=IN IP4 192.168.0.24
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15

编号10: 主叫发ACK到服务器
ACK sip:1012@192.168.0.201:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 192.168.1.131:56980;branch=z9hG4bK-d87543-66782236ac1f413c-1--d87543-;rport
Max-Forwards: 70
Contact: <sip:1006@192.168.1.131:56980>
To: "1012"<sip:1012@192.168.0.201>;tag=rF2y57BS0gUvQ
From: "1006"<sip:1006@192.168.0.201>;tag=11703172
Call-ID: NDI2ODA4NmE4OTNlYjlhN2NlYzIxYzcxMzc0MTEzZTY.
CSeq: 1 ACK
User-Agent: eyeBeam release 1011d stamp 40820
Content-Length: 0


此时双方完成通话建立,可以进行语音通话(互相发送RTP语音包)

编号11: 主叫挂断电话,发BYE到服务器
BYE sip:1012@192.168.0.201:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 192.168.1.131:56980;branch=z9hG4bK-d87543-0139516e9a4ac937-1--d87543-;rport
Max-Forwards: 70
Contact: <sip:1006@192.168.1.131:56980>
To: "1012"<sip:1012@192.168.0.201>;tag=rF2y57BS0gUvQ
From: "1006"<sip:1006@192.168.0.201>;tag=11703172
Call-ID: NDI2ODA4NmE4OTNlYjlhN2NlYzIxYzcxMzc0MTEzZTY.
CSeq: 2 BYE
User-Agent: eyeBeam release 1011d stamp 40820
Reason: SIP;description="User Hung Up"
Content-Length: 0

编号12: 服务器回复200到服务器
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.131:56980;branch=z9hG4bK-d87543-0139516e9a4ac937-1--d87543-;rport=56980
From: "1006" <sip:1006@192.168.0.201>;tag=11703172
To: "1012" <sip:1012@192.168.0.201>;tag=rF2y57BS0gUvQ
Call-ID: NDI2ODA4NmE4OTNlYjlhN2NlYzIxYzcxMzc0MTEzZTY.
CSeq: 2 BYE
User-Agent: FreeSWITCH-mod_sofia/1.10.7-dev+git~20210720T181005Z~4c04914003~64bit
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Content-Length: 0


编号13: 服务器发BYE到被叫
BYE sip:1012@192.168.0.24:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.201;rport;branch=z9hG4bK8FjH5DcHS448D
Max-Forwards: 70
From: "1006" <sip:1006@192.168.0.201>;tag=SrUQ72vvXSHFK
To: <sip:1012@192.168.0.24:5060>;tag=3fVxEhXmI66Iss8a6YjNDWRhpIFlIEP1
Call-ID: 2ffaf428-2148-123b-649f-000c29e7aea9
CSeq: 49245690 BYE
User-Agent: FreeSWITCH-mod_sofia/1.10.7-dev+git~20210720T181005Z~4c04914003~64bit
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Reason: SIP;description="User Hung Up"
Content-Length: 0


编号14: 服务器发200到主叫
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.201;rport=5060;received=192.168.0.201;branch=z9hG4bK8FjH5DcHS448D
Call-ID: 2ffaf428-2148-123b-649f-000c29e7aea9
From: "1006" <sip:1006@192.168.0.201>;tag=SrUQ72vvXSHFK
To: <sip:1012@192.168.0.24>;tag=3fVxEhXmI66Iss8a6YjNDWRhpIFlIEP1
CSeq: 49245690 BYE    //这个200 OK是应答序号为49245690的BYE(编号13)消息的
Content-Length:  0

关键说明:


    1. 1006通过服务器呼叫1012,并且服务器是背靠背模式(B2BUA),因此通话是由两段通话桥接起来的,每一段通话都有各自唯一的Call-ID

       第一段通话: Call-ID: NDI2ODA4NmE4OTNlYjlhN2NlYzIxYzcxMzc0MTEzZTY.

       第二段通话:Call-ID: 2ffaf428-2148-123b-649f-000c29e7aea9


    2. 一段通话是1006到服务器,另一段通话是服务器到1012


    3. 主叫发起INVITE(编号1)消息携带自己的媒体类型audio(语音),表明这是一个语音通话


    4. 回复100 Trying(编号2和编号4)是防止请求方重传INVITE(按rfc3261协议,如果INVITE发送方未收到任何应答,则会按0.5,1,2,4,8..进行重传,直到累计重传时间达到32秒)


    5. 服务器查找到被叫的地址后,发起一个新的INVITE(编号3)请求到被叫1012


    6. 被叫回复180(编号5,此时被叫会开始振铃提示有来电)


    7. 收到被叫180后,服务器回复主叫180(编号6),此时主叫会产生回铃音(表示被叫正在振铃)


    8.  被叫用户接听,被叫回复服务器200(编号7)。服务器发送ACK到被叫。此时服务器与被叫完成对话建立。被叫开始向INVITE消息中的媒体地址(IP:192.168.1.131,端口:1572)发送rtp语音包


    9. 服务器回复主叫200,主叫向服务器发ACK。此时主叫与服务器完成对话建立。主叫开始向200消息中的媒体地址(IP:192.168.0.24,端口:10004)发送rtp语音包

    10. 呼叫过程中,媒体编码是通过INVITE消息体中的SDP和200消息体中的SDP进行协商的

    11. 通话过程中,文中使用服务器为媒体流透传模式,即主、被叫的RTP包不经过服务器,直接发给对方。实际环境中,有的服务器需要主、被叫媒体流经过。 分析问题时注意观察SDP中的媒体地址。

  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: SIP(会话发起协议)是一种网络通信协议,用于建立、修改和终止多媒体会话,如语音和视频通话。它是VoIP(互联网语音)系统中的核心协议之一。 SIP协议通过消息的方式进行通信,其中包括请求消息和响应消息。请求消息用于发起会话,而响应消息用于回答请求。SIP定义了一系列的请求方法,如INVITE(主动发起会话邀请)、ACK(确认请求消息)、CANCEL(取消会话)和BYE(终止会话)等。 SIP协议的核心概念是用户代理(User Agent)和服务器。用户代理可以是软件应用程序、硬件设备或者移动终端,用于发起和接受会话请求。服务器则负责处理请求,如注册、路由、转发和处理会话状态。 SIP协议具有灵活性和可扩展性。它支持各种媒体类型,并且可以适应不同网络环境。SIP协议还可以与其他应用层协议集成,如实时传输协议(RTP)用于传输音频和视频数据。 SIP协议在互联网通信中扮演着重要角色。它被广泛应用于VoIP系统、即时通信、视频会议、呼叫中心和远程协作等领域。通过使用SIP协议,用户可以简便地建立和管理多媒体会话,实现高效的通信体验。 总之,SIP协议是一种用于建立、修改和终止多媒体会话的通信协议。它具有灵活性和可扩展性,在互联网通信中发挥着重要作用。 ### 回答2: SIP(Session Initiation Protocol)是一种网络通信协议,用于建立、修改和终止多媒体会话。它被广泛用于IP电话、视频会议和即时消息等实时通信应用。 SIP协议的主要功能包括用户定位、用户身份验证、呼叫建立和信令传输等。它通过文本格式的消息交换来进行通讯,使用标准的HTTP样式请求和响应模型。 SIP协议的工作原理是基于会话的,它通过会话描述协议(SDP)来描述和交换会话信息。当一个SIP用户发起一个会话请求时,SIP服务器会根据用户的地址进行用户定位,找到用户所在的位置,并通过信令消息通知对方用户。一旦对方接受请求,会话就可以建立起来。 SIP协议还支持一些附加功能,如呼叫转移、呼叫等待和呼叫保持等。它还可以与其他协议集成,如H.323、H.248等,以实现更丰富的功能。 相比传统的电信协议SIP具有更高的灵活性和可扩展性。它可以在不同的网络环境下使用,如局域网、广域网和移动网络。此外,它还支持跨平台和跨设备的通信,使用户可以随时随地进行实时通信。 总之,SIP协议是一种用于实时通信的网络协议,它具有建立、修改和终止会话的功能。它采用文本格式的消息交换,通过会话描述协议来描述和交换会话信息。它是一种灵活、可扩展的协议,可以在不同的网络环境和设备上使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪游东戴河

你就是这个世界的唯一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值