FreeSWITCH
网络电话基础
线路对接方式
FreeSWITCH安装使用
FreeSWITCH配置
FreeSWITCH用户
FreeSWITCH问题
通道变量参数
IMS对接-JS
SIP协议
SIP流程
配置呼出呼入(IMS)
配置呼出呼入(内部用户)
测试工具(sipexer)
拨号规则
FXO与FXS
压测工具(sipp)
Zoiper软电话
FreeSwitch问题
本文档使用MrDoc发布
返回首页
-
+
SIP流程
2020年6月16日 16:00
admin
#注册流程 用户首次试呼时,终端代理A 向代理服务器发送REGISTER 注册请求; 代理服务器通过后端认证/计费中心获知用户信息不在数据库中,便向终端代理回送401Unauthorized 质询信息,其中包含安全认证所需的令牌; 终端代理提示用户输入其标识和密码后,根据安全认证令牌将其加密后,再次用REGISTER 消息报告给代理服务器; 代理服务器将REGISTER 消息中的用户信息解密,通过认证/计费中心验证其合法后,将该用户信息登记到数据库中,并向终端代理A 返回成功响应消息200 OK。  --- #注销流程 终端向代理服务器发送register消息注销,其头中expire字段设置为0。 代理服务器在收到后送回200OK响应,并将数据库中的用户有关消息注销。  --- #基本呼叫建立过程 用户摘机发起一路呼叫,终端代理A向该区域的代理服务器发起Invite请求; 代理服务器通过认证/计费中心确认用户认证已通过后,检查请求消息中的Via头域中是否已包含其地址。若已包含,说明发生环回,返回指示错误的应答;若没有问题,代理服务器在请求消息的Via头域插入自身地址,并向Invite消息的To域所指示的被叫终端代理B传送Invite请求。 代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。 终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。 终端代理B指示被叫用户振铃,用户振铃后向代理服务器发送180Ringing振铃信息。 代理服务器向终端代理A转发被叫用户振铃信息。 被叫用户摘机,终端代理B向代理服务器返回表示连接成功的应答(200OK) 代理服务器向终端代理A转发该成功指示(200OK) 终端代理A收到信息后,向代理服务器发ACK信息进行确认 代理服务器将ACK确认消息转发给终端代理B。 主被叫用户之间建立通信连接,开始通话。  --- #正常呼叫释放过程 正常呼叫 用户通话结束后,被叫用户挂机,终端代理B向代理服务器发送Bye消息。 代理服务器转发Bye消息至终端代理A,同时向认证、计费中心发送用户通话的详细信息,请求计费。 主叫用户挂机后,终端代理A向代理服务器发送确认挂断响应信息200OK。 代理服务器转发响应信息200OK。  --- #被叫忙呼叫释放 用户摘机发起一路呼叫,终端代理A向该区域代理服务器发起Invite请求; 代理服务器向被叫终端代理B传送Invite请求。 代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。 终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。 呼叫请求送到被叫终端代理B后,被叫忙,终端代理B向代理服务器送486被叫忙响应。 代理服务器向终端代理A转发该响应消息。 终端代理A向代理服务器回送ACK确认消息。 代理服务器向终端代理B送ACK确认信息。  --- #被叫无应答流程一 用户摘机发起一路呼叫,终端代理A向该区域代理服务器发起Invite请求; 代理服务器向被叫终端代理B传送Invite请求。 代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。 终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。 被叫用户振铃,终端代理B向代理服务器送180Ring响应。 代理服务器向终端代理A转发该响应信息。 被叫久振铃无应答,终端代理A判断超时后向代理服务器送Cancel消息放弃该呼叫。 代理服务器收到Cancel消息后,向终端代理A回送200OK响应。 代理服务器将Cancel消息转发给终端代理B。 终端代理B向代理服务器回送200OK响应。 终端代理B向代理服务器送487请求已撤销的响应信息。 代理服务器收到后回送ACK确认。 代理服务器向终端代理A送487请求已撤销消息。 终端代理A向代理服务器回送ACK确认。 #注:以上步骤中的(10)到(12)无严格顺序关系  --- #被叫无应答流程二 用户摘机发起一路呼叫,终端代理A向该区域代理服务器发起Invite请求; 代理服务器向被叫终端代理B传送Invite请求。 代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。 终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。 被叫用户振铃,终端代理B向代理服务器送180Ring响应。 代理服务器向终端代理A转发该响应信息。 被叫久振铃无应答,终端代理B判断超时后向代理服务器送408Requesttimeout消息放弃该呼叫。 代理服务器收到408Requesttimeout消息后,转发该消息给终端代理A。 代理服务器回送ACK确认给终端代理B。 终端代理A向代理服务器回送ACK确认。 #注:以上步骤中的(9)到(10)无严格顺序关系。  --- #遇忙呼叫前转 用户摘机发起一路呼叫,终端代理A向该区域代理服务器发起Invite请求; 代理服务器向被叫终端代理B传送Invite请求。 代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。 终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。 终端代理B忙线中,B向代理服务器发送486Busy Here响应。 代理服务器向终端代理B发送ACK确认消息。 代理服务器对此呼叫进行前转,向代理服务器C发送Invite请求消息。 代理终端C收到后指示用户振铃,同时向代理服务器发送180Ringing响应。 代理服务器向A转发收到的180Ringing响应。 被叫用户C摘机接听电话,终端代理C向代理服务器返回表示连接成功的应答(200OK) 代理服务器向终端代理A转发该成功指示(200OK) 终端代理A收到信息后,向代理服务器发ACK信息进行确认 代理服务器将ACK确认消息转发给终端代理B。 建立通信连接,开始通话。 主叫用户挂机,终端代理A向代理服务器发送Bye消息,请求挂机。 代理服务器转发Bye消息至终端代理C,指示C挂机。 终端代理C向代理服务器发送确认挂断响应信息200OK。 代理服务器转发响应信息200OK至A。  --- #无应答呼叫前转 用户A摘机发起一路呼叫,终端代理A向该区域代理服务器发起Invite请求; 代理服务器向被叫终端代理B传送Invite请求。 代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。 终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。 被叫用户振铃,终端代理B向代理服务器送180Ring响应。 代理服务器向终端代理A转发该响应信息。 被叫久振铃无应答,代理服务器判断超时后向代理终端B送Cancel消息放弃该呼叫。 代理终端B收到Cancel消息后,向代理服务器回送200OK响应。 终端代理B向代理服务器送487请求已撤销的响应信息。 代理服务器向终端代理B回送200OK响应。 代理服务器对此呼叫进行前转,向代理服务器C发送Invite请求消息。 代理终端C收到后指示用户振铃,同时向代理服务器发送180Ringing响应。 代理服务器向A转发收到的180Ringing响应。 被叫用户C摘机接听电话,终端代理C向代理服务器返回表示连接成功的应答(200OK) 代理服务器向终端代理A转发该成功指示(200OK) 终端代理A收到信息后,向代理服务器发ACK信息进行确认 代理服务器将ACK确认消息转发给终端代理C。 建立通信连接,开始通话。 主叫用户挂机,终端代理A向代理服务器发送Bye消息,请求挂机。 代理服务器转发Bye消息至终端代理C,指示C挂机。 终端代理C向代理服务器发送确认挂断响应信息200OK。 代理服务器转发响应信息200OK至A。  --- #呼叫保持 用户摘机发起一路呼叫,终端代理A向该区域的代理服务器发起Invite请求; 代理服务器通过认证/计费中心确认用户认证已通过后,检查请求消息中的Via头域中是否已包含其地址。若已包含,说明发生环回,返回指示错误的应答;若没有问题,代理服务器在请求消息的Via头域插入自身地址,并向Invite消息的To域所指示的被叫终端代理B传送Invite请求。 代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。 终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。 终端代理B指示被叫用户振铃,用户振铃后向代理服务器发送180Ringing振铃信息。 代理服务器向终端代理A转发被叫用户振铃信息。 被叫用户摘机,终端代理B向代理服务器返回表示连接成功的应答(200OK) 代理服务器向终端代理A转发该成功指示(200OK) 终端代理A收到信息后,向代理服务器发ACK信息进行确认 代理服务器将ACK确认消息转发给终端代理B。 主被叫用户之间建立通信连接,开始通话。 代理终端B向代理服务器发送Reinvite消息,SDP的c域等于0,0,0,0。 代理服务器转发此信息给代理终端A。 代理终端A收到Reinvite后回应200OK响应。表示接受会话更改,同事根据协商结果修改会话方式。 代理服务器转发200OK给代理终端B。 代理终端B收到消息后向代理服务器发送ACK消息进行确认。 代理服务器将ACK确认消息转发到代理终端A。  --- #呼叫等待 AB正常通话。 在AB通话的阶段,用户C向A发起呼叫,终端代理C发送Invite消息给代理服务器。 代理服务器向终端C回送100Trying响应,表示呼叫已在处理中。 代理服务器把Invite消息转发给A。 用户A振铃,并且终端A向代理服务器发送180Ring响应。 代理服务器向终端C转发该响应信息。 用户A按下呼叫保持键,代理终端A向代理服务器发送Invite消息,请求与代理终端C呼叫保持。 代理服务器转发此消息给终端代理B。 代理服务器向终端A回送100Trying响应,表示呼叫已在处理中。 终端B收到呼叫保持请求后,发送200OK给代理服务器,表示接受呼叫保持。 代理服务器转发200OK响应给终端代理A。 代理终端A收到消息后向代理服务器发送ACK消息进行确认。 代理服务器将ACK确认消息转发到代理终端B。 终端代理A发送200OK给代理服务器,表示接受C的呼叫。 代理服务器转发200OK给终端代理C。 终端代理C向代理服务器回送ACK确认。 代理服务器向代理终端A转发收到的ACK确认。 A、C之间开始通话。 用户A挂机,终端代理A向代理服务器发送Bye请求消息。 代理服务器转发Bye消息给终端代理B。 终端代理C发送200OK给代理服务器,表示接受请求。 代理服务器转发200OK响应给终端代理A。 终端代理C重新发送Invite请求给代理服务器,请求和终端代理B恢复通话。 代理服务器向代理终端B转发收到的Invite请求。  --- #参考资料: https://www.cnblogs.com/lidabo/p/7486197.html
分享到: