2025年SIP协议

SIP协议1 SIP 简介 SIP 全称 Session Initiation Protocol 会话发起协议 是由 IETF Internet Engineering Task Force 因特网工程任务组 制定的多媒体通信协议 用于创建 修改 释放一个或多个参与者的会话 广泛应用于 CS

大家好,我是讯享网,很高兴认识大家。

1. 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(及时消息)等特色业务。SIP类似于HTTP,基于IP协议的SIP利用了IP网络。

2. SIP的发展历程

二十世纪九十年代,Henning Schulzrinne教授与人共同提出通过Internet传输实时数据的实时传输协议(RTP,Real-time Transport Protocol),还与人合作编写实时流传输协议(RTSP,Real-time Streaming Protocol)标准提案,用于控制音视频内容再Web上的流传输。1996年,RFC 2543----第一个SIP规范;2001年,RFC 3261—SIP基础确立, RFC 3262对临时响应的可靠性作规定, RFC 3263确立SIP代理服务器的定位规则, FRC 3264提供提议/应答模型, FRC 3265确定具体的事件通知。

3. SIP的特点

  1. 不定义要建立的会话类型,只定义应该如何管理会话。

----------方便灵活地用于交互式游戏、音乐、视频点播、语音、Web会议等众多应用和服务。

  1. SIP消息基于文本,构建类似于HTTP。

--------方便开发人员使用通用的编程语言来创建应用程序,方便读取和调试,

  1. 重用MIME类型描述

--------方便与会话相关的应用程序可以自动启动。

  1. 重用现有的几个成熟的Internet服务和协议,例如DNS、RTP、RSVP等。

-------很多部分已经现成可用或到位,不必再引入新服务对SIP基础设施提供支持。

  1. 对SIP的扩充易定义。

-------可由服务提供商在新的应用中添加,不会损坏网络。网络中基于SIP的旧设备不会妨碍基于SIP的新服务。

  1. SIP独立于传输层,支持多设备功能调整和协商。

---------底层传输可以采用ATM(异步传输方式)的IP。SIP使用用户数据报协议(UDP)以及传输控制协议(TCP),将独立于底层基础设施的用户灵活地连接起来。如果服务或会话启动了视频和语音,仍然可以将语音传输到不支持视频的设备。

4. 通信要求

  1. 用户定位服务
  2. 会话建立
  3. 会话参与方管理
  4. 特点的有限确定

5. SIP会话构成

SIP会话使用多达四个主要组件:

  • SIP用户代理

SIP用户代理(UA)是终端用户设备,如用于创建和管理SIP会话的移动电话、多媒体手持设备、PC、PAD等。用户代理客户机发出消息,用户代理服务器对消息进行响应。

  • SIP注册服务器

包含域中所有用户代理的位置的数据库。在SIP通信中,这些服务器会检索出对方的IP地址和其他相关信息,并将其发送到SIP代理服务器。

  • SIP代理服务器

SIP代理服务器接受SIP用户代理的会话请求并查询SIP注册服务器,获取收件方用户代理的地址信息。然后将会话请求信息直接转发给收件方用户代理(如果其位于同一域中)或代理服务器(如果用户代理位于另一域中)。

  • SIP重定向服务器

SIP重定向服务器允许SIP代理服务器将SIP会话邀请信息定向到外部域。SIP重定向服务器可以与SIP注册服务器和SIP代理服务器同在一个硬件上。

这些系统通过传输包括了SDP协议(用于定义消息的内容和特点)的消息来完成SIP会话。

SIP通过以下逻辑功能完成通信

  • 用户定位功能:确定参与通信的终端用户位置
  • 用户通信能力协商功能:确定参与通信的媒体终端类型和具体参数
  • 用户是否参与交互功能:确定某个终端是否加入某个特定会话中
  • 建立呼叫和控制呼叫功能:包括向被叫“振铃”、确定主叫和被叫的呼叫参数、呼叫重定向、呼叫转移、终止呼叫等

情景说明1,SIP组件之间如何协调以在同一域中的用户代理之间建立SIP会话:
在这里插入图片描述
讯享网
用户A使用SIP电话,用户B有一台PC,运行支持语音和视频的软客户程序。加电后,两个用户都在ISP(网络服务提供商)网络中的SIP代理服务器上注册了他们的空闲情况和IP地址。
1.呼叫用户B:

用户A发起此呼叫,告诉SIP代理服务器要联系用户B

2.查询B在哪里:

SIP代理服务器向SIP注册服务器发出请求,要求提供用户B的IP地址

3.响应B的SIP地址:

SIP代理服务器收到SIP注册服务器查询到的用户B的IP地址

4.呼叫:

SIP代理服务器转发用户A和用户B进行通信的邀请信息(使用SDP),包括用户A要使用的媒体

5.响应:

用户B通知SIP代理服务器可以接受用户A的邀请,且已经做好接收消息的准备

6.响应:

SIP代理服务器将此消息(用户B接受A的邀请)传达给用户A,从而建立SIP会话。然后,用户创建一个点到点的RTP连接,实现用户间的交互通信。

情景说明2,SIP组件之间如何协调以在不同域中的用户代理之间建立SIP会话:
在这里插入图片描述

1.呼叫用户B:

用户A邀请正在使用多媒体手持设备的用户B进行SIP会话,域A中的SIP代理服务器辨别出用户B不在同一域中

2.询问域B中的用户:

3.响应:

SIP重定向服务器将用户B的联系信息反馈给SIP代理服务器

4.呼叫域B中的SIP代理:

该SIP代理服务器再将SIP会话邀请信息转发给域B中的SIP代理服务器

5.查询B在哪里:

域B中的SIP代理服务器向SIP注册服务器发出请求,要求提供用户B的IP地址

6.用户B的地址:

域B的SIP代理服务器收到域B的SIP注册服务器查询到的用户B的IP地址

7.代理呼叫:

域B的SIP代理服务器转发用户A的邀请信息发送给用户B

8.响应:

域B中,用户B通知该SIP代理服务器可以接受用户A的邀请,且已经做好接收消息的准备

9.响应:

用户B再沿着邀请信息经由的同一路径转发接受邀请的信息

10.响应:

域A的SIP代理服务器将此消息(用户B接受A的邀请)传达给用户A,从而建立SIP会话。然后,多媒体通道已建立。

6. 常用的SIP消息

SIP协议是一个Client/Server协议,因此SIP消息分为两种:请求消息和响应消息。
请求消息是SIP客户端为了激活特定操作而发给服务器的消息。

常见的SIP请求消息如下:

  • INVITE:表示主叫用户发起会话,邀请其他用户加入一个会话,也可以用在呼叫建立后用于更新会话(此时INVITE又称为Re-invite)
  • ACK:客户端向服务器端证实它已经收到了对INVITE请求的最终响应。
  • PRACK:表示对1XX响应信息的确认请求消息。
  • BYE:表示终止一个已经建立的呼叫。
  • CANCEL:表示在收到对请求的最终响应之前取消该请求,对于已完成的请求则无影响。
  • REGISTER:表示客户端向SIP服务器端注册列在To字段中的地址信息。
  • OPTIONS:表示查询被呼叫的相关信息和功能。

SIP协议中的响应消息用于对请求消息进行响应,指示呼叫的成功或失败状态

常见的一些响应消息:

  • 100试呼叫(Trying)
  • 180振铃(Ringing)
  • 181呼叫正在前转(Call is Being Forwarded)
  • 200成功响应(OK)
  • 302临时迁移(Moved Temporarily)
  • 400错误请求(Bad Request)
  • 401未授权(Unauthorized)
  • 403禁止(Forbidden)
  • 404用户不存在(Not Found)
  • 480暂时无人接听(Temporarily Unavailable)
  • 486线路忙(Busy Here)
  • 504服务器超时(Server Time-out)
  • 600全忙(Busy Everywhere)

7. Sip消息的两种会话模式

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

  1. Session Model
  2. Pager Model

7.1 Session Model

