SIP协议之呼叫流程

article/2025/9/23 13:11:14

    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中的媒体地址。


http://chatgpt.dhexx.cn/article/wNBWK0M4.shtml

相关文章

GB/T 28181-2011、2016、2022变更对比

一、GB/T 28181-2016与GB/T 28181-2011变更对比 GB/T 28181-2016与GB/T 28181-2011相比&#xff0c; 除编辑性修改外主要技术变化如下&#xff1a; ----(1) 修改了标准名称&#xff1b; ----(2) 增加了媒体流TCP传输要求(见4.3.1&#xff0c; 5.2&#xff0c;附录F&#xff…

会话描述协议-SDP

目录 一. 前言 二. 标准SDP规范说明 会话级描述 媒体级描述 三. WebRTC的SDP 会话描述 媒体信息描述 网络描述 安全描述 服务质量描述 四. 其他 一. 前言 SDP&#xff08;Session Description Protocol&#xff09; 是一种通用的会话描述协议&#xff0c;例如在音视…

h264和h265视频流SDP描述详解

文章目录 1 SDP概述 2.SDP媒体描述极其扩展属性 2.1 m属性介绍 2.2 acontrol附加属性介绍 2.3 artpmap附加属性介绍 2.4 afmtp附加属性介绍 SDP&#xff08;Session Description Protocol&#xff09;会话描述协议&#xff0c;是一种用来描述信息格式的标准&#xff0c;它…

表格标签

表格标签 规则表格 不规则表格–跨行和跨列 表格的高级标签–标题标签和逻辑分区标签

Android实现Excel表格样式

原理描述&#xff1a; 想写来着&#xff0c;但是似乎描述不太清楚。效果图来着&#xff0c;没找到好的视频录制软件&#xff0c;直接上代码吧。 代码&#xff1a; 1、xml布局文件 自定义控件的包名删除了部分&#xff0c;需要重新导入自定义控件&#xff01;&#xff01;&a…

Apache POI 操作Excel表格使用详解 最全

1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 Microsoft Office文档的功能。 (2)POI结构说明 包名称 说明 HSSF 提供…

022_Table表格

1. Table表格例子 1.1. Table表格用于展示多条结构类似的数据, 可对数据进行排序、筛选、对比或其他自定义操作。 1.2. Table Attributes 参数 说明 类型 可选值 默认值 data 显示的数据 array 无 无 height Table的高度, 默认为自动高度。如果height为number类型…

java 导入导出excel表格

java 导入导出excel表格 业务上有需求上传excel表格并读取内容&#xff0c;本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.4.0&l…

python逻辑回归

出现函数重名问题 异常抛出 异常抛出 #逻辑回归测试 import pandas as pd from sklearn.linear_model import LogisticRegression as LR filename C:/Users/29463/OneDrive/桌面/bankloan.xls data pd.read_excel(filename) #print(data) x data.iloc[:,:8].values y data…

实现带标题的ListView

在一些项目中&#xff0c;往往有要求为ListView里的内容分类&#xff0c;比如按日期分类&#xff0c;就要把相同日期的项目放在一起。可以看一些示例图&#xff0c;会清楚一些&#xff1a; 以上根据标题来进行分类&#xff0c;实现代码如下&#xff1a; 首先是数据项的模型…

java操作excel表格详解

在日常工作中&#xff0c;对Excel工作表格的操作处理可是多的数不清楚&#xff0c;下面是java语言对其的操作&#xff0c;有需要的小伙伴可以参考下 使用场景 1、将用户信息导出为excel表格&#xff08;导出数据…) 2、将Excel表中的信息录入到网站数据库(习题上传…&#xf…

安卓表格框架-ExcelView

转载请标明来源&#xff1a;安卓表格框架-ExcelView_分享记录-CSDN博客 Github地址&#xff0c;欢迎star&#xff1a;https://github.com/September26/ExcelView 一.项目介绍 项目是仿照WPS中Excel的功能实现的&#xff0c;实现了显示&#xff0c;滑动&#xff0c;编辑等基本…

html表格打印填充分页,window.print()页面打印之表格内容分页填充进行分页打印

windwow.print()用于打印当前窗口的内容,很简便,可当内容特殊并且打印有特殊需求的时候就要绕个圈了。下面是需要打印的表格: 当数据量少的时候像上面的表格一样,中间的内容只有5条数据,打印出来在纸上会有空白,不太好。中间内容是不确定的可能几十条,可能上百条,这样循…

在线表格

在线表格案例 模仿的是腾讯文档 首先观察腾讯文档的表格效果&#xff0c;然后在构建出思路&#xff0c;开始编写代码 效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>在线表格<…

Java获取word表格中的数据

前言: 有时系统中需要提取各种文件中的数据&#xff0c;比如做报表的系统中就常常与Excel表格数据做交互。做Excel报表数据时有选择POI实现的&#xff0c;但是POI功能也很单一&#xff0c;对于文档格式维护性差&#xff0c;最重要的是POI在操作word数据时显得力不从心&#xf…

HTML 表格元素

表格元素 在日常生活中&#xff0c;我们对表格已经非常熟悉了&#xff0c;表格的基本作用是用来存放数据&#xff0c;它是数据的二维容器&#xff0c;人们常常用它来记录财务数据、列车时刻表、电视节目单等。 大多数情况下&#xff0c;表格都是由列标题或行标题&#xff0c;…

Bootstrap3 表格样式

表格 HTML表格是数据的二维容器&#xff0c;它的基本作用是用来存放数据。表格能够清晰、直观地描述数据间的逻辑关系&#xff0c;如果借助CSS设计表格的样式&#xff0c;阅读数据将会变得更轻松。 表格结构包括众多标签&#xff0c;这些标签各司其职&#xff0c;共同完成二维…

数据库表格查询

1、数据库表示存储数据中所有数据的对象&#xff0c;在表中&#xff0c;数据按行和烈格式逻辑组织&#xff0c;类似于电子表格&#xff0c;数据库是SchoolMangeSystem&#xff0c;使用数据库表是SYS_Student&#xff0c;如下图&#xff1a; select字段列表&#xff0c;字段别名…

html中标题距离顶部距离,版式设计中标题间距的使用法则

主标题与副标题定义 主标题是文案的核心主旨&#xff0c;可以直接表达&#xff0c;也可以含蓄表达&#xff0c; 副标题是对对主标题意思的具体阐释&#xff0c;或者主标题意思的进一步延伸。 字距与行距 横向的字间距与纵向的行间距的关系&#xff1a; 请保持行间距的高度&…

表格解析 概览

表格解析发展至今&#xff0c;仍然是一项很年轻的研究领域&#xff0c;出现了大量解决方案&#xff0c;常用的技术包括&#xff1a;线检测、box检测、分割、多模态融合、GCN、img2seq。以下按我的理解梳理一下表格解析各个流派&#xff0c;从中了解这项任务背后所采用的技术。在…