当前位置: 首页 > news >正文

IMS架构中的注册与会话流程:RTPEngine集成及消息路由详解

目录

S-CSCF 调用 RTPengine

整体路由

注意

IMS 注册流程 和 IMS 会话流程 的区别

IMS注册流程

IMS会话流程(如INVITE请求)

这种设计的原因

P-CSCF 调用 RTPengine


S-CSCF 调用 RTPengine

整体路由

UA a生成SDP offer,发送SIP INVITE请求(包含SDP offer),发送到P-CSCF,然后转发给S-CSCF(因为已经经过了IMS注册流程之后,就会直接P-CSCF到S-CSCF,不会经过I-CSCF询问了),然后到I-CSCF,然后I-CSCF通过HSS查询被叫的S-CSCF,然后转发SIP给他,然后调用RTPengine的offer函数,RTPengine解析SDP offer(然后分配媒体端口;修改SDP中的IP地址和端口信息,以确保媒体流经过RTPEngine;可能调整编解码器列表;创建内部会话状态)然后返回修改的SDP给被叫的S-CSCF,然后将SIP INVITE转发给被叫P-CSCF,P-CSCF转发给UA b,UA b基于收到的offer和自身能力生成SDP answer,然后发送SIP 200OK(包含SDP answer)给被叫P-CSCF,然后P-CSCF将消息转发给被叫S-CSCF,在转发之前再次调用RTPengine的answer函数,解析SDP answer(验证与之前offer的兼容性;可能进行必要的SDP调整;更新内部会话状态;准备RTP/RTCP处理器)返回可能修改过的SDP answer给S-CSCF,然后将包含可能修改后SDP的200 OK转发给呼叫方侧的S-CSCF(根据via头域),然后主叫S-CSCF将200 OK转发给P-CSCF再转给UA a,然后UA a接收200 OK响应之后发送ACK给其P-CSCF,然后到主叫S-CSCF,然后把ACK转发给被叫S-CSCF,再到被叫P-CSCF,再到UA b。此时媒体会话建立RTPengine准备就绪,开始处理RTP/RTCP数据包,UA a和UA b之间的媒体流通过RTPEngine中转。

注意

S-CSCF间的路由是基于SIP消息中的Via头域:每个SIP请求经过的节点都会在Via头域中添加自己的信息,响应消息会按照相反的顺序进行路由。

主叫的S-CSCF在用户注册IMS网络时就已确定:当用户进行IMS注册时,HSS会为其分配一个S-CSCF,并在后续的会话中使用这个S-CSCF。

I-CSCF确实参与了初始INVITE请求的路由,并且它的信息被添加到了Via头域中。

虽然I-CSCF主要用于初始路由,但它仍然会处理返回的响应,因为它的信息在Via头域中。 主叫S-CSCF的信息也在Via头域中,所以200 OK响应会经过它,而不是直接从I-CSCF到P-CSCF。

IMS 注册流程 和 IMS 会话流程 的区别

IMS注册流程

UA -> P-CSCF -> I-CSCF -> HSS -> S-CSCF

在注册过程中,I-CSCF确实先于S-CSCF接收请求,因为此时系统还不知道哪个S-CSCF负责该用户。

I-CSCF查询HSS以确定合适的S-CSCF,然后将注册请求转发给选定的S-CSCF。

IMS会话流程(如INVITE请求)

UA -> P-CSCF -> S-CSCF -> I-CSCF -> (被叫方的)S-CSCF

在已注册用户发起的会话中,请求首先到达用户的S-CSCF,然后才到I-CSCF。

这是因为在注册过程中,用户已经被分配了一个S-CSCF,所有后续的会话请求都会先经过这个已知的S-CSCF。

这种设计的原因

注册时,需要I-CSCF来帮助选择合适的S-CSCF。 会话时,用户已有指定的S-CSCF,可以直接处理请求,提高效率。 S-CSCF可以执行一些策略控制和路由决策,然后再将请求发送到I-CSCF以定位被叫方。

P-CSCF 调用 RTPengine

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • sqlalchemy.orm中validates对两个字段进行联合校验
  • 浅析Kafka Streams中KTable.aggregate()方法的使用
  • 【活动预告】Apache IoTDB TsFile 智慧能源应用“上会”啦!
  • 【中级通信考试】-动力与环境专业:第四章 机房空调系统
  • win10系统更新后无法休眠待机或者唤醒,解决方法如下
  • 对为什么react需要时间分片,vue3不需要的浅学习
  • iPhone删除所有照片的高效三部曲
  • vitest 单元测试应用与配置
  • [Spring] Spring Web MVC基础理论
  • Memcached负载均衡:揭秘高效缓存分发策略
  • 基于Flask+Apache+WSGI等模块配置Deep Learning应用功能网站(Ubuntu 22.04服务器)
  • Linux 安装 Docker Compose
  • 百度文心4.0 Turbo开放,领跑国内AI大模型赛道!
  • 【RNN练习】天气预测
  • C# Winform 系统方案目录的管理开发
  • 深入了解以太坊
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【译】理解JavaScript:new 关键字
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • C学习-枚举(九)
  • JavaScript异步流程控制的前世今生
  • JAVA多线程机制解析-volatilesynchronized
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Terraform入门 - 1. 安装Terraform
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 每天10道Java面试题,跟我走,offer有!
  • 扑朔迷离的属性和特性【彻底弄清】
  • 深入浅出Node.js
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 我的zsh配置, 2019最新方案
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • # 职场生活之道:善于团结
  • ## 基础知识
  • #define,static,const,三种常量的区别
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #laravel 通过手动安装依赖PHPExcel#
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (3) cmake编译多个cpp文件
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (done) 两个矩阵 “相似” 是什么意思?
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)Linux——Linux常用指令
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (二)原生js案例之数码时钟计时
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (九)One-Wire总线-DS18B20
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (十七)Flink 容错机制
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (一)Dubbo快速入门、介绍、使用
  • *2 echo、printf、mkdir命令的应用
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'