IMS/SIP学习(3)——注册过程

2023-10-18 13:30
文章标签 sip 学习 过程 注册 ims

本文主要是介绍IMS/SIP学习(3)——注册过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • Components
      • Basic Procedures
        • REGISTER with Authentication
          • 序列图
          • Step 1 : REGISTER
          • Step 2 : 401 UNAUTHORIZED
          • Step 3 : REGISTER
          • Step 4 : 200 OK
      • 下期预告

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:+11234567890@test.3gpp.com>;tag=2722997041(这玩意就是IMPU)
t: <sip:+11234567890@test.3gpp.com>
CSeq: 575513373 REGISTER
i: 2722997021_2363003016@2001::21f:29ff:fe7c:8f51
v: SIP/2.0/UDP [2001::21f:29ff:fe7c:8f51]:5060;branch=z9hG4bK656994275
Max-Forwards: 70
m: <sip:+11234567890@[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="001010123456789@test.3gpp.com",(这玩意就是======>IMPI)
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:001010123456789@ims.mnc246.mcc081.3gppnetwork.org>;tag=2922225
t: <sip:001010123456789@ims.mnc246.mcc081.3gppnetwork.org>
CSeq: 2922203 REGISTER
i: 2922206_181933240@2001:0:0:1::3
v: SIP/2.0/TCP [2001:0:0:1::3]:5060;branch=z9hG4bK3941737881
Max-Forwards: 70
m: <sip:001010123456789@[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="001010123456789@test.3gpp.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:+11234567890@test.3gpp.com>;tag=2722997041
To: <sip:+11234567890@test.3gpp.com>;tag=T3E04A4B5
Call-ID: 2722997021_2363003016@2001::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:+11234567890@TEST.3GPP.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:+11234567890@test.3gpp.com>;tag=2722997284
t: <sip:+11234567890@test.3gpp.com>
CSeq: 575513374 REGISTER
i: 2722997021_2363003016@2001::21f:29ff:fe7c:8f51
v: SIP/2.0/UDP [2001::21f:29ff:fe7c:8f51]:5060;branch=z9hG4bK843051065
Max-Forwards: 70
m: <sip:+11234567890@[2001::21f:29ff:fe7c:8f51]:5060>
P-Access-Network-Info: 3GPP-E-UTRAN-FDD; utran-cell-id-3gpp=3114800102FFFFFFF
l: 0
Authorization:
Digest username="001010123456789@test.3gpp.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:+11234567890@test.3gpp.com>;tag=2722997284
To: <sip:+11234567890@test.3gpp.com>;tag=T44F6AE74
Call-ID: 2722997021_2363003016@2001::21f:29ff:fe7c:8f51
CSeq: 575513374 REGISTER
Contact: <sip:+11234567890@[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:+11234567890@TEST.3GPP.COM>
P-Associated-URI: <tel:+11234567890>
接收到200 OK响应,UE将:
1.存储P-Associated-URI 头中URIs列表,该列表URIs是与注册的公有用户标识关联的;
2.存储P-Associated-URI头中第一个URI作为默认公有用户标识;
3.如果在P-Associated-URI头中没有包括的公有用户标识,认为是被禁止的;

下期预告

下次继续翻译subscribe、notify、invite流程

这篇关于IMS/SIP学习(3)——注册过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/232881

相关文章

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

springboot整合gateway的详细过程

《springboot整合gateway的详细过程》本文介绍了如何配置和使用SpringCloudGateway构建一个API网关,通过实例代码介绍了springboot整合gateway的过程,需要... 目录1. 添加依赖2. 配置网关路由3. 启用Eureka客户端(可选)4. 创建主应用类5. 自定

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

SpringBoot整合InfluxDB的详细过程

《SpringBoot整合InfluxDB的详细过程》InfluxDB是一个开源的时间序列数据库,由Go语言编写,适用于存储和查询按时间顺序产生的数据,它具有高效的数据存储和查询机制,支持高并发写入和... 目录一、简单介绍InfluxDB是什么?1、主要特点2、应用场景二、使用步骤1、集成原生的Influ

SpringBoot实现websocket服务端及客户端的详细过程

《SpringBoot实现websocket服务端及客户端的详细过程》文章介绍了WebSocket通信过程、服务端和客户端的实现,以及可能遇到的问题及解决方案,感兴趣的朋友一起看看吧... 目录一、WebSocket通信过程二、服务端实现1.pom文件添加依赖2.启用Springboot对WebSocket

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert