协议标准:RFC3261
通信主体
名称 | 简写 | 用途 |
---|---|---|
用户客户端 | UAC | 发起呼叫的实体 |
用户服务端 | UAS | 接收呼叫并响应的实体。 |
代理服务器 | Proxy Server | 代表其他客户机生成请求,传递到其他服务器(其他代理,重定向,注册) |
重定向服务器 | Redirect Server | 接受SIP请求,UAS的SIP地址映射对应的地址成返回客户机,不传递请求到其他服务器 |
注册服务器 | Registrar Server | 接收注册,存储地址,处理地址请求 |
跨域呼叫
-
域A终端发起呼叫域B终端请求;
-
域A的SIP代理服务器发现被叫方不属于自己管理的域,向SIP重定向服务器查询被呼终端的域代理服务器在哪里;
-
SIP重定向服务器向域A的SIP代理服务器返回被呼终端所在域的SIP代理服务器地址;
-
域A的SIP代理服务器向域B的SIP代理服务器转发呼叫请求;
-
域B的SIP代理服务器向域B的注册和定位服务器查询被呼方的地址;
-
域B的注册和定位服务器向域B的SIP代理服务器返回被呼方的地址;
-
域B的SIP代理服务器向被呼方转发呼叫请求;
-
被呼方响应呼叫请求给域B的SIP代理服务器;
-
域B的SIP代理服务器转发呼叫响应给域A的SIP代理服务器;
-
域A的SIP代理服务器将呼叫响应转发给主叫终端。
协议格式
请求行与状态行
-
请求行:Method SP Request-URI SP SIP-Version CRLF
-
状态行:SIP-Version SP Status-Code SP Reason-Phrase CRLF
头域
-
以":"作为key与value的分割符,
-
允许list,以","作为分隔符,或者直接key同名,list有顺序,顺序不同的list不相等
-
允许多行,行首加空格或Tab,表示接上行
-
参数以";"作为分割符,一个field中parameter是唯一的。格式–field-name: field-value *(;parameter-name=parameter-value)
-
大小写不敏感
-
允许简写:简写
-
头域常见Key:全部定义
key 含义 例子 说明 From 请求的发起者 From: “A. G. Bell” <sip:agb@bell-telephone.com> ;tag=a48s name和<>,可选 To 请求的响应者 To: The Operator sip:operator@cs.columbia.edu;tag=287447 同from Contact 后续Request的请求地址 m: sips:bob@192.0.2.4;expires=60 Call-ID 通话标识 Call-ID: f81d4fae-7dec-11d0-a765-00a0c91e6bf6@biloxi.com Via 记录请求的路由 Via: SIP / 2.0 / UDP first.example.com: 4000;ttl=16 ;
maddr=224.2.0.1 branch=z9hG4bKa7c6a8dlze.1CSeq 标识事务并对事务排序 CSeq: 1 INVITE
例子
SIP方法
方法 | 含义 |
---|---|
REGISTER | 向SIP服务器注册标明自己的位置 |
INVITE | UAC发送此信息用以邀请UAS加入会话(包择一对一通话或conference |
ACK | 为INVITE回复一个确认信息 |
CANCEL | 用来中止一个还没建立(在建立过程当中)的呼叫 |
OPTIONS | 用来查询server的capability |
BYE | 用来中断呼叫 |
INFO | 发送会话中信息而不改变会话状态 |
PRACK | 用于回复一个临时性的请求 |
REFER | 呼叫转移,联系第三方 |
SUBSCRIBE | 用来向远端端点预订其状态变化的通知 |
NOTIFY | 用于通告当前资源状态 |
UPDATE | 在接到初始INVITE的回复时,UAC用UPDATE修改一个呼叫的参数而不影响该会话的当前状态 |
MESSAGE | 通过在其请求体中承载即时消息内容实现即时通讯 |
SIP状态码
错误码 | 主要含义 |
---|---|
1xx | 临时应答-请求已经收到,正在处理这个请求 |
2xx | 成功处理-请求已经成功接收,并且正确处理了这个请求 |
3xx | 重定向-还需要附加的操作才能完成这个请求,本请求转发到其他的服务器上处理 |
4xx | 客户端错误-求包含错误的格式或者不能在这个服务器上完成 |
5xx | 服务器错误-服务器不能正确的处理这个显然合法的请求 |
6xx | 全局错误-请求不能被任何服务器处理 |
5xx | 服务器错误-服务器不能正确的处理这个显然合法的请求 |
| 6xx | 全局错误-请求不能被任何服务器处理 |