您的位置:首页 > 其它

sip 信令组成的基本格式 总结

2012-06-25 11:09 239 查看
SIP Server的基本原理

SIP协议采用Client/Server模型。每一个请求(Request)触发服务器的一个操作;每个操作被称为方法(Method);每个请求除了指明具体方法外,还携带了一系列的头域(Header field),这些头域携带了各种业务信息;除了头域外,消息中还可以携带任意类型的消息体(Body),呼叫中最常使用的SDP信息就是通过消息体在Client和Server之间传递的。Server从接收到请求到处理完毕,要回复多个临时响应(Response),即PRACK
(PRovisional ACK, status-code 为1xx, 例如100Trying,180 Ringing),和一个终结响应(status-code 为2xx,例如200 OK, 202 Accepted ),终结响应有且只有一个。

请求和他的所有响应构成一个事务(Transaction),一个完整的呼叫过程包含多个事务,比如呼叫建立和呼叫释放就是两个相互独立的事务。

用户代理(User Agent)是发起或者接收呼叫的逻辑实体。用户代理客户端-UAC(User Agent Client),用于发起请求;用户代理服务器-UAS(User Agent Server),用于接收请求。UAC/UAS的划分是针对一个事务的。在一个呼叫中的多个事务里,UAC和UAS的角色是可以互换的。例如在A和B的呼叫中,A向B发起呼叫,在呼叫建立的事务中,A是UAC,B是UAS;呼叫结束时,B先挂机,在呼叫释放的事务中,B是UAC,A是UAS。换句话说,每个一般的UA都是UAS和UAC的结合体。UA的实际物理形态有:IP
Phone,SoftPhone,GateWay......

Proxy Server作为一个网络逻辑实体代理客户端转发请求或者响应;同Proxy Server类似的还有一种设备是B2BUA,顾名思义,就是背背的两个UA组成的一个逻辑实体,它作为UAS终结一个事务,同时作为UAC发起另外一个事务。Proxy Server同B2BUA相比,Proxy Server是一个事务传递过程中的中间节点,而B2BUA将一个事务转变成另一个事务。

在SIP组网中还包括Location Server、Registrar、Redirect Server,分别负责维护地址映射表,注册管理,呼叫重定向。他们和Proxy Server 可以在同一台设备上也可以运行于不同的设备上。SIP Server是Proxy Server、Location Server、Registrar、Redirect Server的总称。

SIP Server采用B2BUA模型。接受请求端为UAS端,代理转发或主动发起请求端为UAC端,整个SIPServr为UAC/UAS的组合体。通过UAC/UAS之间消息交互完成会话的建立、改变、结束的阶段。SIP Server协助网关交换媒体信息,但不参与会话建立后媒体流传输。

消息头 Message Header

请求 Request格式 :

Request-Line: Method SP Request-URI SP SIP-VERSION CRLF

例如 INVITE sip:400@172.16.15.131 SIP/2.0
常见的Request-Method 参考Allow头域,比如:
Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE

响应 Response格式:

Status-Line: SIP-VERSION SP STATUS-CODE SPReasong-Phrase CRLF

例如 SIP/2.0 100 Trying

常见Status-Code 见博客

头域格式(header-field):
field-name: field-value

在消息头中,允许在冒号的左右有任意个数的空白;但是,在实现中,建议避免域名和冒号中间有空格,并且建议在冒号和值之间使用单个空格(SP);

头域中的不同域名的相关顺序并没有什么意义。虽然如此,我们还是强烈建议与路由相关的域(VIA,ROUTE,Record-Route,Proxy-Require,Max-Forwards,Proxy-Authorization等等)放在消息头的最前边,这样可以提高处理的速度。

相同域名的头域之间的顺序非常重要, 例如Route, Via,
Record-Route。只有当单个头域的域值是可以用逗号分割的列表的时候,才可以表达成为同一个域名的多个头域。

Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE

Route: <sip:400@172.16.15.131:5070;lr;r2=on>

Route: <sip:400@172.16.15.131:5070;lr;r2=on>

Via: SIP/2.0/UDP 172.16.15.131:5070;rport;branch=z9hG4bK1a1.cc13dabde8fa5090d5c35a292e17c740.0

Via: SIP/2.0/UDP 192.168.1.131:8090;branch=z9hG4bK-4edef-1341712f-16b7c44f

Record-Route: <sip:400@172.16.15.131:5070;lr;r2=on>

Record-Route: <sip:400@172.16.15.131:5070;lr;r2=on>

消息体 Message Body

消息体长度
Content-Length头域中存放了包体的字节长度,例如:

Content-Length: 380

消息体内容

为SDP(session description protocol)包,

type=value[CRLF]

其中缩写:

v <-- sdp Version

o <-- Owner/creator

s <-- Session name

c <-- Connection information

t <-- Time description

m <-- Media description

a <-- media Attribute

例如:

v=0

o=103 1230784262 1230784262 IN IP4 172.16.15.52

s=_

c=IN IP4 172.16.15.52

t=0 0

m=audio 10002 RTP/AVP 0 8 97 98 99 100 101

a=rtpmap:0 PCMU/8000

a=rtpmap:8 PCMA/8000

a=rtpmap:97 G726-40/8000

a=rtpmap:98 G726-32/8000

a=rtpmap:99 G726-24/8000

a=rtpmap:100 G726-16/8000

a=rtpmap:101 telephone-event/8000

a=fmtp:101 0-15,16

a=silenceSupp:off

a=ptime:30

a=sendrecv
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: