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

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin