7.sip协议

1.SIP协议基础

会话初始协议,一个控制发起,修改和终结交互式多媒体会话的信令协议

1) HTTP与SIP协议基础

    HTTP:

        GET /index.html HTTP/1.1

        GET

            获取资源的动作

        /index.html

            资源地址

        HTTP/1.1

            协议版本号

    sip:

        INVITE sip:seven@freeswitch.org.cn SIP/2.0

        INVITE

            发起一次呼叫请求

        seven@freeswitch.org.cn

            请求的地址,SIP URI-->协议:名词@主机

        SIP/2.0

            版本号

2) SIP的基本概念和相关元素

    点对点通信

        SIP是一个对等的协议,可以在不需要服务器的情况下进行通信,只要知道一方的地址

        Bob给Alice发送一个INVITE请求

        Alice和Bob都称为用户代理(User Agent,UA)

            UA分两种:一种是UAC,发起方;UAS,接收方

    代理服务器

        设想Bob和Alice经人介绍,他们还不熟悉,Bob想请Alice吃饭就要一个中间人M传话,

        M就是代理服务器(Proxy Server)

    注册服务器

        Alice没有手机,但它希望Bob随时找到她,她就告诉中间人M,

        有事可以打宿舍固定电话,或家里电话,姥姥家电话...

        每次换新位置,重新向M注册,让M随时找到她

    背靠背用户代理(Back-to-Back UA,B2BUA)

        FreeSwitch就是一个典型的B2BUA

        M与W是一对夫妻,Bob认识M,Alice认识W,MW有意撮合Alice,Bob

        但两个人太腼腆没有互留电话,

        Bob想知道Alice对他感觉,就打电话问M,M问W,W打电话给Alice

        Alice告诉W,W告诉M,M转给Bob

        MW一个面向Bob一个面向Alice,称为B2BUA

3) SIP基本方法

    REGISTER

        注册联系信息

    INVITE

        初始化一个会话,发起一个呼叫

    ACK

        对INVITE消息的最终响应

    CANCEL

        取消一个处理的请求

    BYE

        终止一个会话

    OPTIONS

        查询服务器和能力

2.SIP注册

Alice可能在学习,可能在家,可能在世界任意个角落,只要能上网,就能与全世界通信

她作为被叫方,为了让Freeswitch随时找到她,她需要向Freeswitch注册



Alice向Freeswitch发起注册请求,

Freeswitch返回401,对Alice发起Chalenge

Alice将自己的用户名密码与收到的Chalenge进行计算,将加密结果赋到下一个REGISTER请求

Freeswitch收到后对Alice信息对比,匹配则认证通过

3.SIP呼叫流程

1) UA间直接呼叫

    当Bob呼叫Alice时,直接呼叫Alice的SIP地址,sip:Alice@192.168.4.4:5090

    Bob向Alice发送INVITE建立SIP会话,

    Alice的UA回100Trying消息,表示收到请求,先等一会

    Alice开始振铃   ,并发给Bob180

    Bob接收到消息后,开始播放回铃音,提示Bob正在振铃

    Alice接了电话,发送200给Bob

    Bob收到200向Alice回ACK证实消息,完成三次握手,一个事务

    Bob与Alice通话了,他们通话的内容(语音数据)在SIP之外的RTP包传递

    最后Alice挂断电话,向Bob发送BYE,

    Bob收到BYE,回200OK,通话完成



    请求消息:

        1xx

            临时状态,表明呼叫进展情况

        2xx

            请求成功收到

        3xx

            重定向,转向另一个UAS处理

        4xx

            请求失败,一般是客户端或网络引起

            密码错误,空号

        5xx

            服务器内部错误

        6xx

            全局性错误

2) 通过B2BUA呼叫

        真实世界Bob和Alice经常改变位置,他们的SIP地址会发生变化,

        所以,他们通常借助一个服务器来实现通信,这样Bob和Alice通过注册到服务器获得服务器的公有SIP地址

        注册服务器的地址是不变的,因此他们的SIP地址就不会改变,



    Bob和Alice注册到Freeswitch,分别获得服务器的地址: sip:Bob@192.168.4.4和sip:Alice@192.168.4.4

    Bob呼叫Alice

        Bob向Freeswitch发送INVITE,请求建立一个呼叫

        Freeswitch作为一个UAS接受请求并响应,他先通过100Trying通知Bob接收到他的请求

        此时Freeswitch发现它不认识Bob,不确定Bob有没有权限发起呼叫,它向Bob发送407确定身份

        Bob回送ACK证实消息向Freeswitch证实收到认证,INVITE事务结束

        Bob重新发送INVITE,附带Proxy-Authorization验证消息,该INVITE重新开始一个事务

        Freeswitch收到INVITE后,重新回送100Trying,通知Bob呼叫进展

        Freeswitch对Bob的认证消息进行验证,发现Bob是本地授权用户,可以继续呼叫,Bob与Freeswitch通信建立,形成一个Channel



        路由阶段

        Freeswitch根据路由,发现Bob呼叫Alice,它需要建立另一条腿呼叫Alice

        Freeswitch通过查找本地数据库,得到Alice的位置,启动UA,向Alice发送一个新的INVITE消息

            该INVITE的Call-ID与上次INVITE的不同,这是另一个SIP对话,

            消息中多了一个Remote-Party-ID,用来支持主叫号码显示,SIP通话不仅显示电话号码,还显示可选的名字(Bob)

        Alice回送100Trying通知Freeswitch它收到INVITE请求,正准备下一步处理

        Alice不需要对Freeswitch进行认证,它直接响铃,并向Freeswitch发送180Ringing,通知Freeswitch Alice开始振铃

            直接回180, Bob的话机会自己产生一个回铃音,播放给Bob,提示Bob对方正在振铃

            回183消息, 183包含媒体SDP,这时 Freeswitch就会产生一个回铃音,通过RTP发送给Bob,Bob的话机不需要自己再产生回铃音,彩铃

        Alice听到电话响了, 接起电话, 话机给Freeswitch发送200OK,表示Alice接听

        Freeswitch向Alice回送ACK证实消息,证实它接收到200 OK,Freeswitch与Alice通话建立完毕

        Freeswitch立即向Bob发送200 OK消息,切断回铃音,接入Alice声音

        Bob通过ACK消息通知Freeswitch收到200



        通话进稳定阶段,不再有SIP消息交互,所有的语音数据都在RTP传送



        Alice挂断电话,她的话机向Freeswitch发送BYE消息,通知Freeswitch拆线

        Freeswitch回送200 OK,并释放b-leg

        Freeswitch也给Bob发送BYE消息, 通知Bob要拆线,它还包含了挂机原因(Hangup Cause)

            NOMAL_CLEARING: 表示正常释放

        Bob话机回送200 OK,Freeswitch收到后,也释放a-leg,通话结束

4.深入理解SIP

1) SIP URI

    除了使用SIP地址外, 也可以使用域名,如sip:Alice@freeswitch.org.cn

    Bob呼叫Alice, Bob是主叫方,他知道服务器的地址,可以直接给服务器发送INVITE, 它不需要注册,

    Alice不同, 作为被叫方,为了让服务器能找到它, 必须事先通过REGISTER注册到服务器上

2) SDP和SOA

    SIP负责建立和释放会话

        会话包含相关的媒体,如视频和音频.

    媒体数据由SDP描述

        会话建立时,需要媒体协商, 双方才能确定对方的媒体能力以交互数据

    Bob呼叫Freeswitch

        Freeswitch收到INVITE后, 进行编码协商, SDP携带了Freeswitch协商后的编码PCMA 以及"a=ptime"

            ptime表示RTP数据的打包时间,默认20ms

        Bob在INVITE中提议: 我支持PCMA,PCMU和ILBC,你看我们用什么通信?

        Freeswitch在 200OK 中回复: 我们用PCMA吧

3) 3PCC

    第三方电话呼叫控制, 由第三方控制着在另外两者之间建立的一个会话, 由控制着负责会话双方的媒体协商

4) SIP承载

    HTTP用TCP承载

    SIP支持TCP和UDP承载, RFC3261规定, 任何SIP UA必须同时支持TCP和UDP, 我们常见的SIP都是用UDP承载的

    UDP是面向无连接的, 在大并发量的情况下与TCP相比可以节省TCP由于每个IP包需要确认带来的额外开销,

    SIP over Web-Socket

        当前有些浏览器如Chrome, FireFox实现了WebSocket, 可以通过它承载SIP, 意味着浏览器与普通SIP话机进行音频, 视频通话

5.小结

Freeswitch是一个B2BUA

打开SIP消息的命令

    sofia global siptrace on

消息太多

    执行fs_cli连接到Freeswitch,打开sip-trace,打一个测试电话后立即用Ctrl D退出fs_cli,慢慢分析

关闭trace

    sofia global siptrace off

来源张永光的博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值