会话中,对于消息体内容大于1300字节时,一般采用Session Model。其会话建立过程如下图:详见:SIP协议详解
在这里插入图片描述
主呼叫方A呼叫被叫方B:

  1. 主叫方A发送INVITE请求到代理服务器1;
  2. 代理服务器1发送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,会话终止。

7.2 Pager Model

在Sip消息中,对于消息体不大于1300字节时,一般采用Pager Model。Sip消息通信中采用Message方法,Message方法本身并不建立Dialog,在多数应用中,每条IM消息都是独立的。Pager Model请求流程如下:
在这里插入图片描述
1:User1发送Message请求到代理服务器;
2:代理服务器转发User1的Message请求给User2;
3:User2收到User1的消息后,回复200 OK给代理服务器;
4:代理服务器转发200 Ok回复给User1.

7.3 SIP消息体格式

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

  • 请求行(request-line)与状态行(status-line)
  • 消息头(header)
  • 正文(body)

一、request-line 请求行
格式:Method Request-URL SIP-Version CRLF

举例:INVITE sip: SIP/2.0 /r/n

Method:

  • REGISTER:注册联系信息
  • INVITE:发起会话请求
  • ACK:INVITE请求的响应的确认
  • CANCEL:取消请求
  • BYE:终结会话
  • OPTIONS:查询服务器能力
  • MESSAGE:RFC3428对Sip协议的扩展,增加了MESSAGE方法。采用Pager Model进行通信,传递不超过1300字节的数据。

Request-URL:
指示请求的用户或者服务的地址信息

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

二、status-line 状态行
格式:SIP-Version Status-Code Reason-Phrase CRLF

举例:SIP/2.0 200 OK /r/n

Status-Code状态码:
状态代码由3位数字组成,表示请求是否被理解或被满足
状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。
第一个数字有5种可能的取值:

  • 1XX:临时响应、表示请求消息正在被处理
  • 2XX:成功响应、表示请求已被成功接收完全理解并接收
  • 3XX:重定向响应、表示需采取进一步完成请求
  • 4XX:客户机错误、表示请求消息中包含语法错误或服务器无法完成客户机的请求
  • 5XX:服务器错误、表示服务器无法合法完成请求
  • 6XX:全局故障、表示任何服务器都无法完成该请求

常用的状态码举例:

  • 100:Trying 试呼叫
  • 180:Ringing 振铃
  • 181:Call is Being Forwarded 呼叫正在前转
  • 200:OK 成功响应
  • 302:Moved Temporarily 临时迁移
  • 400:Bad Request 错误请求
  • 401:Unauthorized 未授权
  • 403:Forbidden 禁止
  • 404:Not Found 用户不存在
  • 408:Request Timeout 请求超时
  • 480:Temporarily Unavailable 暂时无人接听
  • 486:Busy Here 线路忙
  • 504:Server Time-out 服务器超时
  • 600:Busy Everywhere 全忙

三、Header 消息头
Header字段含义说明如下:

  • Call-ID:由本地设备Client生成,全局唯一,每次呼叫这个值唯一不变
    举例:Call-ID:asd88asd77a@1.2.3.4
  • From:表示请求的发起者
    举例:From: sip:;tag=49583
  • To:表示请求的接收者
    举例:To:sip:
  • Via:Via头域是被服务器插入request中,用来检查路由环,并且可以使response根据via找到返回的路
    举例:Via:SIP/2.0/TCP user1pc.domain.com; branch=z9hG4bK776sgdkse
  • Max-Forwards:用于表示这个包最多可以传送多少跳,每经过一跳都会减一当Max-Forwards==0系统会返回483.默认为70
    举例:Max-Forwards:70
  • Contact:包含源的URL信息,用来给响应方直接和源建立连接用
    举例:Contact:sip:192.168.100.1:1111
  • Content-Type:指明消息体的类型(SDP会话描述协议)
    举例:
    Content-Type:text/plain;
    Content-Type:application/sdp;
    Content-Type:application/cpim;
  • Content-Length:指明消息体的字节大小
    举例:Content-Length:18

参考资料:
1.SIP协议详解
2.SIP百度百科

小讯
上一篇 2025-01-09 21:58
下一篇 2025-03-20 20:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/57616.html