1.2.4 信令协议
从各个接口的协议来看,主要包括三种协议:SIP、Diameter、RTP。SIP和Diameter是控制面的协议,RTP是用户面的协议。
1.2.4.1 SIP
1.协议栈结构
SIP协议在IMS网络协议栈中的位置如图1-7所示。
图1-7 SIP在协议栈中的位置
SIP与其他协议的合作如下。
· 与RSVP(Resource ReServation Protocol,资源预留协议)合作用于预约网络资源。
· 与RTP(Real-time Transmit Protocol,实时传输)合作用于传输实时数据并提供服务质量(QoS)反馈。
· 与RTSP(Real-Time Streaming Protocol,实时媒体流传输)合作用于控制实时媒体流的传输。
· 与SDP(Session Description Protocol,会话描述)合作用于描述多媒体会话。
但是SIP的功能和实施并不依赖这些协议。
2.消息结构
(1)SIP消息总体结构。
SIP消息采用文本方式编码并使用UTF-8字符集。SIP消息分为两类:请求消息和响应消息。
如图1-8所示,SIP消息由三部分组成,即起始行(Start Line),消息头(Header)和消息体(Body)。
图1-8 SIP消息结构
① 请求消息的起始行是请求行,响应消息的起始行是状态行。
② 任何SIP消息都必须带有消息头字段,消息体字段可以根据SIP消息的类型和业务需要决定是否携带。
③ 消息头与消息体之间以一个空格行分隔,以空格行标志头字段结束。
④ 消息体采用SDP或者txt文本来描述本次会话的具体实现方式。
(2)SIP请求消息结构。
SIP请求消息的结构如图1-9所示。SIP请求消息由请求行、消息头和消息体组成。消息头和消息体之间通过空格行(CRLF)区分;消息头通过换行符区分消息头中的每一条参数。
图1-9 SIP请求消息结构
请求行由Method(全大写)、Request-URI和SIP Version组成。
① Method:表示请求消息的类型,基本请求中的Method主要分为6种:Invite、ACK、Bye、Cancel、Register、Options。各个消息的含义见表1-1。
表1-1 各个请求消息的含义
② Request-URI:表示请求的目的方。
③ SIP Version:表示SIP的版本号,目前的SIP版本为2.0。
SIP请求消息举例如下。
C->S: Invite sip:Watson@Boston.bell-tel.com SIP/2.0 Via: SIP/2.0/UDP kton.bell-tel.com From: A.Bell <sip:a.g.bell@bell-tel.com> To: T.Watson <sip:Watson@bell-tel.com> Call-ID: 662606876@kton.bell-tel.com CSeq: 1 Invite Contact: <sip:a.g.bell@kton.bell-tel.com> Subject: Mr.Watson, come here. Content-Type: application/sdp Content-Length: ... v=0 o=bell 53655765 2353687637 IN IP4 128.3.4.5 s=Mr.Watson, come here. c=IN IP4 kton.bell-tel.com m=audio 3456 RTP/AVP 0 3 4 5
(3)SIP响应消息结构。
SIP响应消息通过起始行与SIP请求消息进行区分。在SIP响应消息中,起始行称为状态行。
SIP响应消息的结构如图1-10所示。SIP响应消息由状态行、消息头、空格行和消息体组成。通过换行符区分消息头中的每一行参数。对于不同的响应消息,参数不固定。
图1-10 SIP响应消息结构
状态行由SIP Version、Status-Code、Reason-Phrase组成。
① SIP Version:与请求行中的协议版本相同。
② Status-Code:表示响应消息的类型代码,由三位整数组成,即1XX、2XX、3XX、4XX、5XX、6XX(见表1-2),代表不同的响应类型。
表1-2 响应消息示例
续表
③ Reason-Phrase:用于表示状态码的含义,对Status-Code的文本描述。
例如,183响应消息中携带的Reason-Phrase为“Session Progress”,表示当前呼叫进行中。
SIP响应消息举例如下。
S->C: SIP/2.0 200 OK Via: SIP/2.0/UDP kton.bell-tel.com From: A.Bell <sip:a.g.bell@bell-tel.com> To: <sip:Watson@bell-tel.com> ;tag=37462311 Call-ID: 662606876@kton.bell-tel.com CSeq: 1 Invite Contact: sip:Watson@Boston.bell-tel.com Content-Type: application/sdp Content-Length: ... v=0 o=Watson 4858949 4858949 IN IP4 192.1.2.3 s=I’m on my way c=IN IP4 Boston.bell-tel.com m=audio 5004 RTP/AVP 0 3
(4)SIP请求和响应消息共有的消息头字段。
消息头字段包含与请求有关的信息,例如请求的发起者、请求的接收者。消息头字段也可以只是消息正文的特性,例如指示VXML格式的消息体。
每个消息头字段以CRLF结束。一个SIP消息的整个消息头部分也以CRLF结束。
消息头字段的格式为:
Header-name: header-value。
主要的消息头字段包含以下内容。
① From:所有请求和响应消息必须包含此字段,以指示请求的发起者。服务器将此字段从请求消息复制到响应消息。
该字段的一般格式为:
From:显示名〈SIP URL〉;tag=xxx。
From字段的示例有:
From:“A.G.Bell”<sip:agb@bell-telephone.com>。
② To:该字段指明请求的接收者,其格式与From相同,仅第一个关键词代之以To。所有请求和响应都必须包含此字段。
③ Call ID:该字段用以唯一标识一个特定的邀请或标识某一客户的所有登记。用户可能会收到数个参加同一会议或呼叫的邀请,其Call ID各不相同,用户可以利用会话描述中的标识,例如SDP中的Origin(源)字段的会话标识和版本号判定这些邀请的重复性。
该字段的一般格式为:
Call ID:本地标识@主机,其中,主机应为全局定义域名或全局可选路由IP地址。
Call ID的示例可为:
Call ID:19771105@foo.bar.com。
④ Cseq:命令序号。客户在每个请求中应加入此字段,它由请求方法和一个十进制序号组成。序号初值可为任意值,其后具有相同的Call ID值,但不同请求方法、头部或消息体的请求,其Cseq序号应加1。重发请求的序号保持不变。ACK和CANCEL请求的Cseq值与对应的Invite请求相同,BYE请求的Cseq值应大于Invite请求,由代理服务器并行分发的请求,其Cseq值相同。服务器将请求中的Cseq值复制到响应消息中。
Cseq的示例为:
Cseq:4711 Invite。
⑤ Via:该字段用以指示请求经历的路径。它可以防止请求消息传送产生环路,并确保响应和请求的消息选择同样的路径。
该字段的一般格式为:
Via:发送协议 发送方;参数。
其中,发送协议的格式为:协议名/协议版本/传送层,发送方为发送方主机和端口号。
Via字段的示例可为:
Via:SIP/2.0/UDP first.example.com:4000。
⑥ Contact:该字段用于Invite、ACK和Register请求以及成功响应、呼叫进展响应和重定向响应消息,其作用是给出和用户直接通信的地址。
Contact字段的一般格式为:
Contact:地址;参数。
其中,Contact字段中给定的地址不限于SIP URL,也可以是电话、传真等URL或mail to:URL。
其示例可为:
Contact:“Mr.Watson” <sip:waston@worcester.bell-telephone.com>。
有些消息头是每个SIP请求和响应都必须有的,例如:
· To消息头;
· From消息头;
· Call-ID消息头;
· Cseq消息头;
· Via消息头;
· Max-Forwards消息头;
· Contact消息头。
(5)SIP请求和响应消息共有的消息体字段。
消息体又称消息正文,是SIP消息的有效负荷。消息体可以携带任何基于文本的信息,而请求的Method和响应的Status-Code决定了消息正文该如何解释。
当描述一个会话时,常见的消息体是SDP消息。当描述一个多媒体会议时,常见的消息体是VXML和MSML。
1.2.4.2 Diameter协议
1.协议栈结构
Diameter协议包括两个部分:Diameter基础协议和Diameter应用协议,如图1-11所示。
图1-11 Diameter协议栈
① Diameter基础协议被用于传递Diameter数据单元、协商能力集和处理错误,并提供扩展能力。
② Diameter应用协议定义了特定应用的功能和数据单元,如NAS(Network Access Service)协议、EAP(Extensible Authentication Protocol)、MIP(Mobile IP)、CMS(Cryptographic Message Syntax)协议等。
Diameter协议本身是一个对等协议,即在传输层没有客户端和服务器端的概念。建立链路时,两个Diameter节点既作为客户端又作为服务器端,如果建立了两条链路,则通过选举机制关闭一条。
Diameter基本协议可以使用TCP(Transfer Control Protocol)或SCTP(Stream Control Transfer Protocol)作为传输协议。Diameter两端之间存在面向连接的关系,SCTP能够将几个独立的流归类于单个SCTP连接,使得传输性能优于每个流都打开的独立的TCP连接。因此SCTP是更好的选择,现网中一般也是使用SCTP协议。
TLS(Transport Level Security)提供传输层连接的安全,IPSec(IP Security)提供逐跳(Hop-to-Hop)连接的安全。Diameter客户端可以支持IPSec或TLS,Diameter服务器必须同时支持TLS和IPSec。为确保安全性,Diameter协议不能在没有任何安全机制(TLS或IPSec)的情况下使用。
2.消息结构
Diameter消息由消息头和消息体组成,各个字段以网络字节顺序传送。Diameter消息结构如图1-12所示。消息体中AVP结构如图1-13所示。
图1-12 Diameter消息结构
图1-13 AVP结构
3.消息实例
Diameter消息实例如图1-14所示。
图1-14 Diameter消息实例截图
Diameter消息头各字段含义如表1-3所示。消息体各字段含义如表1-4所示。
表1-3 Diameter消息头各字段含义
表1-4 Diameter消息体各字段含义
1.2.4.3 Rtp/Rtcp协议
1.协议栈结构
RTP和RTCP在IMS网络中都是媒体面的协议,协议栈结构如图1-15所示。
图1-15 RTP/RTCP协议栈结构
2.消息结构
RTP/RTCP在IP网络中的消息栈结构如图1-16所示。
图1-16 RTP/RTCP消息栈结构
3.消息示例
(1)RTP消息如图1-17所示。
图1-17 RTP消息示例
(2)RTCP消息如图1-18所示。
图1-18 RTCP消息示例
由于RTP/RTCP协议是我们日常工作中比较难掌握的协议,本书将在后续VoLTE语音质量问题篇章做详细的阐述,本章作为协议了解而简单描述。