精华内容
下载资源
问答
  • SIP协议
    2022-02-21 16:08:29

    1、简介

    SIP即Session Initiation Protocol缩写,会话发起协议
    用于建立、修改、终止一个或多个参与者的多媒体会话
    在tcp/ip四层模型中位于应用层,与SDP、RTP等协议配合共同完成多媒体会话

    2、消息结构

    sip消息由 起始行、消息头、消息体 组成,如下

    起始行 //一行

    消息头

    CRLF //消息头和消息体用空行分割

    [消息体] //可选

    sip消息分为请求消息和应答消息两种,二者不同之处仅在于起始行

    2.1、请求消息

    起始行包括3个部分:方法 请求URI 协议版本

    方法:

    REGISTER用于与SIP服务器进行注册
    INVITE用于邀请用户加入一个呼叫
    ACK对响应消息进行确认
    CANCEL用于取消尚未建立的呼叫
    BYE用于释放已经建立的呼叫
    OPTIONS向服务器查询它的能力

    2.2、应答消息

    起始行包括3个部分:协议版本 状态码 原因码

    2.3、消息头

    Via记录了请求在SIP网络中的路由路径,用来指示如何将响应沿原路返回
    From发起请求方的地址
    To接受方地址
    Call-ID需要全局唯一,用于唯一标识一次会话
    Cseq用来标识请求的顺序号,判断请求和响应的对应关系
    更多相关内容
  • sip协议(中文版)

    2017-07-27 20:21:14
    sip协议的中文翻译
  • 视频通讯使用的SIP协议详解

    千次阅读 2020-05-07 14:54:42
    Sip 消息体结构Sip 消息举例一、Sip协议简介: SIP(Session Initiation Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。广泛应用于CS(Circuit S....

    以下内容大致分为以下几个部分:

    协议简介两种Sip会话模式Session Model与Pager Model;Sip 消息体结构Sip 消息举例一、Sip协议简介:

    SIP(Session Initiation Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。广泛应用于CS(Circuit Switched,电路交换)、NGN(Next Generation Network,下一代网络)以及IMS(IP Multimedia Subsystem,IP多媒体子系统)的网络中,可以支持并应用于语音、视频、数据等多媒体业务,同时也可以应用于Presence(呈现)、Instant Message(即时消息)等特色业务。可以说,有IP网络的地方就有SIP协议的存在。

    SIP是类似于HTTP,SIP可以减少应用特别是高级应用的开发时间。由于基于IP协议的SIP利用了IP网络,固定网运营商也会逐渐认识到SIP技术对于他们的远意义。

    二、Sip消息的两种会话模式

    在Sip IM通信应用过程中,一般存在着两种会话模式:

    Session ModelPager Model2.1、Session Model

    会话中,对于消息体内容大于1300字节时,一般采用Session Model。其会话建立过程如下图所示:

    主叫方A呼叫被叫方B:

    步骤1:主叫方A发送INVITE请求到代理服务器;步骤2:代理服务器发送100 Trying 响应主叫方A;步骤3~6:代理服务器搜索被叫方B的地址,获取地址后转发INVITE请求;步骤7~9:被叫方B生成的180 振铃响应,返回给主叫方A;步骤10~12:被叫方B生成的200 OK响应,返回给主叫方A;步骤13~17:主叫方A收到被叫方B200 OK响应后,向被叫方B发送一个ACK,会话建立;步骤18~20:会话结束后,任何参与者(A或B)都可以发送一个BYE请求来终止会话;步骤21~23:主叫方A发送200 OK响应来确认BYE,会话终止。注:以上的整个流程称之为一个Dialog

    2.2、Pager Model

    在Sip消息中,对于消息体不大于1300字节时,一般采用Pager Model。Sip消息通信中采用MESSAGE方法,MESSAGE方法本身并不建立Dialog,在多数应用中,每条IM消息都是独立的,颇似分页消息。

    2.2.1 MESSAGE方法的由来

    RFC3428对Sip协议进行了扩展,在Sip协议中增加了MESSAGE请求方法。采用Pager Model进行通信,传递不超过1300字节的数据。

    2.2.2 MESSAGE方法消息体

    当User1想给User2发送IM消息时,只需构造一个MESSAGE,发出去即可。

    对于其消息体body可以是任何MIME格式。但必须支持plain/text格式,可以选择支持message/cpim(见RFC3860)格式,可能用message/cpim会好一点,因为已有的IM系统标准是message/cpim格式。

    2.2.3 Pager Model请求流程如下

    以User1向User2发送MESSAGE消息为例:

    步骤1:User1发送MESSAGE请求到代理服务器;步骤2:代理服务器转发User1的MESSAGE请求给USER2;步骤3:User2收到User1的消息后,回复200 OK给代理服务器;步骤7~9:代理服务器转发200 OK回复给User1

    三、SIP消息体格式

    SIP消息体结构与Http协议结构相似,均由三部分组成:

    请求行(request-line) or 状态行(status-line)消息头(header)正文(body)3.1、请求行

    请求行格式:Method Request-URI SIP-Version CRLF

    请求行举例:INVITE SIP/2.0 /r/n

    Method 以下列出了几种消息Method方法:

    Request-URI

    指示请求的用户或者服务的地址信息

    SIP-Version请求和响应消息都需要包含SIP版本信息

    3.2、状态行

    状态行格式:

    SIP-Version Status-Code Reason-Phrase CRLF

    状态行举例:

    SIP/2.0 200 OK /r/n

    Status-Code状态码:状态代码由3位数字组成,表示请求是否被理解或被满足。

    状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。

    第一个数字有五种可能的取值:

    常用的状态码举例:

    3.3、消息头

    发送MESSAGE消息给user2

     

    Header 字段含义说明:

     

    四、SIP消息举例

    这里举两个例子:

    MESSAGE消息(Pager Mode)REGISTER消息4.1、MESSAGE消息(Pager Model)

    以User1发送MESSAGE消息给user2为例:

     

    步骤1:User1发送MESSAGE请求到代理服务器

     

    步骤2:代理服务器转发User1的MESSAGE请求给USER2

    代理服务器收到步骤1请求,到数据库中查找User2(注册过程中生成数据库),随后生成步骤2的数据。

     

    步骤3:User2收到User1的消息后,回复200 OK给代理服务器

    直接回应(200-OK) 没有Body,也不携带Contact头域

     

    步骤4:代理服务器转发200 OK回复给User1

    代理服务器收到回复后,去掉最顶端的Via,转发如下消息给User1

     

    4.2、REGISTER消息

    首先举例一个非鉴权注册消息。

    4.2.1 非鉴权注册消息

    192.168.2.161机器发送注册消息给192.168.2.89服务器:

    当注册成功(回送200 OK)时,服务器发送的res消息参考如下:

    4.2.2 鉴权注册消息

    当需要鉴权注册时

    请求端192.168.2.161发送注册消息给192.168.2.89服务器服务器对192.168.2.161发送“401 Unauthorized”信息给请求端,提示请求端需要带上鉴权信息重新注册请求端带上鉴权信息后(带有“Authorization”头字段)重新向服务器注册服务器验证鉴权头的正确性,如果鉴权成功,给请求端发送200 OK消息。若失败,继续发送401消息。请求端192.168.2.161发送注册消息给192.168.2.89服务器

    服务器对192.168.2.161发送401 Unauthorized信息给请求端,提示请求端需要带上鉴权信息重新注册:

    请求端192.168.2.161通过Authorization头字段带上鉴权头信息,发送一个新的REGISTER消息:

    服务器验证鉴权头的正确性,如果鉴权成功,给请求端发送200 OK消息。若失败,继续发送401消息

    五、CPIM消息格式:

    Message/CPIM是一个两部分实体,第一部分为消息元数据,第二部分为消息内容。这两部分与包装好的MIME头域相互独立,并且两部分之间用空格行隔开。消息元数据头信息遵循比MIME消息内容的头格式更严格的格式要求。

    一个完整的消息格式如下:

    m: Content-type: Message/CPIM

    s:

    h: (message-metadata-headers)

    s:

    e: (encapsulated MIME message-body)

    其中,标签“m:”,“s:”,“h:”,“x:”并不是消息格式的一部分,而是用来区分消息的不同部分。具体含义如下:

    m: 整个消息的MIME消息头

    s: 空格分隔行

    h: 消息头

    e: 包含消息内容在内的封装好的MIME对象

    x: 符合MIME安全的若干消息包装

    u Message/CPIM消息的MIME消息头(m:)

    消息的MIME消息头表示该消息采用的CPIM格式。具体形式为:

    Content-type: Message/CPIM

    u 消息头(h:)

    在传输过程中,消息头的格式、顺序及内容都不能被修改。

    具体格式为:Key:Value

    对消息头的要求有:

    确保一个消息头在同一行;

    每行一个消息头;

    处理器不能对消息头的长度限制;

    消息头的开始和结尾不能出现空格;

    必须使用UTF-8字符;

    使用CR,LF结束该行;

    消息头名称只能包含US ASCII码字符;

    不能包含任何控制字符;

    消息头名称冒号后必须有一个空格;

    多行可以使用相同的消息头;

    消息 头必须配对;

    在不能识别消息头的情况下,该消息头将被忽略;

    消息头的顺序不能改变;

    例如:

    To: Pooh Bear

    From:

    DateTime: 2001-02-02T10:48:54-05:00

    CPIM定义的消息头有:NS、Require、From、To、cc、DateTime、Sunject。

    下面是一个Message/CPIM消息的例子:

    m: Content-type: Message/CPIM

    s:

    h: From: MR SANDERS

    h: To: Depressed Donkey

    h: DateTime: 2000-12-13T13:40:00-08:00

    h: Subject: the weather will be fine today

    h: Subject:;lang=fr beau temps prevu pour aujourd'hui

    h: NS: MyFeatures

    h: Require: MyFeatures.VitalMessageOption

    h: MyFeatures.VitalMessageOption: Confirmation-requested

    h: MyFeatures.WackyMessageOption: Use-silly-font

    s:

    e: Content-type: text/xml; charset=utf-8

    e: Content-ID

    e:

    e: <body>

    e: Here is the text of my message.

    e: </body>

    为了确保Message/CPIM的安全性,应用部署可以使用RFC1847,或其它合适的安全协议(如S/MIME或openPGP)对上述消息加密。

    使用S/MIME和pkcs7,上述消息变为:

    x: Content-Type: multipart/signed; boundary=next;micalg=sha1; protocol=application/pkcs7-signature

    x:

    x: --next

    m: Content-Type: Message/CPIM

    s:

    h: From: MR SANDERS

    h: To: Dopey Donkey

    h: DateTime

    h: Subject: the weather will be fine today

    h: Subject:;lang=fr beau temps prevu pour aujourd'hui

    h: NS: MyFeatures

    h: Require: MyFeatures.VitalMessageOption

    h: MyFeatures.VitalMessageOption: Confirmation-requested

    h: MyFeatures.WackyMessageOption: Use-silly-font

    s:

    e: Content-type: text/xml; charset=utf-8

    e: Content-ID:

    e:

    e: <body>

    e: Here is the text of my message.

    e: </body>

    x: --next

    x: Content-Type: application/pkcs7-signature

    x:

    x: (signature stuff)

    :

    x: --next--

    展开全文
  • SIP协议简单介绍

    千次阅读 多人点赞 2019-06-03 20:21:58
    SIP会话初始协议(Session Initiation Protocol) 是一个控制发起、修改和终结交互式多媒体会话的信令协议SIP的六种基本方法: 另外,还有一些扩展方法SUBSCRIBE、NOTIFY、MESSAGE、REFER、INFO等。 SIP必须包含...

    SIP会话初始协议(Session Initiation Protocol) 是一个控制发起、修改和终结交互式多媒体会话的信令协议。


    SIP的六种基本方法:
    在这里插入图片描述
    另外,还有一些扩展方法SUBSCRIBE、NOTIFY、MESSAGE、REFER、INFO等。

    SIP必须包含的头域:
    在这里插入图片描述

    SIP响应消息状态码:

     1xx 组的响应为临时状态,表明呼叫进展的情况;
     2xx 表明请求已被成功收到、理解和接受;
     3xx 为重定向,表明SIP请求需要转向到另一个UAS处理;
     4xx 表明请求失败,这种失败一般是由客户端或网络引起的,如密码错误、空号等,客户端应该重新修改请求,重新发送;
     5xx 为服务器内部错误,表明服务器出错,不能响应合法的请求;
     6xx 为全局性错误,如 600 Busy Everywhere。
    

    SIP注册流程:

    在这里插入图片描述
    描述:

    (1) Alice向FreeSWITCH发起注册请求。
    (2) FreeSWITCH返回401消息,向Alice发起Challenge(挑战)。
    (3) Alice将用户密码与收到Challenge信息进行计算后,把计算结果附加到注册请求上重新注册。
    (4) FreeSWITCH收到新的注册请求后,对信息解密认证,如果认证通过返回200 OK,告诉Alice注册成功,并将Alice的联系地址记录下来。如果认证失败返回403 Forbidden或其他消息。
    

    UA间直接呼叫流程:
    在这里插入图片描述
    描述:

    (1) Bob向Alice发送INVITE消息请求建立SIP会话。
    (2) Alice收到INVITE消息后,回复100 Trying消息,告知Bob已经收到消息,正在处理。
    (3) Alice的电话振铃,并回复给Bob 180 Ringing消息,Bob收到此消息播放回铃音,以提示Bob对方正在振铃。
    (4) Alice接听电话,向Bob发送200 OK消息。
    (5) Bob收到200 OK消息后,发送ACK确认消息。
    (6) 使用RTP协议传输语音数据进行通话。
    (7) Alice挂断电话,发送BYE消息给Bob。
    (8) Bob收到BYE消息后,发送200 OK,至此通话结束。
    

    通过B2BUA(freeSWITCH)呼叫流程:
    在这里插入图片描述
    在这里插入图片描述

    描述:

    (1) Bob向FreeSWITCH发送INVITE消息,请求建立一个呼叫。
    (2) FreeSWITCH收到INVITE消息,回复100 Trying告诉Bob已经收到消息,正在处理。
    (3) FreeSWITCH发现不知道Bob是谁,所以向Bob发送407 Authentication Required 消息请求认证。
    (4) Bob收到407消息后,回复ack确认已经收到。
    (5) Bob重新发送带有认证信息的INVITE消息,请求建立呼叫。
    (6) FreeSWITCH收到带认证信息的INVITE消息,回复100 Trying告诉Bob已经收到消息,正在处理。(Bob和FreeSWITCH的通道已经建立,称为一个Channel,a-lag建立成功)
    (7) FreeSWITCH知道Bob要呼叫Alice,此时去查找路由(拨号计划diaplan)和本地数据库,得到Alice的联系地址(Contact)。
    (8) FreeSWITCH新启动一个UA去连接Alice,发送INVITE消息,同时携带着a-lag的的某些信息(如:来电显示等)
    (9) Alice端收到INVITE,向FreeSWITCH回复100 Trying消息,告知FreeSWITCH已经正常接收INVITE消息。
    (10) Alice的话机振铃并向FreeSWITCH发送180 Ringing消息,通知FreeSWITCH Alice的话机已经振铃。
    (11) FreeSWITCH收到Alice的180消息后,可以选择直接给Bob回180消息,也可以选择给Bob回183消息。(180消息由Bob自身产生回铃音,183消息由FreeSWITCH通过RTP发送回铃音给Bob,所以183消息这种技术支持的就是彩铃。) 默认是给Bob发送183消息。
    (12) Bob收到183消息后开始播放回铃音,此时Alice振铃,Bob播放回铃音。
    (13) 当Alice接起电话后,会发送200 OK给FreeSWITCH。
    (14) FreeSWITCH收到Alice发送的200 OK之后,回送ACK,同时FreeSWITCH立即向Bob发送200 OK消息。
    (15) Bob收到200 OK之后,会话已经建立,同时会回送ACK给FreeSWITCH。
    (16) Bob和Alice通过RTP协议进行通话。
    (17) Alice挂机,向FreeSWITCH发送BYE消息。
    (18) FreeSWITCH收到BYE消息之后,回送200 OK,释放b-lag。
    (19) 同时FreeSWITCH给Bob发送BYE消息,消息中包含挂机原因等内容。
    (20) Bob收到消息之后,回送200 OK,FreeSWITCH收到200 OK后,释放a-lag。至此通话结束。
    

    INVITE - 200 - ACK 三次握手
    INVITE - 1xx - 200 一个事务
    BYE - 200 一个事务

    展开全文
  • Sip协议

    千次阅读 2019-02-25 10:09:53
    语音业务VOIP开发之SIP协议篇(一) —— SIP基本场景分析 一、SIP业务基本知识 1、业务介绍  会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始、管理和终止网络中的语音和视频会话,具体...

    语音业务VOIP开发之SIP协议篇(一) —— SIP基本场景分析

    一、SIP业务基本知识

    1、业务介绍

         会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始、管理和终止网络中的语音和视频会话,具体地说就是用来生成、修改和终结一个或多个参与者之间的会话。SIP的业务模式是一个点对点协议,其中有两个要素——SIP用户代理和SIP网络服务器。

        用户代理(UA)是呼叫的终端系统元素,而SIP服务器是处理与多个呼叫相关联信令的网络设备。用户代理本身具有一客户机元素(用户代理客户机UAC)和一服务器元素(用户代理服务器UAS)。客户机元素初始呼叫而服务器元素应答呼叫。这允许点到点的呼叫通过客户机-服务器协议来完成。下图是SIP业务的网络结构和各个参与者的关系。

    SIP业务的核心特点集中在SIP的设计目标之一是提供类似公用交换电话网(PSTN)中呼叫处理功能的扩展集。在这个扩展集中,实现类似日常电话的操作:拨号,振铃,回铃音或者忙音,只是实现方式和术语有所不同。SIP也实现了许多信令系统7(SS7)中更高级的呼叫处理功能,尽管这两个协议相差很远。SS7是一个高度集中处理的协议,其特点表现为高复杂度的中心网络结构和无智能的哑终端(传统的电话机)。SIP则是一个点对点协议,所以它只需要一个相对简单的(因此也高度可扩展的)核心网络,而将处理工作下放给连接在网络边缘的智能端点(装有硬件或软件的终端设备)。SIP的许多功能在端点中实现,这与传统的SS7将其在网络核心设备实现的作法大异其趣。而协议的其他特点还有它是一个文本协议,所以易于调测,结构灵活;而且它是一个中性的底层传输协议,可用TCP或UDP(推荐UDP);同时呼叫和媒体信息同时传送:媒体信息的传送由SDP传送。

        SIP是互联网工程任务组(IETF)多媒体数据和控制体系结构的一个组成部分,因此它与IETF的许多其他协议都有联系,例如RTP(实时传输协议)和SDP协议。SIP与许多其它的协议协同工作,仅仅涉及通信会话的信令部分(control message)。

       SIP报文内容传送会话描述协议(SDP),SDP协议描述了会话所使用流媒体细节,如:使用哪个IP端口,采用哪种编解码器等等。SIP的一个典型用途是:SIP“会话”传输一些简单的经过封包的实时传输协议流。RTP本身才是语音或视频的载体。

    2、业务过程和协议流程

    a、注册流程:

     

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

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

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

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

    b、注销流程

    (1)终端向代理服务器发送register消息注销,其头中expire字段设置为0。

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

     

    c、 基本呼叫建立过程:

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

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

    (3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

    (4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

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

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

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

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

    (9)终端代理A收到信息后,向代理服务器发ACK信息进行确认

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

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

     

    d、正常呼叫释放过程:

    (1) 正常呼叫

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

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

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

    (5) 代理服务器转发响应信息200OK。

     

    e、 会话更改流程:


    (1)用户代理服务端和代理客户端正常通话。

    (2)用户代理服务端向用户代理客户端发送Invite信息,带有新的SDP协商信息。

    (3)用户处理客户端回复200OK,并将协商后的SDP信息带回。

    (4)用户代理服务端发送ACK给用户代理客户端进行确认。

     

    f、 被叫忙呼叫释放:

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

    (2)代理服务器向被叫终端代理B传送Invite请求。

    (3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

    (4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

    (5)呼叫请求送到被叫终端代理B后,被叫忙,终端代理B向代理服务器送486被叫忙响应。

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

    (7)终端代理A向代理服务器回送ACK确认消息。

    (8)代理服务器向终端代理B送ACK确认信息。

     

    g、被叫无应答流程一:

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

    (2)代理服务器向被叫终端代理B传送Invite请求。

    (3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

    (4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

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

    (6)代理服务器向终端代理A转发该响应信息。

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

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

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

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

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

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

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

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

    注:以上步骤中的(10)到(12)无严格顺序关系。

     

    h、被叫无应答流程二:

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

    (2)代理服务器向被叫终端代理B传送Invite请求。

    (3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

    (4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

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

    (6)代理服务器向终端代理A转发该响应信息。

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

    (8)代理服务器收到408Requesttimeout消息后,转发该消息给终端代理A。

    (9)代理服务器回送ACK确认给终端代理B。

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

    注:以上步骤中的(9)到(10)无严格顺序关系。


    i、遇忙呼叫前转:


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

    (2)代理服务器向被叫终端代理B传送Invite请求。

    (3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

    (4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

    (5)终端代理B忙线中,B向代理服务器发送486Busy Here响应。

    (6)代理服务器向终端代理B发送ACK确认消息。

    (7)代理服务器对此呼叫进行前转,向代理服务器C发送Invite请求消息。

    (8)代理终端C收到后指示用户振铃,同时向代理服务器发送180Ringing响应。

    (9)代理服务器向A转发收到的180Ringing响应。

    (10)被叫用户C摘机接听电话,终端代理C向代理服务器返回表示连接成功的应答(200OK)

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

    (12)终端代理A收到信息后,向代理服务器发ACK信息进行确认

    (13)代理服务器将ACK确认消息转发给终端代理B。

    建立通信连接,开始通话。

    (14)主叫用户挂机,终端代理A向代理服务器发送Bye消息,请求挂机。

    (15)代理服务器转发Bye消息至终端代理C,指示C挂机。

    (16)终端代理C向代理服务器发送确认挂断响应信息200OK。

    (17)代理服务器转发响应信息200OK至A。

     

    j、无应答呼叫前转流程:

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

    (2)代理服务器向被叫终端代理B传送Invite请求。

    (3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

    (4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

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

    (6)代理服务器向终端代理A转发该响应信息。

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

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

    (9)终端代理B向代理服务器送487请求已撤销的响应信息。

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

    (11)代理服务器对此呼叫进行前转,向代理服务器C发送Invite请求消息。

    (12)代理终端C收到后指示用户振铃,同时向代理服务器发送180Ringing响应。

    (13)代理服务器向A转发收到的180Ringing响应。

    (14)被叫用户C摘机接听电话,终端代理C向代理服务器返回表示连接成功的应答(200OK)

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

    (16)终端代理A收到信息后,向代理服务器发ACK信息进行确认

    (17)代理服务器将ACK确认消息转发给终端代理C。

    建立通信连接,开始通话。

    (18)主叫用户挂机,终端代理A向代理服务器发送Bye消息,请求挂机。

    (19)代理服务器转发Bye消息至终端代理C,指示C挂机。

    (20)终端代理C向代理服务器发送确认挂断响应信息200OK。

    (21)代理服务器转发响应信息200OK至A。

     

    k、 呼叫保持:

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

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

    (3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

    (4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

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

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

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

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

    (9)终端代理A收到信息后,向代理服务器发ACK信息进行确认

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

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

    (12)代理终端B向代理服务器发送Reinvite消息,SDP的c域等于0,0,0,0。

    (13)代理服务器转发此信息给代理终端A。

    (14)代理终端A收到Reinvite后回应200OK响应。表示接受会话更改,同事根据协商结果修改会话方式。

    (15)代理服务器转发200OK给代理终端B。

    (16)代理终端B收到消息后向代理服务器发送ACK消息进行确认。

    (17)代理服务器将ACK确认消息转发到代理终端A。

     

    l、呼叫等待:


    (1)AB正常通话。

    (2)在AB通话的阶段,用户C向A发起呼叫,终端代理C发送Invite消息给代理服务器。

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

    (4)代理服务器把Invite消息转发给A。

    (5)用户A振铃,并且终端A向代理服务器发送180Ring响应。

    (6)代理服务器向终端C转发该响应信息。

    (7)用户A按下呼叫保持键,代理终端A向代理服务器发送Invite消息,请求与代理终端C呼叫保持。

    (8)代理服务器转发此消息给终端代理B。

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

    (10)终端B收到呼叫保持请求后,发送200OK给代理服务器,表示接受呼叫保持。

    (11)代理服务器转发200OK响应给终端代理A。

    (12)代理终端A收到消息后向代理服务器发送ACK消息进行确认。

    (13)代理服务器将ACK确认消息转发到代理终端B。

    (14)终端代理A发送200OK给代理服务器,表示接受C的呼叫。

    (15)代理服务器转发200OK给终端代理C。

    (16)终端代理C向代理服务器回送ACK确认。

    (17)代理服务器向代理终端A转发收到的ACK确认。

    A、C之间开始通话。

    (18)用户A挂机,终端代理A向代理服务器发送Bye请求消息。

    (19)代理服务器转发Bye消息给终端代理B。

    (20)终端代理C发送200OK给代理服务器,表示接受请求。

    (21)代理服务器转发200OK响应给终端代理A。

    (22)终端代理C重新发送Invite请求给代理服务器,请求和终端代理B恢复通话。

    (23)代理服务器向代理终端B转发收到的Invite请求。

    二、SIP通信过程报文抓取实例分析
    l SIP代理服务器IP:59.64.135.22  SIP电话号码:825002(59.64.135.22)

    l SIP代理终端IP:59.64.135.67

    l 软终端:X-lite

    l 抓包分析工具:WireShark

    注:由于过程太多,以下仅仅抓取“成功注册”,“呼叫--通话” ,“挂断”“注销”四种情况做典型包的分析。

    Ø 注册流程:


    以上是REGISTER包。

    我们可以看到在注册的时候,终端会向代理服务器59.64.135.22发送REGISTER请求注册。

    wps_clip_image-6365

    以上是REGISTEROK包。服务器返回200 OK,表示注册成功。

    Ø 基本呼叫建立过程:

    wps_clip_image-6413

    以上是INVITE包。我们可以看到在发起呼叫初期,终端向825002发出Invite的呼叫请求。

    wps_clip_image-6465

    以上是Trying包,说明终端825003正在试着连通服务器,进一步转接到825002.

    由于设置了自动接听,所以此次通话没有振铃的包。

    wps_clip_image-6538

    这是ACK包,代表确认信号。

    Ø 正常呼叫释放过程:

    wps_clip_image-6566
    以上是BYE包。这是825002挂断后服务器向825003发送的释放呼叫信号。

    Ø 注销流程:

    wps_clip_image-6615
    以上是825003注销的包,我们注意到expires=0这说明是注销。

    3.总结
    SIP协议凭借其简单、易于扩展、便于实现等诸多优点越来越得到业界的青睐,它正逐步成为NGN(下一代网络)和3G多媒体子系统域中的重要协议,并且市场上出现越来越多的支持SIP的客户端软件和智能多媒体终端,以及用SIP协议实现的服务器和软交换设备。

     

     

    语音业务VOIP开发之SIP协议篇(二) —— SIP报文浅析

    一、SIP消息

         SIP消息是SIP客户终端和服务器之间通信的的基本信息单元。SIP消息基于文本,采用UTF-8编码(RFC 2279)中的ISO 10646字符集。SIP协议借鉴了HTTP协议(RFC 2068)的设计思想,有很多消息格式与之相同。SIP协议支持UDP传输协议

         SIP消息消息分两类:请求消息 和 响应消息

    请求消息(Request):客户端为了激活特定操作而发给服务器的SIP消息,包括INVITE,ACK,OPTIONS,BYE,CANCEL和REGISTER消息。UAC到UAS。

    响应消息(Response):服务器向客户端反馈对应请求的处理结果的SIP消息,包括1xx,2xx,3xx,4xx,5xx,6xx响应消息,UAS到UAC

    二、SIP消息格式与结构:

          SIP消息由三个部分组成:标识消息类型和目的地址的起始行,携带消息参数的头部以及承载任意附加信息的消息体。消息体中传送的最重要的信息就是由SDP(Session Description Protocol)协议描述的媒体控制信息,供终端协商并建立媒体信道。

           SIP消息格式:由一个起始行(Start-line)、一个或多个字段(header fields)组成的消息头、一个标志消息头结束的空行(CRLF)以及作为可选项的消息体(Message body)组成,其中描述的头称为实体头(Entityheader)。

    generic-message = start-line

    *message-header

    CRLF

    [ message-body ]


    1.起始行

          起始行分请求行(Request-Line)和状态行(Status-Line)两种。

    1.1.请求行(Request-Line)

          请求消息的起始行,由请求消息类型,请求目的发送地址Request-URI,SIP协议的版本号,之间用空格隔开。

    请求行的6种Request Method:

    INVITE:用于发起呼叫请求。INVITE消息包括消息头和数据区两部分。INVITE 消息头包含主、被呼叫的地址,呼叫主题和呼叫优先级等信息。数据区则是关于会话媒体的信息,可由会话描述协议SDP 来实现。

    BYE:当一个用户决定中止会话时,可以使用BYE 来结束会话。

    OPTIONS:用于询问被叫端的能力信息,但OPTIONS 本身并不能发起呼叫。

    ACK:对已收到的消息进行确认应答。

    REGISTER:用于用户向SIP服务器传送位置信息或地址信息。

    CANCEL:取消当前的请求,但它并不能中止已经建立的连接。

    1.2.状态行(Status-Line)

         响应消息的起始行,SIP应答消息的Status-Line由SIP-Version开始,接着是一个数字编码的状态码Status-Code,最后是一个与状态码相关的描述性短语Reason-Phrase,然后由一个CRLF行结束符结束Status-Line。

    SIP应答消息的六类应答状态编码

    1xx:临时消息:表示表示请求消息已经收到,后面将继续处理该请求。

    2xx:成功消息:表示请求已经被成功的理解、接受或执行。

    3xx:重定向消息:表示为了完成请求还需采取更进一步的动作。

    4xx:客户机错误:表示该请求含有语法错误或在这个服务器上不能被满足。

    5xx:服务器错误:表示该服务器不能处理一个明显有效的请求。

    6xx:全局性故障:表示该请求在任何服务器上都不能被实现。


    2.消息头:

          消息头的作用是进一步提供有关消息的其他信息,使代理服务器或客户代理服务器更好地对消息进行处理。消息头分四类:通用头(general-header )、请求头(request-header )、响应头( response-header )和实体头( entityheader)

    四大类

    general-header

        描述消息基本属性的通用头域,可用于请求消息和应答消息;

        消息头有:Call-ID,From,To,Via,Contact,CSeq,Encryption,Expires,Record-Route,Timestamp,Date,Accept,Accept-Encoding,Accept-Language

    request-header

         请求头域,只可用于请求消息,它被用来传递有关应答的附加信息,对请求进行补充说明;

       Subject,User-Agent,Organization,Contact,Authorization,Proxy-Authorization,Proxy-Require,Response-Key,Require,Priority,Hide,Route,Max-Forwards。

    response-header

        应答头域,只可用于应答消息,它被用来传递有关应答的附加信息,对应答进行补充说明。

        Proxy-Authenticate,WWW-Authenticate,Retry-After,Server,Warning,Allow,Unsupported。

    entity-header

         消息体头域,用于描述消息体内容的长度、格式和编码类型等属性,可用于请求消息或应答消息。

        Content-Encoding,Content-Length,Content-Type

    消息头格式

        每个消息头都是一个“句子”,以CRLF行结束符表示一个头域的结束。它们都由字段名(field-name)和域值(field-value)两部分组成,中间以“:”相隔。

    常见消息头说明:

    TO:格式:TO:显示名<接收者URI>;tag=n;显示名和tag可选。接收者URI是SIP网络种唯一标识接收终端的标识符。例:TO:DENNY<SIP:caller@WORK.COM>;TAG=11111     或 TO:sip:caller@work.com

    FROM: 消息头FROM给出标识会话发起者的URI。比如:FROM:sip:caller@work.com;tag=hyh8。tag是必需的。

    CALL-ID: 用于全局唯一标识正在建立的会话的标识符。 随机数加UAC标识信息。

    CSeq: 用于标识同一会话中不同事务的序号,通常由一个用作序号的整型数和消息类型组成。整个会话操作过程由不同的事务组成,每一事务所涉及的消息的CSeq序号必须相同。

    Via:为响应消息提供传输路径,当请求消息经过每一跳节点时,每一跳节点都把自身的IP地址信息放入顶层Via中。响应消息则沿着请求消息记录下的传输路径反向传输,首先移走指明自身IP地址信息的顶层消息头

    三、报文格式 SIP 请求消息的过程

    1、 请求应答的一个过程


    1004@192.168.0.107---->1001@192.168.0.112

    1  INVITE ---->SIP SERVER(192.168.0.129)

    2  407 Proxy Authentication Required-->1004

    3  1004   ack--->SIP SERVER

    4  1004  INVITE-->SIP SERVER

    5  SIP-SERVER 100 Giving  --->1004

    6 SIP SERVER INVITE-->1001

    7 1001 100 Trying--->SIP SERVER

    8 1001  180 Ringing---->SIP SERVER

    9  SIP SERVER 180 Ringing ---->1004

    10  1001  200 OK--->SIP SERVER

    11  SIP SERVER  200OK---->1004

    12  1004  ACK--->SIP SERVER

    13  SIP SERVER  ACK ----> 1001

    语音业务VOIP开发之SIP协议篇(三) —— SIP报文解析

    下面深入了解SIP报文:

         SIP是基于一个类似HTTP协议的请求应答的通讯模式。每一个通讯都包含对某个功能的请求,并且起码需要一个应答。在这个应答中,Alice的软电话发送一个含有Bbo的SIP URI抵制的INVITE通讯请求。INVITE是一个SIP请求的例子,表示请求方(Alice)希望服务方(Bob)应答。INVTE请求包含一系列的包头域(Header fields)。包头中包含很多属性并且包含了传输消息的附加信息。在INVITE中有如下的字段:呼叫的唯一标志,目的抵制,Alice的地址,Alice和Bob建立会话的类型。INVITE请求(图1中的F1)可能看起来像这样的:

    INVITE sip:bob@biloxi.com SIP/2.0
    Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
    Max-Forwards: 70
    To: Bob <sip:bob@biloxi.com>
    From: Alice <sip:alice@atlanta.com>;tag=1928301774
    Call-ID: a84b4c76e66710@pc33.atlanta.com
    CSeq: 314159 INVITE
    Contact: <sip:alice@pc33.atlanta.com>
    Content-Type: application/sdp
    Content-Length: 142
    (Alice’s SDP not shown)

    在文本消息的第一行,包含了请求的类型(INVITE)。在这行之后的是这个请求的头域。这个例子中包含了最少需要的头域集合。简单介绍一下:

    VIA域

          包含了Alice接收发送请求的服务器地址(pc33.atlanta.com)。同样这个包含了一个分支参数来标志Alice和这个服务器的会话事务。

    TO域

          包含了显示姓名(Bob)和一个SIP或者SIPS URI(sip:bob@biloxi.com)请求将首先传输到这个URI中。显示姓名(Display names)在RFC 2822中描述。

    From域

          也同样包含一个显示姓名(Alice)和一个SIP或者SIPS URI(sip:alice@atlanta.com)这个URI用来标志请求的原始发起者。这个域也包含了一个TAG参数,这个TAG参数是一个随机字串(1928301774),是软电话(softphone)在URI上增加的一个随机串。用来做标志用途的

    Call_ID

          包含一个全局的唯一标志,用来唯一标志这个呼叫,通过随机字串和softphone的自己名字或者IP抵制混和产生的。通过TO TAG, FROM TAG和CALL-ID完整定义了Alice和Bob之间的端到端的SIP关系,并且表示这个是一个对话性质的关系。

    CSEQ或者Command Sequence

          包含了一个整数和一个请求名字。这个Cseq数字是顺序递增的。每当对话中发起一个新的请求都会引起这个数字的顺序递增。

    Contact域

          包含一个SIP或者SIPS URI用来表示访问Alice的直接方式,通常由用户名和一个主机的全名(Fully Qualified Domain Name FQDN)组成。当FQDN作为首选的时候,许多终端用户由于不会由名字登记(而导致不能访问Alice的主机),所以IP地址是可选的。

         VIA域告诉大家本请求发送到哪里并且应答到哪里,Contract域告诉大家将来的请求将发送到哪里(奇怪…不是Alice发起的么,将来的请求应该是Bob才对啊)。

    Max-Forwards:

         最大转发数量限制了通讯中转发的数量。它是由一个整数组成,每转发一次,整数减一。

    Content-type

         包含了消息正文的描述(消息正文在本范例中没有列出)

    Content-length

         包含消息正文的长度(字节数)

         完整的SIP包头域的定义在20节。会话的细节,比如媒体的类型,codec,或者采样速率,没有通过SIP来描述。这个可以通过SIP的消息正文来描述,可以通过其他定义的协议在正文中进行描述。有一种是会话描述协议(Session Descripotion Protocol SDP)(RFC2327[1])。这个SDP消息(没有在例子中列出)通过SIP的消息中传送,就像通过附件发送EMAIL一样,或者说通过HTTP传输的网页一样。

          由于softphone并不知道bob或者bob的sip服务器biloxi.com在哪里,所以softphone发送INVITE请求到Alice的sip服务器,atlanta.com。这个atlanta.com SIP服务器应该已经在Alice的softphone中配置了,或者可以通过DHCP获得。atlanta.com SIP服务器是一台代理服务器。代理服务器接收SIP请求并且根据请求转发。在这个例子中,代理服务器接收到INVITE请求,并且回送一个100(Trying)应答给Alice的softphone。100(Trying)应答表示INVITE请求已经收到,并且代理服务器正在转发INVITE请求。SIP的应答是通过一个三位数的数字表示的。SIP应答同样包含TO、FROM、Call-ID,CSEQ和在VIA中的分支参数,这个参数使得Alice的softphone可以把请求和应答关联起来。atlanta.com代理服务器收到INVITE请求之后,就去找biloxi.com可能通过DNS服务来找提供这个biloxi.com的SIP服务器。这在[4]中有描述。最后,转发INVITE请求到biloxi.com或者能到达biloxi.com的代理服务器。在转发请求之前,atlanta.com代理服务器会在via头上增加一个一段包含自己抵制的值(INVITE已经包含了Alice的的地址VIA域)。biloxi.com代理服务器收到这个INVITE请求并且返回一个100(Trying)应答给atlanta.com代理服务器标志这它已经收到这个请求并且正在处理这个请求。这个代理服务器通过查询数据库,通常叫做地址服务,这个服务中包含了bob的当前ip地址。(我们在下一节可以看到这个数据库是怎么回事)biloxi.com代理服务增加另一段包含自己地址的VIA头域并且发送它到bob的sip 电话。

         Bob的SIP电话接收到INVITE请求并且提醒bob有一个从Alice的呼入,这样bob可以决定是否响应这个呼入。这个意思就是:bob的电话响了。bob的sip电话发送一个180(Ringing)回应,这个回应将通过两个代理服务器原路返回给Alice。每一个代理服务器通过via头域决定该把这个应答发送给哪里,并且在发送之前把自己的地址从头上拿走。虽然DNS和定位服务在路由最初的INVITE请求,180(ringing)响应可以简单返回给发起者而不需要查找发起者在哪里,并且不需要在代理服务器保留状态,同时,每一个转发INVITE的代理也可以得到INVITE的每一个应答,这样的特性也非常有用。

         当Alice的softphone收到180(Ringing)应答的时候,它提示Alice,可能是通过一个回铃音,或者屏幕上的一个消息提示。

       在这个例子中,Bob决定响应这个呼叫。当他拿起电话,他的SIP电话发送200(OK)回应给发送者,表示这个电话已经接起来了。这个200(OK)包含了一个消息体,这个消息体包含SDP媒体描述,这个媒体描述包含Bob希望和Alice建立何种媒体连接。同样,SDP消息也是两段交换:Alice发送一个给Bob,Bob发送一个回给Alice。这个两段的交换提供基本的兼容性协商,并且基于简单的SDP提出/应答交换模型。如果Bob不想响应这个呼叫或者正在响应别的呼叫,一个错误的响应会代替正常的200(OK)回送出去,这样,就不会有连接建立。SIP完整的返回代码在21节有介绍。Bob发出的200(OK)(图一的F9消息)可能长得像这样的:

    SIP/2.0 200 OK
    Via: SIP/2.0/UDP server10.biloxi.com
    ;branch=z9hG4bKnashds8;received=192.0.2.3
    Via: SIP/2.0/UDP bigbox3.site3.atlanta.com
    ;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2
    Via: SIP/2.0/UDP pc33.atlanta.com
    ;branch=z9hG4bK776asdhds ;received=192.0.2.1
    To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
    From: Alice <sip:alice@atlanta.com>;tag=1928301774
    Call-ID: a84b4c76e66710@pc33.atlanta.com
    CSeq: 314159 INVITE
    Contact: <sip:bob@192.0.2.4>
    Content-Type: application/sdp
    Content-Length: 131
    (Bob’s SDP not shown)

         应答的第一行包含了应答代码(200)和原因(ok)。剩下的行包含了包头域。VIA,TO,FROM,CALL-ID,Cseq包头域是从INVITE请求包中直接拷贝过来的。(有三个VIA域值-一个是Alice SIP电话增加的,一个是atlanta.com代理加的,一个是biloxi.com代理加的)。Bob的SIP电话增加了一个TAG参数。这个TAG参数会被参与对话的各方所使用,并且在以后的对话中被使用。Contract域包含了一个能直接联系到Bob的URI。Content-type和Content_Length域包含了消息体(没有在例子中体现),这个消息体里边是Bob的SDP媒体信息。

          除了DNS和位置服务之外,代理服务器可以自主决定路由,也就是说自己决定应该向哪里转发请求。比如,如果Bob的SIP电话返回一个486(电话正忙)信号,biloxi.com这个代理服务器可以转发这个INVITE请求到Bob的语音邮箱服务器。一个代理服务器可以同时向N个地方发送INVITE请求。这种并发寻找就是传说中的分流(forking)。

          在这个例子中,200(OK)应答通过两个代理并且发送到Alice的softphone上,Alice的softphone收到这个应答,停止振铃,并且标志电话Bob已经接听。最后,Alice的电话发送一个确认消息,ACK,到Bob的SIP电话来确认接收到了这个最后的200(o’k)应答。在这个例子中,ACK信号是直接由Alice的softphone发送到Bob的SIP phone上,跨过了两个代理服务器。这是因为两个端点(Alice和Bob)通过INVITE/200(OK)的请求应答包中的Contact包头域都知道互相之间的地址了,这个地址是最开始发起INVITE请求的时候所不知道的。所以,不需要两个代理服务器再查找对方的地址了,所以代理服务器不参与接下来的通话流了。这就完成了一个完整的使用INVITE/200/ACK 三方握手来建立SIP会话的过程。

          现在,Alice和Bob的媒体会话开始了,他们通过发送刚才建立会话所交换的SDP包中约定的互相明白的媒体包来进行会话。一般情况下,端到端的媒体包和SIP信号控制包通过不同的通讯路径来发送。

          在会话中,Alice或者Bob都可以改变他们自己的媒体会话属性。这个可以通过发送一个包含新媒体属性描述的re-INVITE请求来完成。这个re-INVITE是捆绑在一个现有的会话的,这样参与会话的对方可以明白这是要改变现有的会话属性而不是新建立一个会话。对方收到这个re-INVITE请求后,会发送一个200(OK)应答表示接受这个改变。请求方通过一个ACK来表示接受了对方的这个200(OK)应答。如果对方不同意这个媒体属性变化,他会发送一个错误的应答比如488(暂时不能进行),这个也会收到发起者的一个ACK响应。不管怎样,就是是re-INVITE的失败也不会影响到现有的会话-原有的会话还可以用上次的媒体会话属性继续。

           在通话结束的时候,Bob首先断开(挂机hangs up),并且发送一个BYE的消息。这个BYE的消息将直接送到Alice的softphone,同样是跳过代理的。Alice通过发送200(OK)应答来确认收到了这个BYE消息,这个消息终止了会话并且应答了BYE的请求。ACK在这里不需要发送-一个ACK信号只在响应一个INVITE的响应的时候被发送。我们稍晚一点会讨论这个INVITE的特别处理,但是基于SIP的可靠性的机制,一个通话的时间可以认为包含电话振铃和挂机的时间(but relate to the reliability mechanisms in SIP, the length of time it can take for a ringing phone to be answered, and forking.)基于这样的原因,SIP请求的处理通常根据是否INVITE请求进行分类,INVITE类和非INVITE类请求分开处理。



     

    展开全文
  • SIP协议介绍

    2018-04-13 17:35:49
    了解SIP协议的相关概念和术语,基础的SIP协议分析!讲解SIP协议及其通信流程
  • SIP协议之应答码

    2022-03-17 20:04:04
    SIP应答码是协议中重要的部分,可以表明请求的处理状态。但需要注意的是,应答码不能反应产生状态的真实原因,例如,返回486不一定代表被叫拒绝接听呼叫,但是通常是表示拒接。 以下内容参考RFC3261: Provisional ...
  • VoIP通话之SIP协议

    2020-12-12 23:16:16
    SIP(Session Initiation Protocol), 是属于应用层的控制协议,主要用于在一个或多个参与者之间创建,修改和中止会话(sessions).会话的类型包括IP电话, 多媒体流分发和多媒体会议等. SIP邀请(invitations)用于创建携带...
  • SIP协议基本概述

    千次阅读 2022-03-11 09:45:14
    因为最近项目需要涉及到SIP协议,通过自己查阅网上的资料,感觉还是比较杂乱的,现在项目结束了,打算梳理记录一下,仅供个人学习使用,不涉及任何商业用途,也希望能帮助到刚接触SIP项目的新人。什么是SIP,这里讲...
  • sip 协议注册流程

    千次阅读 2019-12-14 11:32:15
    什么是Sip? 两个话机需要通信,但是只知道对方的号码,这就需要一个服务器充当媒介,服务器负责接收一方的通信请求并通知另一方,直到他们建立通信,同样的,在一方请求结束通信,服务器应该回复请求,并且通知另...
  • SIP 协议格式简介

    千次阅读 2020-10-29 15:19:54
    消息体结构,由三部分组成: Request-Line / Status-Line (请求行 / 状态行) Header (消息头) Body (正文) 示例: ...Request-Line / Status-Line 介绍 ... SIP-Version ... sip:1001@1.1.1.1:5060 ...
  • xxx 什么是视频会议?什么是H.323?SIP是什么协议?_系统
  • IP电话以其通话费率低、方便集成和智能化等优势而得到了众多消费者的极大认可,并因此而对原有固定电话运营者 ...
  • SIP协议与视频通信

    万次阅读 2012-11-28 09:40:48
    一、引 言  通信技术发展到今天,电话网几乎覆盖全球。语音通信(电话)似乎已基本达到在任何时间,任何地点都可以沟通。随着技术的发展,人们已不满足...随着sip协议的出现,视频通信在技术上又有了新的发展动力。
  • SIP 协议理解

    2018-04-08 16:28:54
    协议的理解:连接在网络上的各种设备因为业务需要需要彼此通信... SIP全称是session initiation protocol, 是一个基于文本的应用层控制协议,用于创建,修改和释放一个或者多个参与者的回话。1.分层结构协议。...
  • sip协议:session initiation protocol 会话发起协议–应用层。控制电路信号,是终端和终端,终端和网络之间传递的一种消息,专门用来控制电路,建立、管理、删除连接,以使用户能够正常通过这些连接进行通信。 sip...
  • SIP协议总结[转]

    2020-08-12 10:27:56
    SIP协议是一个用于建立,更改和终止多媒体会话的应用层控制协议,大量借鉴了成熟的HTTP协议(文本格式编码,Request消息中的method等),采用基于文本的UTF-8编码方式,可以承载与UDP或者TCP协议之上(首选UDP)。...
  • SIP协议栈eXosip2分析

    2021-08-17 12:36:04
    接上篇SIP协议栈OSIP分析: https://blog.csdn.net/wwwyue1985/article/details/119520682 eXosip2基于OSIP,提供上层接口,版本也为2-3.1.0,仅供参考。 一关于exosip 2 二exosip的模块构成 2 三关键数据结构...
  • SIP协议的实现

    2020-05-28 10:00:22
    Osip是一个C语言开源代码的sip协议栈;eXosip是Osip的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用 注:在使用eXosip时要有对应版本的osip,比如如果使用eXosip-4.0.0就需要osip-4.0.0;另外最新...
  • GBT28181协议SIP协议

    2022-02-17 11:30:53
    我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《GB/T28181视频整体解决方案》, 一起来围观吧 ...我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《SIP协议简介(比较全面)》,
  • SIP协议解析与实现

    万次阅读 2018-08-15 16:44:09
    SIP协议解析与实现 本文将按照RFC3261逐步的介绍SIP协议,介绍了c和c++语言的实现,分析了osip库的使用和实现。 第一章 概述 一 概述 SIP协议是一个基于应用层的会话控制协议。它可以创建、修改、终止多媒体会话...
  • 【SIP基础】SIP协议基本呼叫流程

    千次阅读 2016-09-09 12:45:38
    SIP呼叫流程下图显示了一个SIP会话的基本呼叫流程。 下面是上述呼叫流程的详细解释: Alice发送INVITE请求到代理服务器,INVITE请求负责发起会话。 代理服务器立即发送Trying 100给请求者(Alice),表示试图响应...
  • SIP概述 SIP协议 SIP系统基本组成 SIP协议 SIP语音电话的通话流程 SIP开发环境
  • 协议--VOIP/SIP

    2021-08-26 18:49:30
    通信系列2: 深入浅出SIP协议 1. 什么是VOIP   VoIP的完整名字是Voice over Internet Protocol,可以简单理解为一种用因特网系统代替传统电话通讯系统进行语音通话的技术。VOIP和传统语音通话技术的最大区别是: ...
  • GB28181技术基础之1 - SIP协议

    千次阅读 2019-04-25 18:29:41
    SIP 协议,即 会话初始协议(Session Initiation Protocol),是一个应用层的 点对点协议,用于初始、管理和终止网络中的语音和视频会话,是 GB28181 的核心之一。 按照 IETFRFC2543 的定义: SIP是一个基于文本的...
  • SIP协议呼叫流程及协议分析

    千次阅读 2017-03-14 00:58:57
    一、SIP协议介绍:  会话发起协议SIP(Session Initiation Protocol)是一个应用层控制信令协议,用于建立、更改和终止多媒体会话或呼叫。SIP作为一个基础,可以在其上提供很多不同的服务。目前已经定义的媒体类型...
  • sip协议学习

    2021-10-10 07:50:46
    学习网址: 媒体协议之SIP协议_nireng666的博客-CSDN博客 (4条消息) PJSIP开发手册之总体设计(一)_smllyy的学习时间轴-CSDN博客_pjsip
  • 一、Sip协议 工作原理相关的参见该文章,写的很详细:https://blog.csdn.net/yunmao2882/article/details/86646608 二、使用步骤 前提条件:在Ubuntu 电脑上安装好数据库 1 sudo apt-get install mysql-...
  • 【入门篇】SIP 协议详解

    千次阅读 2020-09-04 15:50:15
    本博客转载自:https://xiaxl.blog.csdn.net/article/details/104661248 SIP 协议详解 2013年参与过一个

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,472
精华内容 1,388
关键字:

sip协议csdn