SIP协议&开源SIP服务器搭建和客户端安装

本文深入探讨SIP协议,包括基本组成要素、呼叫流程(注册、注销、建立、释放、无应答流程)和代理服务器路由。此外,介绍了多个开源SIP服务器(如OpenSIPS)与客户端(如Twinkle, Linphone),并详述了OpenSIPS的搭建环境与客户端编译安装步骤。" 82193733,5637955,C# 泛型深入解析,"['C#', '泛型', '编程', '类型系统']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. SIP

SIP 是一个应用层的控制协议,可以用来建立,修改,和终止多媒体会话,例如Internet电话

SIP在建立和维持终止多媒体会话协议上,支持五个方面:

1)   用户定位: 检查终端用户的位置,用于通讯。

2)   用户有效性:检查用户参与会话的意愿程度。

3)   用户能力:检查媒体和媒体的参数。

4)   建立会话: “ringing”,建立会话参数在呼叫方和被叫方。

5)       会话管理:包括发送和终止会话,修改会话参数,激活服务等等。

1.1 SIP基本组成要素

用户代理:SIP用户代理是一个SIP逻辑网络端点,用于创建、发送、接收SIP消息并管理一个SIP会话

代理服务器:SIP代理服务器(PROXY)在网络上位于SIP UAC和UAS之间,用于帮助UAC和UAS间的消息路由

注册服务器:SIP注册服务器用于接收SIP注册请求,并保存发送注册请求的UA的位置信息

重定向服务器:SIP 重定向服务器允许 SIP 代理服务器将 SIP 会话邀请信息定向到外部域


1.2 SIP 基本呼叫流程

1.2.1 注册流程


1.       用户首次试呼时,终端代理A向代理服务器发送REGISTER 注册请求。

2.       代理服务器通过后端认证/计费中心获知用户信息不在数据库中,便向终端代理回送401Unauthorized 质询信息,其中包含安全认证所需的令牌。

3.       终端代理提示用户输入其标识和密码后,根据安全认证令牌将其加密后,再次用REGISTER 消息报告给代理服务器。

4.       代理服务器将REGISTER消息中的用户信息解密,通过认证/计费中心验证其合法后,     将该用户信息登记到数据库中,并向终端代理A 返回成功响应消息200 OK。

1.2.2 注销流程


1.       终端向代理服务器送Register消息注销,其头中expire 字段置0。

2.       代理服务器收到后回送200OK 响应,并将数据库中的用户有关信息注销。

1.2.3 基本呼叫建立过程


1.       用户摘机发起一路呼叫,终端代理A 向该区域的代理服务器发起Invite 请求。

2.       代理服务器通过认证/计费中心确认用户认证已通过后,检查请求消息中的Via 头域中是否已包含其地址。若已包含,说明发生环回,返回指示错误的应答。如果没有问题,代理服务器在请求消息的Via 头域插入自身地址,并向Invite 消息的To 域所指示的被叫终端代理B 转送Invite 请求。

3.       代理服务器向终端代理A 送呼叫处理中的应答消息,100 Trying。

4.       终端代理B 向代理服务器送呼叫处理中的应答消息,100 Trying;

5.       终端代理B 指示被叫用户振铃,用户振铃后,向代理服务器发送180 Ringing 振铃信息。

6.       代理服务器向终端代理A 转发被叫用户振铃信息。

7.       被叫用户摘机,终端代理B 向代理服务器返回表示连接成功的应答(200 OK)。

8.       代理服务器向终端代理A 转发该成功指示(200 OK)。

9.       终端代理A 收到消息后,向代理服务器发ACK 消息进行确认。

10.   代理服务器将ACK 确认消息转发给终端代理B。

11.   主被叫用户之间建立通信连接,开始通话。

1.2.4 正常呼叫释放过程


1.       用户通话结束后,被叫用户挂机,终端代理B 向代理服务器发送Bye 消息。

2.       代理服务器转发Bye 消息至终端代理A,同时向认证/计费中心送用户通话的详细信息,请求计费。

3.       主叫用户挂机后,终端代理A向代理服务器发送确认挂断响应消息200 OK。

4.       代理服务器转发响应消息200OK。

1.2.5 被叫无应答流程一


1.       用户A 发起一路呼叫,终端代理A 向代理服务器发Invite 请求消息。

2.       代理服务器向被叫用户的终端代理B 转发该Invite 请求。

3.       代理服务器向终端代理A 回送100 Trying 响应,表示呼叫已在处理中。

4.       终端代理B向代理服务器回送100 Trying,告知代理服务器呼叫正在处理。

5.       被叫用户振铃,终端代理B 向代理服务器送180 Ring 响应。

6.       代理服务器向终端代理A 转发该响应消息。

7.       被叫久振铃无应答,终端代理A判断超时后,向代理服务器送Cancel 消息放弃该呼叫。

8.       代理服务器收到Cancel消息后,向终端代理A 回送200 OK 响应。

9.       代理服务器将Cancel 消息转发给终端代理B。

10.   终端代理B 向代理服务器回送200 OK 响应。

11.   终端代理B 向代理服务器送487 请求已撤销的响应消息。

12.   代理服务器收到后回送ACK确认。

13.   代理服务器向终端代理A 送487 请求已撤销消息。

14.   终端代理A 向代理服务器回送ACK 确认。

1.2.6 被叫无应答流程二



1.       用户A 发起一路呼叫,终端代理A 向代理服务器发Invite 请求消息。

2.       代理服务器向被叫用户的终端代理B 转发该Invite 请求。

3.       代理服务器向终端代理A 回送100 Trying 响应,表示呼叫已在处理中。

4.       终端代理B向代理服务器回送100 Trying,告知代理服务器呼叫正在处理。

5.       被叫用户振铃,终端代理B 向代理服务器送180 Ring 响应。

6.       代理服务器向终端代理A 转发该响应消息。

7.       被叫久振铃无应答,终端代理B判断超时后,向代理服务器送408 Request timeout 消息放弃该呼叫。

8.       代理服务器收到408Request timeout 消息后,转发该消息给终端代理A。

9.       代理服务器收到后回送ACK确认给终端代理B。

10.   终端代理A 向代理服务器回送ACK 确认。

1.3 代理服务器的路由

1.3.1 路由记录的一般过程

1)       proxy会检查Request-URI。如果它指向的是本proxy所负责的区域,那么proxy会用位置服务的结果来替换这个URI。否则,proxy不改变这个URI。

2)       proxy会检查Route头域的最上URI。如果这个URI指向这个proxy,这个proxy从Route头域中移除(这个路由节点已经到达)。

3)       proxy会转发请求到最上的Route头域值所标志的URI,或者Request-URI(如果没有Route头域)。

1.3.2 基本SIP四边形

本例子是一个基本的SIP四边传送,U1->P1->P2->U2,使用proxy来传送。下边是过程。

 

U1 发送:

INVITE sip:callee@domain.com SIP/2.0

Contact: sip:caller@u1.example.com

发给P1,P1是一个外发的proxy。P1并不管辖domain.com,所以它查找DNS并且发送请求到那里。它也增加一个Record-Route头域值:

INVITE sip:callee@domain.com SIP/2.0

Contact: sip:caller@u1.example.com

Record-Route: <sip:p1.example.com;lr>

 

P2收到这个请求。这是domain.com所以它查找位置服务器并且重写Request-URI。它也增加一个Record-Route头域值。请求中没有Route头域,所以它解析一个新的Request-URI来决定把请求发送到哪里。

INVITE sip:callee@u2.domain.com SIP/2.0

Contact: sip:caller@u1.example

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值