一、概念:
SIP(会话发起协议): 是一个应用层的信令控制协议, 定义了用户间交互式媒体会话的发起,修改和终止过程.
SIP默认使用UDP 5060端口,但也可以使用TCP 5060。
SIP的四项基本功能:定位用户,将SIP地址解析为IP地址;
协商Session的feature和capability;
在进行呼叫时改变会话参数;
负责会话的建立和中断。
会话
会话ID: 由Call-ID,和一个本地tag和远程tag组成。
对话是表现为两个用户代理(UA)之间的持续一段时间的点对点的SIP关系(从INVITE到BYE通话的整个过程)。
事务:
一个SIP 事务由一个单个请求和这个请求的所有应答组成,这些应答包括了零个或者多个临时应答以及一个或者多个终结应答。在事务中,当请求是一个INVITE(叫做INVITE事务),当终结应答不是一个2xx应答的时候,事务还包括一个ACK。如果应答是一个2xx应答,那么ACK并不认为是事务的一部分。
一个会话中分为多个事务,有服务端事务和客户端事务。同一个事务的响应和其原请求的CSeq字段的序号和方法相同。
二、SIP协议:
SIP分层:第一层的是它的语法和编码层。第二层是传输层。第三层是事务层。在事务层之上是事务用户(TU)
请求:请求行:MESSAGE sip:[email protected]:6010 SIP/2.0
应答:状态行:SIP/2.0 200 OK
头域:
From:域也同样包含一个显示姓名(Alice)和一个SIP或者SIPS URI(sip:[email protected])这个URI用来标志请求的原始发起者。From域必须包含一个由UAC产生的新的”tag”参数。
TO:域包含了显示姓名和一个SIP或者SIPS URI.请求将首先传输到这个URI中。这个域内的地址可以是也可以不是请求的最终接收者。
CallID:包含一个全局的唯一标志,用来唯一标志这个呼叫,通过随机字串和softphone 的自己名字或者IP地址混和产生的。在对话中的任一UA的所有请求和所有应答的Call-ID必须一致。
CSEQ或者Command Sequence: 用来区分和作为事务的顺序使用的。包含了一个整数和一个请求名字。这个Cseq数字是顺序递增的。CSeq: 1 INVITE
VIA:用来描述请求当前经历的路径的,并且标志了应答所应当经过的路径。Via头域的branch ID参数提供了事务的标志,并且用于proxy来检查循环路由。只有当需要通过选择传输设备到达下一个节点(hop)的时候,才需要在头域中包含Via域。当UAC创建一个请求,它必须在头域中添加一个Via域。如果在应答中,有不只一个Via头域值存在,那么UAC应该丢弃这个消息。
Contact: 提供了访问后续请求的特定UA实例的联系方法.
Max-Forwards:最大转发数量限制了通讯中转发的数量。它是由一个整数组成,每转发一次,整数减一。
Route:用于强制一个请求经过一个proxy路由列表。
Route头域:用于无状态的事务路由。
一个合法的 SIP 请求必须至少包含如下头域:TO, FROM, Cseq, Call-ID, Max-Forwards, Via;这些字段在所有SIP请求中必须包含。这 6个字段是 SIP 消息的基本组成分,他们提供了用于路由用的核心信息,包含了消息的地址,响应的路由,消息传递次数,详细的顺序,事务的唯一标志。
二、SIP组件:
User Agent(SIP终端):
User Agent Clients (UAC) –发起呼叫的功能实体.
User Agent Server (UAS) –接收呼叫的功能实体.
用户代理按照是否保存状态可分为有状态代理、有部分状态用户代理和无状态用户代理。IP电话、PC、路由器等都能做UA,UAC 和 UAS -都能终止一个呼叫.
Proxy Server: 代理服务器是同时作为服务器和客户机的中间实体,其目的是代表其他客户机生成请求。请求被内部处理或可能在翻译之后将其传递到其他服务器。主要起到call routing、authentication、authorization、address resolution、loop detection的功能。
Redirect Server: 重定向服务器接受 SIP请求,并将被呼叫方的 SIP地址映射成零个(如果没有可知地址)或更多的新地址并且将它们返回客户机。不像代理服务器,重定向服务器不传递请求到其他服务器。
Registrar Server: UA可以向Registrar Server注册自己的位置信息,Registrar Server将位置信息保存在数据库中(也可保存在其他server的数据库中)以回复其他server发来的location request。
以上几种服务器可共存于一个设备,也可以分布在不同的物理实体中。SIP服务器完全是纯软件实现,可以根据需要运行于各种工作站或专用设备中。
三、SIP消息:
SIP消息有两种:客户机到服务器的请求(Request),服务器到客户机的响应(Response)。
SIP消息由一个起始行(start-line)、一个或多个字段(field)组成的消息头、一个标志消息头结束的空行(CRLF)以及作为可选项的消息体message body)组成。其中,描述消息体(message body)的头称为实体头(entity header),其格式如下:
SIP消息=起始行/状态行
*消息头部(1个或多个头部)
CRLF(空行)
〖消息体〗。
起始行分请求行(Request—Line)和状态行(Status—Line)两种,其中请求行是请求消息的起始行,状态行是响应消息的起始行。
消息头分通用头(general-header)、请求头(request-header)、响应头(response-header)和实体头(entity-header)4种。
1. REGISTER
UA client使用此message向server注册以标明自己的位置。
一个REGISTER请求可以增加一个address-of-record和一个或者多个联系地址之间的绑定。Request-URI无用户部分。
2. INVITE
UAC发送此信息用以邀请UAS加入会话(包择一对一通话或conference),其实就是一个call setup message。
3. ACK
为INVITE回复一个确认信息。
4. CANCEL
用来中止一个还没建立(在建立过程当中)的呼叫。
UAS接收到对一个INVITE请求的CANCEL请求,当这个INVITE还没有得到终结应答的时候,UAS会“停止振铃”,并且给INVITE请求一个应答(487)。
客户端:发送INVITE后,客户端等到了第一个临时应答后才能发送CANCEL。
5. OPTIONS
用来查询server的capability。
提供客户端一个手段来查询服务端支持的方法,内容类型,扩展,codecs等。
6. BYE
用来中断呼叫。
7. INFO
发送会话中信息而不改变会话状态。
8. PRACK
用于回复一个临时性的请求
9. REFER
使用这个REFER指向另一个电话,从而完成call transfer,联系第三方。
10. SUBSCRIBE
该方法用来向远端端点预订其状态变化的通知。11. NOTIFY
12. UPDATE
在接到初始INVITE的回复时,UAC用UPDATE修改一个呼叫的参数而不影响该会话的当前状态,例如QoS等。
13. MESSAGE:通过在其请求体中承载即时消息内容实现即时通讯;
四、SIP 呼叫流程:
略
附录:缩略语
ACD: Automatic Call Distribution 自动呼叫分配
PBX: Private Branch eXchang用户级交换机
NGN: Next Generation Network 下一代网络
IMS: IP Multimedia Subsystem IP多媒体子系统
IVR: Interactive Voice Response 交互语音应答系统
ALG: Application Layer Gateway 应用层网关
IM: Instant Messaging 即时通讯
SMS: Short Message Service短信服务
HA: High Availability 高可用性
PMS: Property Management System财产管理系统
DISA: Direct Inward System Access直接拨入系统访问
VRRP: Virtual Router Redundancy Protocol 虚拟路由器冗余协议
VAD: Voice Activity Detection静音监测
CNG: Comfort Noise Generator舒适背景噪音生成
ToS: Type of Service 服务类型
DSCP: Differentiated Services Code Point 差分服务代码点
DID: 直接拨入
DOD:直接拨出