SIP信令详解

发布时间 : 星期三 文章SIP信令详解更新完毕开始阅读

效”参数(任选),给定登记的失效时间。如果没有设定该参数,则用“失效”字段值作为其缺省值。如果两者均无,则认为SIP URI的失效时间为1小时。

REGISTER请求的成功响应消息中的Contact字段返回该用户当前可达的所有位置。

重定向响应消息,如用户临时迁移、永久迁移、地址模糊等消息中的Contact字段给出供重试的其它可选地址,可用于对BYE、INVITE和OPTIONS请求的响应消息。 Contact字段的一般格式为:

Contact:地址;q参数;动作参数;失效参数;扩展属性

其中,地址的表示形式和To,From字段相同。q参数,其取值范围为[0,1],指示给定位置的相对优先级。数值越大,优先级越高。动作参数仅用于REGISTER请求。它表明希望服务器对其后至该客户的请求进行代理服务还是重定向服务。如果未含此参数,则执行动作取决于服务器的配置。失效参数指明URI的有效时间,可用秒表示,也可用SIP日期表示。扩展属性就是扩展名。

Contact字段的示例为:

Contact: ;q=0.7;expires=3600 l Max-Forwards

该字段用于定义一个请求到达其目的地址所允许经过的中转站的最大值。请求每经过一个中转站,该值减1。如果该值为0时该请求还没有到达其目的地址,服务器将回送“483”(Too Many Hops)响应并终止这个请求。

设置该字段的目的主要是为了出现环路时不会一直消耗代理服务器的资源。该字段的初始值为70。

Max-Forwards字段的一般格式为: Max-Forwards:十进制整数 l Allow

该字段给出代理服务器支持的所有请求消息类型列表。 Allow字段的示例:

Allow: INVITE, ACK, OPTIONS, CANCEL, BYE l Content-Length

该字段表示消息体的大小,为十进制值。应用程序使用该字段表示要发送的消息体的大小,而不考虑实体的媒体类型。如果使用基于流的协议(如TCP协议)作为传输协议,则必须使用此消息头字段。

消息体的长度不包括用于分离消息头部和消息体的空白行。 Content-Length值必须大于等于0。如果消息中没有消息体,则Content-Length头字段值必须设为0。 SDP用于构成请求消息和2xx响应消息的消息体。 Content-Length字段的一般格式为: Content-Length:十进制值 Content-Length字段的示例: Content-Length: 349

表示消息体的长度为349个字节。 l Content-Type

Content-Type字段表示发送的消息体的媒体类型。如果消息体不为空,则必须存在Content-Type 头字段。如果消息体为空且Content-Type头字段存在,则表示此类型的消息体长度为0 (如一个空的声音文件)。 Content-Type字段的示例: Content-Type: application/sdp

l Supported

SIP协议中定义的100类临时响应消息的传输是不可靠的,即UAS发送临时响应后并不能保证UAC端能够接受到该消息。

如果需要在该响应消息中携带媒体信息,那么就必须保证该消息能够可靠的传输到对端。100rel扩展为100类响应消息的可靠传输提供了相应的机制。100rel新增加对临时响应消息的确认请求方法:PRACK。 如果UAC支持该扩展,则在发送的消息中增加Supported:100rel头域和字段。如果UAS支持该扩展,则在发送100类响应时增加Require:100rel头域和字段。UAC收到该响应消息后需要向UAS发送PRACK请求通知UAS已收到该临时响应。UAS向UAC发送对PRACK的2XX响应消息结束对该临时响应的确认过程。

如果某一UA想要在发送的临时响应消息中携带SDP消息体,那么UAC和UAS都必须支持和使用100rel扩展以保证该消息的可靠传输。 举例:

Supported: 100rel l User-Agent

User-Agent头字段包含有发起请求的用户终端的信息。

显示用户代理的软件版本信息可能会令用户在使用有安全漏洞的软件易受到外界攻击,因此,应该使User-Agent头字段成为可选配置项。 举例:

User-Agent: Softphone Beta1.5 l Expires

Expires头字段指定了消息(或消息内容)多长时间之后超时。 举例: Expires: 5

l Accept-Language

Accept-Language头字段用在请求消息中,表示原因短语、会话描述或应答消息中携带的状态应答内容的首选语言类型。如果消息中没有Accept-Language头字段,则服务器端认为客户端支持所有语言。 举例:

Accept-Language: en l Authorization

Authorization字段包含某个终端的鉴权证书。

首先介绍一下终端向服务器端请求认证的一般过程:

终端发起请求时如果服务器端需要对用户进行认证,那么会在本地产生本次认证的NONCE,并且通过认证请求头域将所有必要的参数返回给终端从而发起对用户认证过程。

终端收到认证请求消息后根据服务器端返回的信息和用户配置等信息采用特定的算法生成加密的RESPONSE,并且通过新的请求消息发送给服务器端。

服务器端在收到带有认证响应的新的请求消息后首先检查NONCE的正确性。如果NONCE不是本地产生,则直接返回失败。否则如果NONCE是本地产生,但是认证过程已经超时,则服务器端会重新产生NONCE并重新发起对用户的认证过程。其中老的NONCE会通过CNONCE参数返回。

NONCE验证通过后服务器端会根据NONCE、用户名、密码(服务器端可以根据本地用户信息获取用户的密码)、URI等采用和终端相同的算法生成RESPONSE,并且对此RESPONSE和请求消息中的RESPONSE进行比较,如果二者一致则用户认证成功,否则认证失败。

Authorization字段的一般格式为: Authorization:认证方式 USERNAME,REALM,NONCE,RESPONSE,URI,CNONCE,ALGORITHM 认证方式:有DIGEST、BASIC、CHAP-PASSWORD、CARDDIGEST等认证方式。DIGEST为HTTP-DIGEST认证方式。目前SoftX3000只支持HTTP-DIGEST方式。以后为了实现Uniphone的卡号呼叫还会加入卡号认证的CARDDIGEST方式。 USERNAME:被认证的用户的用户名。 REALM:用于标识发起认证过程的域。

NONCE:由发起认证过程的实体产生的加密因子。

RESPONSE:终端在收到服务器的认证请求后根据服务器端产生的NONCE、用户名、密码、URI等信息经过一定的算法生成的一个字符串。该字符串中包含了经过加密后的用户密码。(在认证过程中处理用户密码之外其他信息都会通过SIP消息以明文的方式在终端和服务器端进行传递。)

URI:发起的呼叫请求消息的Request-URI。由于终端在收到认证请求后需要重新向服务器端发起请求(其中带有认证响应信息)。该请求消息在经过网络服务器时某些字段包括Request-URI都有可能被修改。认证头域的URI参数用于传递终端发起请求时原始消息的Request-URI用于对认证信息进行认证,这样才能保证认证过程的正确性。

CNONCE:如果在服务器端超时后终端才向服务器返回了带有认证响应的新的请求消息,则服务器端需要重新产生NONCE重新对用户进行认证。其中NONCE中带有新的NONCE,老的NONCE会通过CNONCE参数返回给终端。 ALGORITHM:用于传递生成RESPONSE的算法。 举例:

Authorization:DIGEST USERNAME=\REALM=\3112b21ad3b6\

(3) 请求消息示例

下面是SIP请求消息编码的示例:

INVITE sip:66500002@191.169.1.110SIP/2.0

From: ;tag=1ccb6df3 To: CSeq: 1 INVITE

Call-ID:20973e49f7c52937fc6be224f9e52543@sx3000

Via: SIP/2.0/UDP191.169.1.116:5061;branch=z9hG4bkbc427dad6 Contact: Supported: 100rel,100rel Max-Forwards:70

Allow:INVITE,ACK,CANCEL,OPTIONS,BYE,REGISTER,PRACK,INFO,UPDATE,SUBSCRIBE, NOTIFY,MESSAGE,REFER Content-Length:230

