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

相关文章

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

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

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识