SIP协议是由IETF提出的在IP网络上进行多媒体通信的应用层控制协议。采用分层的方法来创建服务,是应用层上的一个控制协议,用来创建,修改和终止有多个参与者的多媒体会话进程。参与会话的成员可以通过组播,单播或者两者结合的方式进行通信。可以用来邀请一个新的成员加入其中,也可以创建全新的会话。一般情况下,sip协议使用RTP协议传送音频和视频流,使用SDP协议进行媒体描述。
SIP协议首先要建立呼叫信道,由服务器的IP地址和端口号建立客户和服务器端的呼叫信道,客户端在发出自己的请求消息中的参数告诉服务器端它自己的媒体通道的IP地址和端口号,然后服务器端在发出最终响应的时候,客户端和服务器端的媒体信道建立起来了。当服务器端接收到客户端发来的确认消息后,他们才开始通信。
SIP协议采用文本格式的client/server工作方式,是一个请求应答的协议,该协议定义了多个执行相应功能的网络实体。这些网络实体通常包含:用户代理UA和网络服务器NS,UA又分为用户代理客户端UAC和用户代理服务器UAS,UAC负责发起SIP呼叫请求,UAS负责对呼叫请求作出响应。网络服务器主要为客户代理提供注册,认证,鉴权和路由等服务。根据其功能不同,网络服务器可分为代理服务器,重定向服务器和注册服务器三种。
代理服务器主要完成消息的转发
重定向服务器接收SIP请求,把请求中的源地址映射成多个或零个新地址,返回给客户端UAC.
注册服务器接收客户端的注册请求,完成用户地址的注册。
SIP支持三种呼叫方式:(1)由客户端像服务器端直接呼叫
(2)由UAC在重定向服务器的辅助下进行重定向呼叫
(3)由代理服务器代表UAC向被叫发起呼叫
Sip把一个呼叫分为三个阶段:呼叫建立,呼叫保护,呼叫释放。
首先要建立呼叫信道,即一个TCP/UDP连接。因此,由服务器的IP地址和端口号建立客户端与服务器端之间的呼叫信令道。然后,客户端向服务器端发送消息INVITE消息,如果服务器段同意呼叫,发送(2),(3)消息。其中,1xx状态码表示请求已收到,正在处理中,200表示请求已经完成。这时,如果客户端突然不想参加此次会话,可以向服务器发送BYE。
图中3xx相应只会在用重定向服务器出现的时候,表示对请求的重定向处理,4xx响应表示客户端的请求有语法错误不能被服务器执行。5xx响应表示服务器出错,不能执行合法请求。6xx响应表示所有服务器出错,不能执行合法请求。当客户接受3xx,4xx,5xx响应后,可根据响应中的消息修改消息,并重发请求。当客户端接受6xx响应后,结束此次呼叫。
消息 | 用法 |
INVITE | 呼叫一个用户代理,传送一次呼叫。 |
ACK | 确认呼叫。 |
BYE | 终止呼叫。 |
CANCEL | 终止还未OK的呼叫。 |
REGISTER | 提供一项注册服务,带有一个联系地址和可以用来代替的别名。 |
OPTIONS | 询问一个用户代理的“能力”(例如,该用户代理能够识别的消息和编码)。 |
响应消息:
消息 | 用法 |
100 Trying | 消息已收到,但是最终用户代理尚未进行处理。请等待。 |
180 Ringing | 最终用户代理已经收到消息,正在提示用户。请等待。 |
200 OK | 最终用户已经接受消息。 |
301 Moved Permanently & 302 Moved Temporarily | 用户代理的地址已经改变,新的永久或临时地址位于Contact字段中。 |
400 Bad Request | 普通错误消息。客户端不能识别消息。 |
401 Unauthorized & 407 | 请使用证书重试。 |
404 Not Found | 要联系的用户不存在或尚未注册。 |
408 Request Timeout | 另一方没有响应。这意味着SIP消息永远不会OK。所有重试都将被丢弃。这并不意味着电话响太长时间(电话可以永远响铃)。 |
消息使用类似的头字段类型
头字段 | 用法 |
From | SIP请求的发送者。 |
To | SIP请求的接受者。这通常与SIP URI相同(可以是一个“别名”或一个实际地址)。 |
Contact | 用户代理的实际地址。 |
Call-ID | 代表两个用户代理之间的完整呼叫或对话。所有相关的SIP消息都使用同一个Call-ID。例如,当一个用户代理收到一条BYE消息,根据Call-ID,它就知道要挂断哪次呼叫。 |
CSeq | 消息的顺序编号。这在一次对话或一个Call-ID中是惟一的。这用于区别新的消息和“重试消息”。当一条初始消息没有及时OK时,重试就会进行,并会定时发送。 |
Content-Type | 消息内payload的MIME类型。 |
Content-Length | payload的大小,以字节为单位。信封和payload之间由一空行隔开。 |