Content-Type: application/sdp v: 0

o: HuaweiSoftX3000 1073741831 1073741831 INIP4 191.169.1.116 s: SipCall

c: IN IP4 191.169.1.95

t: 0 0

m: audio 30000 RTP/AVP 8 0 4 18 a: rtpmap:8 PCMA/8000 a: rtpmap 0 PCMU/8000 a: rtpmap 4 G723/8000 a: rtpmap 18 G729/8000

第一行:请求起始行。INVITE请求消息。请求URI,即被邀用户的当前地址为“sip:66500002@191.169.1.110”。SIP版本号为2.0。

第二行:From字段。指明请求发起方的地址为“”。标记为“1ccb6df3”,用于共享同一SIP地址的不同用户用相同的Call-ID发起呼叫邀请时,对用户进行区分。

第三行:To字段。指明请求接收方的地址为“”。 从From和To字段,我们可以看出:

IP地址为191.169.1.116的SoftX3000控制下的终端44510000拨打IP地址为191.169.1.110的SoftX3000控制下的66500002终端。终端类型可以为SIP、H.323、IAD/AG下挂的ESL等。 第四行:Cseq字段。用于将INVITE请求和其触发的响应、对应的ACK、CANCEL请求相关联。 第五行:Call-ID字段。该字段唯一标识一个特定的邀请,全局唯一。Call-ID为“20973e49f7c52937fc6be224f9e52543@sx3000”,sx3000为发起呼叫的SoftX3000的域名,20973e49f7c52937fc6be224f9e52543为本地标识。

第六行:Via字段。该字段用于指示该请求历经的路径。“SIP/2.0/UDP”表示发送的协议,协议名为“SIP”,协议版本为2.0,传输层为UDP;“191.169.1.116:5061”表示发送方SoftX3000IP地址为191.169.1.116,端口号为5061;“branch=z9hG4bkbc427dad6”为分支参数,SoftX3000并行分发请求时标记各个分支。

第七行:Contact字段。指示其后的请求(如BYE请求)可以直接发往,而不必借助Via字段。

第八行:100rel扩展,该字段为100类响应消息的可靠传输提供了相应的机制。

第九行:Max-Forwards字段。表示该请求到达其目的地址所允许经过的中转站的最大值为70。

第十行:Allow字段。给出IP地址为191.169.1.116的SoftX3000支持的请求消息类型列表。 第十一~十二行:Content-Length字段,表示消息长度为230个字节。

第十三行:Content-Type字段,表示消息中携带的消息体是单消息体且为SDP。 第十四行:空行,表示下面为SDP会话描述。 第十五行:SDP协议版本号,目前为0版本。

第十六行:会话拥有者/创建者和会话标识,用于给出会话的发起者(其用户名和用户主机地址)以及会话标识和会话版本号。“HuaweiSoftX3000”为用户名,用户名是用户在发起主机上的登录名,如果主机不支持用户标识的概念,该字段标记为“-”。第一个“1073741831”为会话标识,会话标识为一数字串,使得多元组(用户名、会话标识、网络类型、地址类型、地址)构成会话的全球唯一的标识符。第二个“1073741831”为版本号,指该会话公告的版本。供代理服务器检测同一会话的若干个公告哪一个是最新的公告。其基本要求是会话数据修改后,其版本号应递增。“IN”指网络类型,为文本串形式,目前规定的“IN”为Internet。“IP4”指地址类型,为文本串形式,目前已定义的有“IP4”和“IP6”两种。“191.169.1.116”为创建会话的主机的IP地址。对于IP4地址类型,可以是域名全称或点分十进制IP4地址表示形式。对于IP6地址类型,可以是域名全称或压缩文本IP6地址表示形式。 第十七行:会话名。每个会话描述必需有一个且只有一个会话名。

联系合同范文客服:xxxxx#qq.com(#替换为@)