1、基本知识点:
该协议是IP网络上进行多媒体通信的应用层控制协议,用来创建、修改、终结一个或多个参加者参加的会话进程
创建:A<------>B
修改:A要给C打电话
终结:结束通话
文本编解码的,采用事务机制(每个请求触发server,请求和响应构成一个事物,事物间彼此独立)
sip独立于底层传输协议:sip协议承载在iP网,网络层协议为IP,传输层协议可用于TCP/UDP (推荐udp)
SDP---》sip----》UDP/tcp---->IPv4/IPv6---->接入网
2、标准
RFC3261 。。。
3、sip逻辑实体-----逻辑意义上的实体,实际不存在
UAS/UAC:用户代理(服务端/用户端)
两个的区分没那么明显:只要谁发起谁就是用户端
代理服务器: | 代理服务器接收sip请求并将其路由至其它代理服务器或终端(负载均衡:一个代理服务器连接多个服务器) |
重定向服务器 | 收到请求时,通过应答将路由器信息推送到客户端,客户端收到应答,可以向指定的服务器发起请求 |
注册服务器 | 用来接受UAC的注册信息,登记用户的联系方式信息(IP,域名。。。),如果存在定位服务器,把信息写入定位服务器中 |
注册服务器和代理服务器甚至所以的服务器都可以为同一设备-------IPPBX设备
4、sip消息概述
sip是使用UTF-8字符集的文本协议,协议定义了两类消息格式:【请求消息---应答消息】
//消息类似于http
generic-message = start-line
*message-header
CRLF
[message-body]
start-line = Request-Line / Status-Line
/*
请求消息和应答消息的开始行不同:Request-Line / Status-Line
message-header:
·由一些头域组成,包含那种头域取决于具体的消息和Method
message-body:
·由头域中的Content-type组成,一般为session description(SDP)
说明:SP为空格,CRLF为回车换行
Method SP Request-URI SP SIP-Version
Request-Line:请求消息
Request-Line = Method SP Request-URI SP SIP-version CRLF
Method6种:
REGISTER:用于向注册服务器联系人地址
INVITE:用于用于发起会话请求或邀请某个用户加入会话,发出invite的一方可以通过message body 携带SDP,指明本次会话的媒体类型及参数。
ACK:对INVITE的最终响应,该消息仅和INVITE配套使用。
CANCEL:取消尚未完成的invite请求
BYE:结束会话
OPTIONS:查询服务器能力
扩展定义:
PRACK(保证零时应答的可靠性),INFO,MESSAGE,UPDATE,NOFIFY,REFER
(支持哪些Method可通过头域中的ALLOW指示)
Request-URI:代表请求涉及的用户或者服务的地址。
格式:sip:user:password@host:port;uri-parameters?headers
user:用户地址标识,可以是标准的电话号码、文本形式的用户名
password:可选,不推荐用户密码明文传输
host:代表提供SIP服务的地址标识,可以是域名或者IP地址
port:和host配对,指明提供sip服务的TCP/udp端口号
uri-parameters:uri参数,格式类似http,采用name=alue格式。。。
header:请求的头域
STATUS-Line:
status-line = SIP-VERSION SP STATUS-CODE SP Reason-Phrase CRLF
STATUS-CODE:3位数字组成,代表请求处理结果,第一个数字代表大类:,后两个数字代表具体应答子类型
Reason-Phrase:为code对应的文本解释
//---------服务器应答返回-----
1xx:临时应答,代表请求收到,正在处理这个请求
2xx:最终应答,请求处理成功
3xx:重定向应答,转到请求到其它服务器
4xx:客户端错误,消息格式错误或服务器无法接受,或者服务器不能处理
5xx:服务器错误,请求合法,但服务器处理不了
6xx:请求不能被任何服务器处理
100:正在尝试
180:请求成功执行
300:在请求的地址进行解析时出现多个请求
401:在进行此项请求之前需要进行授权
407:在进行之前,首先需要用户代理授权
501;没有实现该服务
603:拒绝服务的黑名单
From | 请求发起者 |
To | 请求接收者 |
Call-ID | 唯一区别一个特定的邀请或者一个特定的客户端的所以注册项 |
Cseq | 请求中的Cseq头域,包含一个单个的数字序列号、请求的方法,Cseq头域是为了在会话中对事务进行排序的,提供事务的唯一标志,并且区分请求和请求的重发 |
Contact | 会话参与者的联系方式 |