voip开发入门->SIP协议学习日记01

作者: LonelyBanana | 来源:发表于2016-07-05 10:05 被阅读767次

    <h4>一、SIP简介</h4>
    <h6>1. 什么是SIP?</h6>

    会话初始化协议 SIP( Session Initiation Protocol ,RFC3261)是一个基于文本的处于应用层的控制协议,可以用来创建,修改和终止会话。具有简练、开放、兼容和可扩展等特性。

    2. SIP的作用?

    SIP并不能提供具体的服务,它只是在多媒体框架中的一部分,它与实时数据传输协议(RTP)实时流协议(RSTP)会话描述协议(SDP)等其他协议一起组成一个完整的多媒体架构,在这个多媒体架构中SIP相当于交通工具。

    3. SIP是如何传输的?

    SIP是基于TCP/IP协议进行数据传输的,因此可以通过UDP传输(较常用),也可以同TCP传输。

    4. SIP的组成结构

    从结构上来说SIP协议由一组相对无关的处理层次组成,这些层次之间只有松散的关系。 事务用户层(Transaction User)->事物层(Transaction)->传输层(Transport)->语法和编码层(Syntax and Encoding)


    <h4>二、SIP常用术语</h4>

    1.常用术语概述

    ** <1>会话(Session)**,就是一个多媒体发送方和接收方组成的集合。通常意义下可以理解为一次打电话从摘机、拨号、通话、挂机这一系列动作包含的所有信号集合。
    <2>对话(Dialog),一个对话是持续一段时间的两个UA之间的端到端的SIP关系。用Call-ID,local tag(本地tag),remote tag(对方tag)来标志一个对话。
    <3>事务(Transaction),是在客户端和服务端的事件,包括了从第一个由客户端发送到服务端的请求,到最后一个(非1xx)服务端向客户端发出的终结应答。一般通过Via头域中的branch参数和Cseq头域的方法参数来标志一个事务。
    <4>用户代理 UA(User Agent ),一个逻辑实体的概念,包含UAC和UAS,仅存在于事务中。UAC( User Agent Client ):用户代理客户端,用于发送SIP请求。UAS( User Agent Server ):用户代理服务器,用于对SIP请求做响应的。
    <5>背靠背的用户代理 B2BUA(Back-to-Back UserAgent),是直接的UAC和UAS的串连,要接收和处理请求,为了决定如何处理这个请求,又要发出一个请求,同时需要维持对话状态。
    <6>呼叫(Call),它是指在端点之间一些通讯行为,通常用于建立多媒体对话。
    <7>请求(Request),一个由客户端发到服务端得SIP信息,用于执行特定的功能。
    <8> 应答(Response),一个由服务端发到客户端得SIP信息。用来标志从客户端发往服务端得请求处理的情况。
    <9>消息(Message),SIP元素之间传送的协议数据就是消息。
    <10> 方法(Method),是向服务器请求处理的主要功能。


    <h4>三、协议信息</h4>
    1.请求信息类型

    INVITE:发起会话请求,邀请用户加入一个会话,会话描述含于信息体中。
    BYE:结束会话
    ACK:用于对请求消息的响应消息进行确认。
    OPTIONS:用于请求能力信息。
    CANCEL:用于释放未建立的呼叫。
    REGISTER:用户SIP网络服务器登记用户位置。

    2.响应消息状态码

    1xx:临时响应,表示已经接受到请求信息,正对其进行处理;
    2xx:成功响应,表示请求已经被接受、处理并被成功受理;
    3xx:重定向响应,表示为完成请求信息需要采取进一步的行动;
    4xx:客户机错误,表示请求消息中包含语法错误或者SIP服务器不能完成对该请求消息的处理;
    5xx:服务器错误,表示SIP服务器故障不能完成对正确消息的处理。
    6xx:全局故障,表示请求不嗯给你在任何SIP服务器上实现。

    3.请求消息和响应消息的格式

    SIP一般消息 = 起始行
    *消息头
    CRLF(空行)

                   [消息体]
    

    起始行=请求行/状态行(SIP请求消息起始行是请求行(Request-Line),响应消息起始行是状态行(Status-Line))。
    请求消息头至少包括FromToCSeqCallMax-ForwardsVia六个字段他们是构建SIP消息的基本单元。
    消息体一般采用SDP(Session Description Protocol)协议,会话描述协议。

    4.SIP请求实例

    INVITE sip:5120@192.168.36.180 SIP/2.0
    Via: SIP/2.0/UDP 192.168.6.21:5060;branch=z9hG4bK776asdhds
    From: sip:5121@192.168.6.21;tag=1928301774
    To: sip:5120@192.168.36.180
    Call-ID: c2943000-e0563-2a1ce-2e323931@192.168.6.21
    CSeq: 100 INVITE
    Max-Forwards: 70
    Contact: sip:5121@192.168.6.21:5060
    Content-Type: application/sdp
    Content-Length: 142
    Body(略)
    

    其中Request Line包括方法名,Request URL,协议版本
    下面的为头域部分,每个头域格式为,域名+“:”+域值。
    头域后面加一个空行,然后是消息体部分(如果有的话)

    需要注意几点
    一个合法的SIP请求的头域部分必须至少包含如下6个头域:Via,From,To,Call-ID,Cseq,Max-Forwards。
    整个消息中每行都是以回车换行(CRLF)结束。
    头域的域名是大小写不敏感的,一般习惯第一个字母大写;域值也是大小写不敏感的,除非用引号引起来。
    冒号左右对加多少空格没有限制,一般建议在冒号和值之间加一个空格(SP)即可。
    在没有body时,头域的后面也要加一个空行。

    5.SIP应答实例

    SIP/2.0 200 OK
    Via: SIP/2.0/UDP 192.168.6.21:5060;branch=z9hG4bK776asdhds
    From: sip:5121@192.168.6.21;tag=1928301774
    To: sip:5120@192.168.36.180;tag=34246673
    Call-ID: c2943000-e0563-2a1ce-2e323931@192.168.6.21
    CSeq: 100 INVITE
    Max-Forwards: 70
    Contact: sip:5120@192.168.36.180:5060
    Content-Type: application/sdp
    Content-Length: 164
    Body(略)
    

    其中Status Line包括协议版本,状态码,状态说明
    其他的头域除了Contact要改为自己的地址端口,Content-Length的值
    为自己实际的body大小意外,其他可从收到的请求中复制。

    相关文章

      网友评论

        本文标题:voip开发入门->SIP协议学习日记01

        本文链接:https://www.haomeiwen.com/subject/ohshjttx.html