1. 概念
SIP协议全称“会话发起协议”,属于应用层控制协议。它规定一个或多个参与方的终端进行交互通信的标准,能够建立、修改和中断连接实现视频、语音、即时通讯等,在OSI模型中位于会话层,如下图所示:
是一种什么协议?
- SIP是一个基于文本的应用层控制协议,严格来讲属于会话层,用于创建、修改和释放一个或多个参与者的会话。这些会话可以是Internet多媒体会议、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信;
- SIP是一种信令协议,用于初始、管理、终止网络中的语音和视频会议,具体地说就是用来生成、修改和终结一个或多个参与者之间的会话;
- SIP是点对点协议;
- SIP协议的终端可以是PC机、对讲仪终端、安装特定软件的手机、平板、网页或者语音机器人等定制化设备。主要用于即时通信;
- SIP是一种源于互联网的IP语音会话控制协议,具有灵活、易于实现、便于扩展等特点;
- 它是一种应用层协议,与其他应用层协议协同工作,通过Internet控制多媒体通信会话;
- SIP与负责语音质量的预留协议(RSVP)互操作。它还与若干个其他协议进行协作,包括负责定位的轻型目录访问协议(LDAP)、负责身份验证的远程身份验证拨入用户服务 (RADIUS) 以及负责实时传输的 RTP 等多个协议;
2. 功能
- 用户定位:SIP协议中被叫方可在不同位置移动,呼叫方用户请求与被叫方建立会话时,向SIP服务器发送请求查找找用户位置;
- 用户有效性:会话参与者可以有多名,在收到呼叫请求之后,可自愿选择是否参与会话;
- 用户能力描述:请求方在SDP中描述自身支持哪些媒体数据或会话参数;
- 建立会话:在用户发送会话请求时,必要的一些媒体参数已描述清楚后,被叫方用户接受请求,并根据请求信息中的SDP描述来配置后,需要发送“Ringing"振铃消息建立起会话;
- 会话管理:添加、修改媒体流参数或其他参数;保持会话等待、激活会话和终止现有会话。
3. 消息类型
SIP协议的消息是基于文本的协议,标准的消息由开始行、消息头和消息体组成,分为请求消息和响应消息,区别在于消息的起始行是否包含状态信息。SIP请求消息定义了6种方法:
- REGISTER注册:UAC启动时告诉注册服务器自身的位置
- INVITE邀请:UA发起会话邀请
- ACK: 被呼叫方在收到邀请后,回应200或180表示确认,ACK表示主叫方收到确认信息,会话建立成功
- CANCEL:被呼叫方取消主叫方的会话邀请
- BYE:会话参与者有一方想退出已建成功的会话,发起BYE消息
- OPTIONS:查询代理服务器的能力和负载情况
响应消息有6种,包含临时应答、请求成功、位置异常通知、请求失败通知、服务器故障或全局错误。
SIP协议支持消息扩展,消息类型、消息头和消息体都可以扩充,如以下几种情况
- 将电话信令集成到sip消息中,以解决公共交换电话网和sip网络和互联;
- 解决跨网域的防火墙和NAT通信问题;
- refer事件扩展,支持呼叫转移;
4. 主要组件
- 终端用户设备UA:用于创建和管理 SIP协议会话的设备;
- 位置服务器:记录并管理UA的位置信息;
- 注册服务器 :为了判定用户的处于何地,UA终端注册到一个注册服务器,注册服务器会分配特定地址给到终端UA ,该地址是有生命周期的,UA需要定时刷新注册状态以保活;
- 代理服务器:接受UA 的会话请求并查询注册服务器,获取收件方 UA 的地址信息。然后,它将会话邀请信息直接转发给收件方 UA(同一域中)或代理服务器(UA 位于另一域中)。根据对请求的处理方式分为有状态代理服务器和无状态代理服务器,无状态代理服务器仅对消息进行简单传递,有状态代理服务器会保留接收的请求和应答的相关信息,用于处理与该消息有关的后续消息。通过创建事务状态机对消息的全生命周期进行管理,每条都是会给事务状态机处理,直到事务完成;
- 重定向服务器:接收请求后查询请求消息者的位置信息,然后在应答消息中创建位置列表请返回该信息,允许 SIP代理服务器将 SIP协议会话邀请信息定向到外部域;
5. 标准协议
SIP协议被设计为非常简单,具有有限的命令集。它也是基于文本的,因此任何人都可以读取在SIP会话中的端点之间传递的SIP消息。
SIP的标准协议都是IETF制定的,所以SIP的标准协议都是通过RFCXXXX的方式来公布的,每个协议均制定了一些SIP的特性:
- RFC3261:SIP的基本协议,定义了SIP的基本功能,特性等。要搞SIP的话,这个协议是不能不看的。网上有人已经将它翻译成中文,再结合英文原版协议看,应该比较好理解。
- RFC3262:SIP中,如何定位服务器。这个没过多研究,一般的SIP协议栈都可以很好的支持,让它们去做就可以了。
- RFC3265:事件通知机制,可通过此协议进行一些事件监控。
- RFC3515:呼叫的转接。
- RFC3666:与PSTN连接时的一些特性的说明。
- RFC3911:通过Join的方式进行会议。
6. 实现机制
SIP是一个分层结构的协议,它的行为根据一组平等独立的处理阶段来描述,每个阶段之间是松耦合的关系。
- SIP的最低层是其语法和编码。其编码使用扩充的背景 - 诺尔表单语法(BNF)指定。
- 第二层是传输层。它定义了客户端如何发送请求和接收响应,以及服务器如何通过网络接收请求和发送响应。所有SIP元素都包含传输层。
- 接下来是交易层。事务是由客户机事务(使用传输层)发送到服务器事务的请求,以及从服务器事务发送回客户机的对该请求的所有响应。用户代理客户端(UAC)完成的任何任务都使用一系列事务进行。无状态代理不包含事务层。
- 交易层上方的图层称为交易使用者。除了无状态代理,每个SIP实体都是事务用户。
7. 会话过程
SIP协议同HTTP协议相似并采用了一些相同的设计原则如客户端UAC/服务端UAS模型,主动发起请求端为UAC端,接受请求端为UAS端,一个请求的完整称为一个事务,以一个或者多个响应结束,中间可以支持多个临时响应,在这个过程中UAC和UAS的角色是可以互换的,如一次呼叫事务中A发起呼叫,A是UAC,另一端是UAS;呼叫结束时谁先挂机谁是UAC,另一端是UAS。
SIP协议以INVITE请求,以SIP URL的方法表示发起,以BYE请求来结束。根据不同的网络结构分为三种方式:两个UA之间直接进行呼叫、通过代理服务器呼叫和通过重定向的方式呼叫。SIP一般需要使用以下协议完整一次完成的通信:
- SDP:会话名称、会话时间、 哪个IP端口、会话参与者所支持的多媒体种类、传输协议类型、编解码算法等信息
- RTP: 实时传输协议
- RTCP: 实时传输控制协议, 和 RTP一起工作的控制协议
- TLS:提供安全性和完整性保障
7.1 一对一呼叫
无代理服务器的会话创建过程,直接实现SIP的消息发起和响应过程。
7.2 通过代理服务器呼叫
7.3 通过重定向呼叫
UAC通过重定向服务器获得真是UAS地址后,之后的通信过程和一对一的呼叫过程一样。
在200 OK传输过程如果对端在超时后没有收到,则说明该丢失要重新发送,直到UAS收到ACK请求,确保可靠性传输的完全完成。