IMS/SIP学习(3)——注册过程
文章目录
Components
- 用户代理(User Agent)
用户代理有以下两种类型。但是这些并不是严格分开的物理实体。一个UA(用户代理)可以根据情况用作UAC或UAS。
UAC(用户代理客户端):UAC是生成请求并将请求发送到服务器的一方
UAS(用户代理服务器):UAC是获取请求,处理这些请求并生成响应的一方
- 客户
通常指的是终端用户,即在人们使用的系统上运行的应用程序。它可能是在PC上运行的软件电话应用程序,也可能是IP电话中的消息传递设备。当您尝试通过网络呼叫另一个人时,它将生成一个请求,并将该请求发送到服务器(通常是代理服务器)。
- 服务器
服务器是按照预定义规则处理来自客户端的请求的实体。有几种不同类型的服务器,如下所述。
- 代理服务器(Proxy Server):
这些是SIP环境中最常见的服务器类型。生成请求时,事先不知道收件人的确切地址。因此,客户端将请求发送到代理服务器。代理代表客户端将请求转发到另一个代理服务器或收件人本身
- 重定向服务器(Redirect Server):
重定向服务器将请求重定向回客户端,指示客户端需要尝试其他路由才能到达收件人。通常在收件人暂时或永久地从其原始位置移开时发生。
- 注册器(Registra):
这是为客户端执行注册过程的服务器。在此注册过程中,Registra将用户的位置信息存储到位置服务器中。
- 位置服务器:
注册到注册服务商的地址存储在位置服务器中。
Basic Procedures
在此页面中,您将看到在大多数SIP / IMS应用程序中可能经常看到的SIP消息序列.
REGISTER with Authentication
与几乎每个大规模工作的通信系统一样,IMS的第一步也是注册过程。 通过此过程,UA(用户代理或IMS客户端)在中心控制中心(CSCF或IMS服务器)中注册。 任何通信中的注册都非常类似于我们访问安全性很高的公司(通常是大公司)时所经历的过程。 在注册过程中,基本上会进行如下对话。
i)嘿,CSCF …我想在您的服务数据库中注册自己
ii)可以,我可以验证信息吗? (这就像“请提供您的用户名和密码”一样?)
iii)当然可以了。
iv)谢谢…让我检查我们的安全系统…确定。 您被系统接受。
如果您查看协议序列的详细信息和消息的内容,则应该能够以通用语言找到上述所有信息(参数)。 实际上,从这些消息和内容的详细信息中,您可以了解有关UA和注册中心(CSCF,身份验证中心)的大多数信息,并且可以进行大量的反向工程以进行故障排除。
注意1:在现实生活中,作为从事此领域工程师的工作,一旦看到第一条“
REGISTER”消息,您将获得很多信息,并将这些信息用于各种故障排除情况。 但是,在许多情况下,您根本看不到第一条REGISTER消息。
这是最棘手的情况……意味着“我肯定有一些关键问题。但是我不知道会有什么问题。而且我什至不知道从哪里开始进行故障排除”。
在这种情况下,建议您首先参考此检查清单(check list后文会讲)。
注意2:正如我提到的那样,您会在注册过程的消息中看到很多详细信息,并且您可能会问“这些信息来自何处?”。
UA(UE)如何知道必须在REGISTER消息中放入哪种信息?
在IMS堆栈实现的早期(通常是在开发阶段),它已存储或硬编码在文件或协议堆栈源代码中。
但是现在(在商业化阶段)它通常来自USIM或ISIM(大部分来自ISIM)。
如果您有兴趣,请参阅以下页面以获取详细信息(在本章节最后讲解)。
序列图
以下是IMS注册的总体协议序列,我还在序列图下方列出了每个消息的一些示例。 (此图中的Registra可以视为CSCF)
Step 1 : REGISTER
REGISTER sip:test.3gpp.com SIP/2.0
f: <sip:aaa@qq.com>;tag=2722997041
t: <sip:aaa@qq.com>
CSeq: 575513373 REGISTER
i: aaa@qq.com::21f:29ff:fe7c:8f51
v: SIP/2.0/UDP [2001::21f:29ff:fe7c:8f51]:5060;branch=z9hG4bK656994275
Max-Forwards: 70
m: <sip:aaa@qq.com[2001::21f:29ff:fe7c:8f51]:5060>
P-Access-Network-Info: 3GPP-E-UTRAN-FDD; utran-cell-id-3gpp=3114800102FFFFFFF
l: 0
Authorization:
Digest uri="sip:test.3gpp.com",
username="aaa@qq.com",
response="",
realm="test.3gpp.com",
nonce=""
Expires: 7200
注意1:确保“ realm”参数与身份验证服务器域名匹配。 如果这与验证服务器不匹配,CSCF可能会发送“错误代码”。
另一个例子 :
基本上,取决于网络(CSCF)是否执行身份验证。 但是有时,UE可能会尝试使用IPSec来强制执行身份验证,如以下示例所示。 但是CSCF仍然可以忽略此要求,并且不使用身份验证和IPSec。在这种情况下(跳过身份验证/ IPSec的情况下),UE可能不会发起任何呼叫(例如,VoLTE)。
- REGISTER sip:test.3gpp.com SIP/2.0
f: <sip:aaa@qq.com>;tag=2922225
t: <sip:aaa@qq.com>
CSeq: 2922203 REGISTER
i: aaa@qq.com:0:0:1::3
v: SIP/2.0/TCP [2001:0:0:1::3]:5060;branch=z9hG4bK3941737881
Max-Forwards: 70
m: <sip:aaa@qq.com[2001:0:0:1::3]:5060>;+sip.instance="<urn:gsma:imei:35425006-000655-0>";+g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.mmtel";+g.3gpp.smsip
Route: <sip:[2001:0:0:1::2]:5060;lr>
l: 0
Authorization:
Digest uri="sip:test.3gpp.com",
username="aaa@qq.com",
response="",
realm="test.3gpp.com",
nonce=""
Expires: 600000
Require: sec-agree
Proxy-Require: sec-agree
k: path,sec-agree
Allow: INVITE,BYE,CANCEL,ACK,NOTIFY,UPDATE,REFER,PRACK,INFO,MESSAGE,OPTIONS
Security-Client:
ipsec-3gpp; alg=hmac-md5-96; ealg=des-ede3-cbc; spi-c=799251570; spi-s=1387593208;
port-c=8006; port-s=8906,
ipsec-3gpp; alg=hmac-md5-96; ealg=aes-cbc; spi-c=799251570; spi-s=1387593208;
port-c=8006; port-s=8906,
ipsec-3gpp; alg=hmac-md5-96; ealg=null; spi-c=799251570; spi-s=1387593208;
port-c=8006; port-s=8906,
ipsec-3gpp; alg=hmac-sha-1-96; ealg=des-ede3-cbc; spi-c=799251570; spi-s=1387593208;
port-c=8006; port-s=8906,
ipsec-3gpp; alg=hmac-sha-1-96; ealg=aes-cbc; spi-c=799251570; spi-s=1387593208;
port-c=8006; port-s=8906,
ipsec-3gpp; alg=hmac-sha-1-96; ealg=null; spi-c=799251570; spi-s=1387593208;
port-c=8006; port-s=8906
Step 2 : 401 UNAUTHORIZED
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP [2001::21f:29ff:fe7c:8f51]:5060;branch=z9hG4bK656994275
From: <sip:aaa@qq.com>;tag=2722997041
To: <sip:aaa@qq.com>;tag=T3E04A4B5
Call-ID: aaa@qq.com::21f:29ff:fe7c:8f51
CSeq: 575513373 REGISTER
Content-Length: 0
WWW-Authenticate:
Digest realm="test.3gpp.com",
nonce="qlWqVapVqlWqVapVqlWqVUUQA5HEt9VVZ3t1TM221cg=",
qop="auth",
opaque="MTcyMjU3ODA2NDo=SU1TLVNJUCBTZXJ2ZXI=",
algorithm=AKAv1-MD5
P-Associated-URI: <sip:aaa@qq.com>
P-Associated-URI: <tel:+11234567890>
注意1:此消息中的“realm”参数应与步骤1中的“realm”参数匹配。否则,UE可能不会继续进行下一步。
注意2:此处指定的“algorithm”应为UE支持的算法。 否则,UE可能不会继续进行下一步。
注意3:“ nonce”带有一种由“ RAND + AUTN +服务器特定数据”组成的身份验证
注4:“ nonce”在rfc3310中的定义如下。 随机数是一个参数,该参数填充有AKA身份验证质询RAND,AKA AUTN令牌以及可选的某些服务器特定数据的串联连接的Base64编码,如RFC 3310图1中的下图所示。
Base64编码基于RFC 2045 6.8中定义的下表。 Base64内容传输编码
Step 3 : REGISTER
REGISTER sip:test.3gpp.com SIP/2.0
f: <sip:aaa@qq.com>;tag=2722997284
t: <sip:aaa@qq.com>
CSeq: 575513374 REGISTER
i: aaa@qq.com::21f:29ff:fe7c:8f51
v: SIP/2.0/UDP [2001::21f:29ff:fe7c:8f51]:5060;branch=z9hG4bK843051065
Max-Forwards: 70
m: <sip:aaa@qq.com[2001::21f:29ff:fe7c:8f51]:5060>
P-Access-Network-Info: 3GPP-E-UTRAN-FDD; utran-cell-id-3gpp=3114800102FFFFFFF
l: 0
Authorization:
Digest username="aaa@qq.com",
realm="test.3gpp.com",
uri="sip:test.3gpp.com",
qop=auth,
nonce="qlWqVapVqlWqVapVqlWqVUUQA5HEt9VVZ3t1TM221cg=",
nc=00000001,
cnonce="11259375",
algorithm=AKAv1-MD5,
response="a3f549b13f477562f4445b7277cd83c1",
opaque="MTcyMjU3ODA2NDo=SU1TLVNJUCBTZXJ2ZXI="
Expires: 7200
注意1:此消息中的“ realm”参数应与步骤2中的“ realm”参数匹配。 注意2:此消息中的“
algorithm”参数应与步骤2中的“ algorithm”参数匹配。 注意3:“到期时间:7200”表示应在7200秒内“更新”注册
Step 4 : 200 OK
SIP/2.0 200 OK
Via: SIP/2.0/UDP [2001::21f:29ff:fe7c:8f51]:5060;branch=z9hG4bK843051065
From: <sip:aaa@qq.com>;tag=2722997284
To: <sip:aaa@qq.com>;tag=T44F6AE74
Call-ID: aaa@qq.com::21f:29ff:fe7c:8f51
CSeq: 575513374 REGISTER
Contact: <sip:aaa@qq.com[2001::21f:29ff:fe7c:8f51]:5060>;q=0.500;expires = 7200
Content-Length: 0
Date: Mon, 22 Apr 2013 15:43:15 GMT
Authentication-Info:
qop=auth,
rspauth="a3f549b13f477562f4445b7277cd83c1",
cnonce="11259375",
nc=00000001
P-Associated-URI: <sip:aaa@qq.com>
P-Associated-URI: <tel:+11234567890>
P-Associated-URI: <sip:aaa@qq.com>
P-Associated-URI: <tel:+11234567890>
下期预告
下次继续翻译subscribe、notify、invite流程
推荐阅读
-
php学习历程1——注册、登录(面向过程、面向对象)
-
Android使用OKhttp3实现登录注册功能+springboot搭建后端的详细过程
-
GB28181学习笔记3 实现REGISTER设备注册(基于nodejs sip库)
-
Ns3学习手记7——ns-3在ubuntu16.04下的安装以及eclipse结合开发过程记录
-
MySQL学习笔记3索引、存储过程_MySQL
-
MySql官方手册学习笔记3―MySql中的存储过程简介_MySQL
-
php学习历程1——注册、登录(面向过程、面向对象)
-
学习PHP过程记录(3)- 常用标签2
-
MySql官方手册学习笔记3—MySql中的存储过程简介_MySQL
-
IMS/SIP学习(4)——subscribe、notify、invite过程