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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 17:42:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 17:42:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 17:42:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 17:42:02       69 阅读

热门阅读

  1. Redis① —— Redis基础

    2024-07-15 17:42:02       21 阅读
  2. LeetCode 445.两数相加||

    2024-07-15 17:42:02       16 阅读
  3. openstack

    2024-07-15 17:42:02       19 阅读
  4. Memcached与Redis:缓存解决方案的较量与选择

    2024-07-15 17:42:02       21 阅读
  5. pandas读取超过16位的excle

    2024-07-15 17:42:02       16 阅读
  6. blinker库

    2024-07-15 17:42:02       19 阅读
  7. 如何使用断点续传方式上传大文件到阿里云 OSS

    2024-07-15 17:42:02       14 阅读
  8. Web打点技术的攻击手段和渗透测试工具

    2024-07-15 17:42:02       20 阅读
  9. 游戏开发面试题2

    2024-07-15 17:42:02       18 阅读
  10. linux系统调用

    2024-07-15 17:42:02       21 阅读