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

相关文章

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Spring Boot 3 整合 Spring Cloud Gateway实践过程

《SpringBoot3整合SpringCloudGateway实践过程》本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限... 目录引子为什么需要微服务网关实践1.统一路由2.限流防刷3.登录鉴权小结引子当前微服务架构已成为中大型系统的标

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.