精华内容
下载资源
问答
  • 2020-07-19 15:04:18

    一切要重头说起,从电话技术发明,到大哥大(1G移动通讯)诞生,发展到2G数字移动通讯(GSM、CDMA),以及现在的3G(WCDMA、TD-SCDMA、CDMA-2000),4G(TD-LTE、FDD-LTE),本质上是追求成本的降低,产品功能的多样化!
    1G很简单,就是为了让固定电话能随身携带,没有额外功能,纯粹的模拟电话信号通过无线电传输;
    2G以及后面的2.5G, 2.75G,是把模拟的电话信号转换成了数字化的编码,简单些理解就是家里无绳电话的模拟无线和2.4G数字无绳的区别,然后附带着,就象在电话线上提供猫拨号上网一样,提供了GPRS、EDGE的上线功能,当然,和猫上网一样,速度慢是典型的特点,这一时期还提供了象短信、彩信等一些有限的增值服务;
    3G的重点放在了上网速度上,语音电话弱化了,但其本质是在2G上发展而来的,大量的科学家的精力花在了如何在旧体系上,有没有办法多压榨些资源来传输上网数据——这有点象把一个书架上的放书的格子和位置好好规范了一下,比随便乱放能放更多书了,但根本问题没解决,有限的通讯资源要保留着随时准备让语音电话使用,所以成本还是居高不下;
    4G其实对普通用户意义不大,真正商用能稳定提供的下行带宽也就10M左右,与联通WCDMA宣传的3G的速度差别不大,虽然4G理论上能提供的速度能达到100M,但理论就只是理论,而已。
    之前有过一篇文章说到过,4G之所以在用户需求层面没有动力时,运营商仍要大力去推,这好象有些不符合商业规律——技术本应该是根据市场用户需求而诞生的,但根源,是因为4G改变了从2G到3G时的运营商网络的建设方式和运营成本,4G不再保留 无线通讯资源来专门跑语音了,而是所有资源全部用来跑数据——就是全部用来上网;

    打电话时,走2G、3G线路上的语音保留资源,这是“独占”的资源,而4G所有的资源,都用来跑数据,电话语音也变成数据,大家可以“共享”网络带宽速率,显而易见,共享的资源的成本,肯定要大大低于独占的资源了,所以4G的数据资费,成本会远远低于3G时的上网成本,当然,这是对于运营商有利的,最终定什么价,还是运营商定;
    虽然我们这里主要是说4G——也就是手机、移动通讯,但固定电话和固定宽带,技术上也是有相似性的,和上面移动通讯要发展1G、2G、3G、4G一样,固定电话和固定宽带也在从电话线——电话线+拨号上网——电话线+ADSL上网——纯光纤上网(送终端设备,从光纤上面接电话出来),几乎是和移动通讯类似的发展轨迹。
    不管是4G的最终发展目标,还是光纤上网整合宽带上网和固定电话,他们都有一个统称,NGN下一代网络,美好的规范图是这样描绘的——在一个网络(NGN)上,同时能提供上网、电话、电视以及各种增值服务,三网融合。
    手机移动通讯要实现这些美好愿景,在可以预见的未来,不太容易实现,特别是第一阶段,能让大家用习惯了的电话,顺顺当当跑在4G网络上,就是一项艰巨的任务,所以,3G会在相当长的时间里,和4G是共存的,并且4G更长一段时间,可能只是用来提供数据服务,因为—VoLTE还不成熟;
    目前市面上的4G手机,都只是用4G来上网,而打电话仍走原来的3G或2G的通道,因为4G要想独立打电话,需要有IMS服务器和IMS软件终端,但无论是IMS服务器的成熟度和软件的终端的成熟度,还不够成熟,所以中国移动要采购的第一批产品中的MIFI和CPE,MIFI称为能提供4G接入的无线路由器的理解没错,而对CPE的名词解释,很多家专业媒体都说错了,CPE是在MIFI基础上,还留有一个模拟电话的接口,接上电话机就能打电话,而电话就是走的IMS服务器,真正的VoLTE,这算是移动用来试水的举措吧,用来测试IMS服务器的,稳定了才在手机上跑VoLTE。
    VoIP
    上面我们提到多个通讯行业的国际标准化组织,他们这么多年做的大量工作,就是为了让4G这个纯IP网络化的移动通讯网络,能让语音在共享的数据网络上(PS,即包交换),能象从前在独占的语音网络上(CS,即电路交换)跑的一样遛,他们想到了VoIP。
    VoIP里面有许多标准,Skype是私有的,H323是通讯行业的标准,SIP是IETF也就是互联网组织定的,为什么通讯行业定未来下一个几十年的标准时,不是从他们自己的H323上面发展,而是选互联网行业标准组织IETF提出的SIP标准呢?大家都笑而不语……
    但互联网的原则是开放,还有一个就是免费,所以SIP在脱离于通讯行业标准约束时,非常自由,对于不同供应商提供的SIP服务之间的结算啊、费用啊之类的没有通讯行业那么细——说白了,就是SIP提供的许多服务都是免费的,要想收费不太好下手,由此,3GPP等等一众通讯行业的标准化组织,在SIP基础上,提出了IMS,到此,我们标题里说的SIP、VoIP、VoLTE、IMS这些名词全部出场了。
    VoIP解释起来简单,就是Voice on IP,语音跑在IP网络上,就是VoIP,这是一个比较上层的统称的名词,那么同样的VoLTE也只是说语音跑在LTE网络上——LTE就是指的4G的两个标准,TD-LTE、FDD-LTE——需要注意的是,TD-LTE和TD-SCDMA没有任何关系,其它的我就不多说了。
    LTE全称是Long Time Evolution,从名字上就知道,4G这个东西提出的很匆忙,许多东西还没定好就被运营商急着要上线。

    IMS
    而IMS这个东西就要复杂的多了,虽然SIP很好理解,大家暗地里可能也用了好多年的VoIP,对SIP也很熟悉了,它本质上就是一个服务器,放账号,大家注册上去就能打电话,很简单吧,但要收费呢,目前VoIP一般也只提供了便宜的网络电话,按时长或者包月收费,没有增值服务——这对于移动通讯运营商来说可是不能忍受的。
    来电显示为什么不能收费?为什么彩铃不能收费?为什么留言不能收费?为什么为什么?
    所以,IMS干的第一件是,就是加入了一个HSS子服务(Home Subscriber Server),这个是什么东西呢?SIP虽然也分为注册服务器Register Server、呼叫代理服务器Proxy Server,但SIP的注册服务器只是记录一下一个SIP账号的当前的IP地址数据、认证一下账号密码是不是正确;但IMS里的HSS就不简单了,他是在SIP的注册服务器基础上,增加了一个很明显的运营商特征——业务订购数据库,也就是在移动开手机卡时,那一堆附加增值服务,好了,你在这里可以看到来电显示业务、呼叫等待业务、彩铃业务……,的开关——也意味着收费的计费点;
    因为VoIP很简单,一般是企业内部用,或者小规模的虚拟运营商在有限的几台服务器上提供服务,所以VoIP的SIP软件、SIP电话机网关就可以直接通过IP地址和账号就能注册上去,然后呼叫在多台服务器上互相路由就可以完成呼叫的目的了,这些服务器,一般就是SIP Proxy Server,涉及到和固定电话、手机号码互通时,会有FXO网关,E1网关等负责转换,这里不多说了。
    而IMS作为运营商的方案,动辄上亿用户规模,而且又分为各省市地分公司,当然,还有一个不得不提的,漫游——IP还区分漫游?VoIP不是宣传不区分本地长途,没有漫游的概念么?是的,但IMS认为这样不行,所以,他要加入漫游的概念……

    SIP
    IMS的核心是SIP,所以类似SIP Proxy Server这么重要的核心组件,IMS是不会少的,IMS里称它为Call Session Control Function,即CSCF,并且又把它分成了多个子系统,其中代理CSCF(P-CSCF)从用户终端角度看,基本就是SIP里的Proxy Server了(但其实不是,下述),负责直接与IMS的终端(类似SIP的软电话、硬件电话等等,但同样的,也扩展了不少东西,这里跳过不述);P-CSCF直接与终端交互,可能会把SIP进行压缩或者加密,然后就交给查询CSCF(I-CSCF),I-CSCF会查询HSS数据,来对用户名和密码进行认证,当然,他也从HSS里查询你是否欠费了,开通或关闭了某些业务,以及你是从哪个P-CSCF来的,用来判断你是不是漫游。
    整个呼叫过程中,P-CSCF是不做复杂工作的,P-CSCF只负责接收SIP消息,它相当于是对外联络点,然后SIP消息会到达I-CSCF,I-CSCF是运营商的核心网络——就是运营商内部网络的入口,他会根据HSS查找到用户是属于哪个地区的,会对应分配一个空闲的为该地区服务的服务CSCF(S-CSCF),一直到了这里,S-CSCF才是真正的VoIP里Proxy Server的角色,S-CSCF完成用户注册认证和呼叫的路由处理,以及电话业务的触发(IMS称为AS,另外独立成一个子系统,下述)。
    所以如果综合来分析,P-CSCF和I-CSCF只是起到一个边界安全防护SBC服务器和负载平衡、服务器分流这一类功能,真正处理SIP注册和呼叫的原先VoIP里标准逻辑的组件,是S-CSCF,从物理上看,P-CSCF可能是全国或省一级中心统一的服务器集群,配合更多的I-CSCF服务器分布在主干核心网上做分流,背靠一个大的HSS服务器群,将不同市县的用户分配到各地的S-CSCF上进行实际的处理,并且S-CSCF会更多地与当地的通讯机房里原有的2G、3G发生交流,也就是媒体网关(MGW),负责把新的走4G的手机终端和旧的3G、2G以及固定电话之类的对接起来,保持兼容(也就是PS、CS域的互通)。
    所以,一个最最精简的IMS系统,它的核心组件是包含HSS、CSCF(P、I、S)即可,即把VoIP SIP的核心Register和Proxy Server进行按运营需求的发展:

    MGW
    MGW,其实就是市面上大量被使用的VoIP的模拟网关,数字中继网关,而已……当然,运营商对稳定性要求需要更高一些,并且需要额外的集中管理和控制能力;
    总结
    zongjie
    如果上了4G也只是为了提供和原来类似的语音通话功能,运营商的面子还是挂不住的,得与时俱进,提供一些IM服务,面向个人用户,所以一般还要加一个Presence Server,推送服务器,离线存储服务器等云的概念,提供的,无非是类似qq或微信的功能了,当然,可能是收费的,再次笑而不语……
    同样的,通讯不只是面向个人的,也要面向企业,所以上面也提到了AS子系统,即Application Server,其实就是现在的通讯行业内的增值方案服务供应商了,一般就是提供例如电话会议、语音留言,企业语音导航IVR,电话呼入自动分配ACD等等;
    因为象4G或者NGN,大家全是跑在IP网络上的,所以就不再需要象原先做电话呼叫中心,CTI系统等等,让电话与电脑信息系统对接需要额外购买一台电话程控交换机、语音板卡等等才能使用的问题了,只要有能接入网络的智能的设备,电脑、手机、平板,都可以直接与IMS的AS子系统对接,这可能才是真正的推4G或ngn的价值吧,让电话也完全融入电脑的IP网络世界里,电话、手机独立在企业的信息化系统外面已经太多年了,如果这一均势发展良好,那些老掉牙的定制的CTI通讯系统,终于可以跟上互联网产品发展的节奏,让我们接触的象银行、快递公司的电话系统,医院的挂号、火车飞车的买票的电话系统,真正的能跟上时代发展的脚步了,IVR语音菜单导航这种逆天反人类的存在,早就该被淘汰了!

    更多相关内容
  • IMS技术已成为业界公认的下一代网络核心技术
  • 电信运营商基于已有通信网络能力打造能力开放平台,吸引第三方开发者开发更多、更丰富多彩的个性化通信服务...对能力开放的系统架构、IMS 网络能力平台的建设方案和能力开放方式进行分析,为能力开放实际部署提供参考。
  • 介绍了IMS演进的需求、方案建议和相关标准化在3GPP R8、R9阶段的进展,并列出3种IMS业务本地路由 疏导方式。
  • 作为下一代网络NGN核心网解决方案,IMS(IP多媒体子系统)可以支持多种终端接入方式,为固定网络和移动网络集成提供基础,所以IMS的带宽和时延就显得尤为重要。而卫星通信系统在地理和带宽方面具有优势,因此有必要...
  • IMS核心网网络安全指标体系分析.pdf
  • 理解IMS 核心网架构

    2021-07-12 10:23:02
    IMS 核心网架构 IMS总体架构通常分为三层,接入层、呼叫控制层、业务应用层: 接入层 :将各种接入网络汇总到IMS核心网,完成对现有网络的互通及完成对承载的控制。 呼叫控制层:IMS的核心层,完成呼叫控制...

    IMS 核心网架构

     

    IMS总体架构通常分为三层,接入层、呼叫控制层、业务应用层:

        接入层       :将各种接入网络汇总到IMS核心网,完成对现有网络的互通及完成对承载的控制。

        呼叫控制层:IMS的核心层,完成呼叫控制、安全管理、业务触发、资源控制、网络互通等核心功能。

        业务应用层:提供各种业务实现,如PSTN仿真业务集、Centrex业务集、呈现业务、即时消息业务等。

    VoLTE呼叫流程

     

    可以看到,pcscf和scscf的功能都像一个网关,最终业务还是icscf来处理,那为啥要这俩网元呢?

    这要从号码归属地和漫游说起。因为号码的开户、鉴权等信息都存放在号码归属地的HSS,手机在使用地完成网络接入,在归属地完成业务处理。就呼叫来说,手机呼叫时的过程是:

    1、手机把呼叫请求发给访问接入地的代理服务器;

    2、接入地代理服务器找到归属地代理服务器并转发呼叫请求;

    3、归属地代理服务器找到呼叫控制服务器并转发呼叫请求;

    4、呼叫控制服务器与HSS交互处理呼叫业务。

    这里的pcscf就是本地代理服务器,scscf就是归属地代理服务器,icscf就是归属地呼叫控制服务器。icscf可以有多个实现,那这时候scscf还有负载均衡的作用。

    手机要上网或呼叫都需要先接入本地网络,因此第一关必须是本地代理服务器。如果你的手机没有漫游,那pcscf和scscf在物理上可以部署在一起。

    网元说明

    P-CSCF:代理呼叫控制功能模块,是IMS核心网络与用户终端的接口网元;与用户终端侧配合完成AKA鉴权、安全机制协商、IPSec加密保护、信令压缩等功能,在与有PDF功能模块的接入终端还可以配合完成资源预留功能;与I-CSCF/S-CSCF侧配合完成呼叫的接续处理。

    I-CSCF:问询呼叫控制功能模块,为归属网络中P-CSCF的呼入选择 合适的S-CSCF,为拜访网络的外部IMS网提供接入。

    S-CSCF:服务呼叫控制功能模块,IMS核心网中呼叫控制核心模块,负责对终端的注册鉴权、会话控制、用户业务信息管理及向AS触发指定业务等功能。

    SIP Terminals:包括SIP软终端、SIP硬终端、SIP IAD接入设备、SIP AG接入设备等,当前我们设备就属于这一类。

    GGSN:GGSN是GPRS网络中的关键部分,用于GPRS网络和IP网络的交互。

    PDF:PDF是策略决策功能模块,基于策略控制完成鉴权、业务请求许可、Qos、资源预留等功能。

    BGCF:BGCF是出口网关控制功能,BGCF有基于电话号码的路由功能,用来选择与PSTN网络的接口点,当BGCF发现被叫网络位于一个PSTN网络时,负责IMS网络到CS/PSTN网络呼叫选择合适的MGCF。

    MGCF:媒体网关控制功能,负责IMS网络与CS网络之间进行通信

    IM-MGW:IMS多媒体网关提供CS与IMS之间的用户平面链路转换,类似H248终端设备就是属于这一类。

    HSS:归属用户服务模块,IMS网络中核心用户数据库,保存归属网络中IMS用户的签约信息,包括基本标识、路由信息、业务签约信息等。

    SLF:签约数据定位功能模块,当运营商网络中存在多个HSS时,为I-CSCF/S-CSCF选择合适的HSS。

    MRFC:媒体资源功能控制器,解析来自S-CSCF、AS的资源控制命令,并控制MRFP提供媒体资源,如三方会议混音、通告音等。

    MRFP:媒体资源功能处理器,在MRFC控制下,为终端提供媒体资源。

    SIP AS:SIP应用服务器,提供各种业务处理,如仿真PSTN业务、Centrex业务等。

    展开全文
  • 核心网技术-IMS技术.pdf
  • 核心网技术—IMS技术.docx
  • IMS核心网网络安全指标体系研究.pdf
  • MTK IMS框架简析(2)——IMS注册过程

    千次阅读 2018-05-12 10:13:59
    之前在《MTK IMS框架简析(1)——代码架构及模块初始化》中已经分析了ims代码的构成和重点类的初始化,接下来以启用VOLTE子功能为例,具体分析AP侧IMS服务的注册过程。 概要 IMS注册前提是系统启用了volte或wifi ...

     

    之前在《MTK IMS框架简析(1)——代码架构及模块初始化》 中已经分析了ims代码的构成和重点类的初始化,接下来以启用VOLTE子功能为例,具体分析AP侧IMS服务的注册过程。


    概要

    IMS注册前提是系统启用了volte或wifi calling等功能,Volte开关一般在网络设置界面会提供(如下图),用户切换开关状态将触发ims的注册或注销。 
    这里写图片描述

    启用Volte后的消息传递序列(这里时序图避免复杂化,只表现消息的正向传递,忽略消息的返回)

    frameworkframeworkims appims apprild imsrild imsvolte_imsmvolte_imsmrildrildTurn on IMS feature打开IMS子功能RIL_REQUEST_SET_VOLTE_ENABLERIL_REQUEST_SET_IMS_VOICE_ENABLERIL_REQUEST_SET_IMS_ENABLERIL_UNSOL_IMS_ENABLE_STARTIMS_SERVICE_UPMSG_ID_IMS_ENABLE_INDMSG_ID_WRAP_IMSM_IMSPA_PDN_ACT_REQRequest Network建立IMS承载SETUP_DATA_CALL(ims apn)MSG_ID_WRAP_IMSPA_IMSM_PDN_ACT_ACK_RESP成功建立承载RIL_UNSOL_IMS_REGISTRATION_INFO上报IMS注册状态

    整个过程大致分为3步: 
    1. 设置并启用ims 
    2. 建立ims承载 
    3. 注册ims服务 
    接下来结合代码详细分析。


    IMS注册过程

    从界面启用ims

    此过程会向rild-ims下发3个消息,通知rild需要打开哪些ims业务,然后开启ims服务:

    //启用volte语音服务
    RIL_REQUEST_SET_VOLTE_ENABLE
    RIL_REQUEST_SET_IMS_VOICE_ENABLE
    //启动ims功能
    RIL_REQUEST_SET_IMS_ENABLE
    •  

    这里就从用户打开界面开关开始分析。 
    ImsManager::setAdvanced4GMode方法为volte功能的开关,设置界面即通过此接口实现volte开关。 
    1. 向ImsConfig设置了feature(ImsConfig::setFeatureValue) 
    2. 打开ims (turnOnIms)。

    //ImsManager.java
    private void setAdvanced4GMode(boolean turnOn) throws ImsException {
            checkAndThrowExceptionIfServiceUnavailable();
            try {
                ImsConfig config = getConfigInterface();
                if (config != null) {
                    //设置启用volte语音
                    config.setFeatureValue(ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE,
                            TelephonyManager.NETWORK_TYPE_LTE, turnOn ? 1 : 0, null);
                }
            } catch (ImsException e) {
            }
            //启用ims服务
            if (turnOn) {
                turnOnIms();
            } else if (isImsTurnOffAllowed()) {
                turnOffIms();
            }
        }
    •  

    ImsConfig::setFeatureValue 作用是告诉ril目前要启用ims的哪些功能. 
    当前讨论的例子是打开volte,因此参数为”FEATURE_TYPE_VOICE_OVER_LTE”。 
    其他业务的定义在ImsConfig.java中:

    //ImsConfig.java
    public static class FeatureConstants {
            public static final int FEATURE_TYPE_UNKNOWN = -1;
    
            /**
             * FEATURE_TYPE_VOLTE supports features defined in 3GPP and
             * GSMA IR.92 over LTE.
             */
            public static final int FEATURE_TYPE_VOICE_OVER_LTE = 0;
    
            /**
             * FEATURE_TYPE_LVC supports features defined in 3GPP and
             * GSMA IR.94 over LTE.
             */
            public static final int FEATURE_TYPE_VIDEO_OVER_LTE = 1;
    
            /**
             * FEATURE_TYPE_VOICE_OVER_WIFI supports features defined in 3GPP and
             * GSMA IR.92 over WiFi.
             */
            public static final int FEATURE_TYPE_VOICE_OVER_WIFI = 2;
    
            /**
             * FEATURE_TYPE_VIDEO_OVER_WIFI supports features defined in 3GPP and
             * GSMA IR.94 over WiFi.
             */
            public static final int FEATURE_TYPE_VIDEO_OVER_WIFI = 3;
        }

    ImsConfig实际上是ims app/ImsConfigImpl的代理,setFeatureValue方法具体逻辑在ImsConfigImpl中。 
    这里传入的feature为FEATURE_TYPE_VOICE_OVER_LTE,因此会向rild-ims下发2个消息:RIL_REQUEST_SET_VOLTE_ENABLE及RIL_REQUEST_SET_IMS_VOICE_ENABLE。

    //ImsConfigImpl.java
    public void setFeatureValue(int feature, int network, int value, ImsConfigListener listener) {
            try {
                try {
                    //将设置值保存到数据库
                    mStorage.setFeatureValue(feature, network, value);
                    //不同的feature需要不同的设置,这里只分析volte的处理
                    switch(feature) {
                        case ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_LTE:
                        case ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_WIFI:
                            ...
                            break;
                        case ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_WIFI:
                            ...
                            break;
                        case ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE:
                            int oldVoLTEValue = SystemProperties.getInt(PROPERTY_VOLTE_ENALBE, 0);                        
                            int wfcEnable = SystemProperties.getInt(PROPERTY_WFC_ENALBE, 0);
                            if (value != oldVoLTEValue) {
                                //打开
                                if (value == ImsConfig.FeatureValueConstants.ON) {
                                    //设置property
                                    SystemProperties.set(PROPERTY_VOLTE_ENALBE,"1");               
                                    //向rild-ims下发RIL_REQUEST_SET_VOLTE_ENABLE
                                    mRilAdapter.turnOnVolte(null);
                                    if (wfcEnable == 0){
                                        //向rild-ims下发RIL_REQUEST_SET_IMS_VOICE_ENABLE
                                        mRilAdapter.turnOnImsVoice(null);
                                    }
                                } else {//关闭
                                    SystemProperties.set(PROPERTY_VOLTE_ENALBE,"0");
                                    mRilAdapter.turnOffVolte(null);
                                    if (wfcEnable == 0){
                                        mRilAdapter.turnOffImsVoice(null);
                                    }
                                }
                            }
                            break;
                        default:
                            break;
                    }
                    ...
                } catch (ImsException e) {
                    ...
                }
            } catch (RemoteException e) {
                throw new RuntimeException(e);
            }
        }
    •  

    ImsConfig处理完成,继续执行ImsManager::turnOnIms,这同样是aidl调用,实际操作由ImsService.turnOnIms执行。

    //ImsManager.java
    private void turnOnIms() throws ImsException {
            checkAndThrowExceptionIfServiceUnavailable();
    
            try {
                mImsService.turnOnIms(mPhoneId);
            } catch (RemoteException e) {
                throw new ImsException("turnOnIms() ", e, ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);
            }
        }
    •  

    turnOnIms同样是向rild-ims下发消息:RIL_REQUEST_SET_IMS_ENABLE。

    //ImsService.java
    @Override
        public void turnOnIms(int phoneId) {
            if (mActivePhoneId != phoneId) {
                mActivePhoneId = phoneId;
            }
    
            if (mImsState != PhoneConstants.IMS_STATE_ENABLE) {
                mImsRILAdapter.turnOnIms(mHandler.obtainMessage(EVENT_SET_IMS_ENABLED_DONE));
                mImsState = PhoneConstants.IMS_STATE_ENABLING;
            } else {
            }
        }
    •  

    下发了这3条消息后,等待ImsRilAdapter上报RIL_UNSOL_IMS_ENABLE_START来确认IMS服务已经启用。 
    这里写图片描述

    ImsService在构造方法中注册了RIL_UNSOL_IMS_ENABLE_START消息的监听,消息上报后便会由它处理。

    //ImsService.java
    mImsRILAdapter.registerForImsEnableStart(mHandler, EVENT_IMS_ENABLING_URC, null);
    • ImsService中对RIL_UNSOL_IMS_ENABLE_START的处理如下: 

    1. 发送ACTION_IMS_SERVICE_UP广播; 
    2. 调用enableImsAdapter()

    //ImsService.java
    case EVENT_IMS_ENABLING_URC:
        //+EIMS: 1
        if (mActivePhoneId != phoneId) {
            mActivePhoneId = phoneId;
        }
        // notify AP Ims Service is up
        intent = new Intent(ImsManager.ACTION_IMS_SERVICE_UP);
        intent.putExtra(ImsManager.EXTRA_PHONE_ID, mActivePhoneId);
        mContext.sendBroadcast(intent);
        // enable ImsAdapter
        enableImsAdapter();
        mImsState = PhoneConstants.IMS_STATE_ENABLE;
        break;
    •  

    《MTK IMS框架简析(1)——代码架构及模块初始化》 中提到过,ACTION_IMS_SERVICE_UP会触发ImsPhone和相关telephony类的初始化,因此这里跳过。 
    而ImsAdatper的流程涉及到建立ims承载,在第二节中继续分析。

    以流程图小结这部分: 
    这里写图片描述


    建立IMS PDN连接

    在ims注册之前,需要建立专用的数据连接。连接的建立由volte_imsm.so来触发,与普通数据连接一样,通过ConnectivityManager请求网络,并由telephony发起SETUP_DATA_CALL。

    先了解下volte_imsm.so的作用。根据readme文件的描述,volte_imsm.so库用于建立承载,P-CSCF,鉴权等过程,MTK并没有开源:

    #README
    IMS relay module, handling NAS bearer, P-CSCF address discovery, IMS AKA and relay message among IMCB/IMSA/MAL modules
    
    WHAT IT DOES?
    =============
    handle the request from IMCB/IMSA/MAL module
    Send the event to IMCB/IMSA/MAL module, and receive the Response
    •  

    ims app负责与volte_imsm.so对接,一张图来表示相关的工作过程。 
    这里写图片描述

    VaSocketIO运作在线程中,负责维护socket和输入输出,循环从socket中读取消息交由ImsEventDispatcher。 
    ImsEventDispatcher根据消息的类型分发给对应的VaEventDispatcher处理。 
    实现了VaEventDispatcher的类共有4个,分别负责:通话,数据,补充业务还有Timer(具体作用尚需研究)。 
    ImsAdapter负责控制功能的总开关。

    大概清楚这块流程后,下面接着第一节的思路,继续分析ImsAdapter:enableImsAdapter()方法。

    ImsAdapter.java
    public void enableImsAdapter() {
            synchronized (ImsEnabledThreadLock) {
                if (!misImsAdapterEnabled) {
                    if (mIO.connectSocket() == true) {
                        //调用所有VaEventDispatcher的enableRequest方法
                        mImsEventDispatcher.enableRequest();
                        misImsAdapterEnabled = true;
                        synchronized (mIO.VaSocketIOThreadLock) {
                            mIO.VaSocketIOThreadLock.notify();
                        }
                        //启用ims栈(向volte_imsm下发一条消息)
                        enableImsStack();
                    } else {
                        sendMessageDelayed(
                                obtainMessage(MSG_IMSA_RETRY_IMS_ENABLE),
                                IMSA_RETRY_SOCKET_TIME);
                    }
                }
            }
        }
    •  

    DataDispatcher负责建立承载相关处理,直接看DataDispatcher.enableRequest()方法的处理: 
    注册DATA_CONNECTION_STATE_CHANGED和SIM_STATE_CHANGED的监听。监听这2个消息是为了维护ims的连接,响应Data和SIM卡的变动。

    DataDispatcher.java
    public void enableRequest() {
            synchronized (mHandler) {
                Arrays.fill(mSimStatus, false);
                IntentFilter filter = new IntentFilter();
                filter.addAction(TelephonyManager.ACTION_PRECISE_DATA_CONNECTION_STATE_CHANGED);
                filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
                mContext.registerReceiver(mBroadcastReceiver, filter);
                mIsEnable = true;
            }
        }
    •  

    返回到ImsAdapter继续看enableImsStack()方法。从方法的命名上看,作用是启用ims栈, 
    向volte_imsm发送MSG_ID_IMS_ENABLE_IND消息:

    private void enableImsStack() {
            // Send IMS Enable to IMSM
            VaEvent event = new VaEvent(Util.getDefaultVoltePhoneId(), MSG_ID_IMS_ENABLE_IND);
            mIO.writeEvent(event);
    
            return;
        }
    •  

    消息的定义如下:

    int MSG_ID_IMS_ENABLE_IND = 900003; // MSG_ID_WRAP_IMSPA_IMSM_ENABLE_IND
    int MSG_ID_IMS_DISABLE_IND = 900004; // MSG_ID_WRAP_IMSPA_IMSM_DISABLE_IND,
    • 1
    • 2

    从Log看,MSG_ID_WRAP_IMSPA_IMSM_ENABLE_IND消息的作用应该是初始化volte_imsm相关模块,VoLTE Stack/UA/REG等模块被初始化: 
    这里写图片描述

    volte_imsm随后会上报MSG_ID_WRAP_IMSM_IMSPA_PDN_ACT_REQ,通知上层发起IMS PDN连接,消息由DataDispatcher处理。 
    这里写图片描述

    消息分发到DataDispatcher::handleDefaultBearerActivationRequest方法: 
    将请求数据封装成TransactionParam,设置超时处理,最后调用requestNwRequest方法。这里能看到请求的apn类型是IMS。

    DataDispatcher.java
    private void handleDefaultBearerActivationRequest(VaEvent event) {
            //apn type为IMS
            String apnType = PhoneConstants.APN_TYPE_IMS;
            int phoneId = event.getPhoneId();
            //请求数据封装成TransactionParam
            DataDispatcherUtil.PdnActivationInd actInd = mDataDispatcherUtil
                    .extractDefaultPdnActInd(event);
            TransactionParam param = new TransactionParam(actInd.transactionId,
                    event.getRequestID(), phoneId, apnType);
            ...
            putTransaction(param);
            if (apnType == PhoneConstants.APN_TYPE_IMS) {
                int subId = SubscriptionManager.getSubIdUsingPhoneId(phoneId);
                if (mSimStatus[phoneId] || subId > 0) {
                    mSimStatus[phoneId] = true;
                    //判断是否有合法的ims apn
                    if (!isImsApnExists(phoneId)) {
                        rejectDefaultBearerDataConnActivation(param, FAILCAUSE_UNKNOWN, 500);
                        return;
                    }
                    //设置超时,如果超过10秒没有进入开始连接的状态即触发
                    mHandler.removeMessages(MSG_ON_NOTIFY_ACTIVE_DATA_TIMEOUT);
                    mHandler.sendMessageDelayed(mHandler.obtainMessage(
                            MSG_ON_NOTIFY_ACTIVE_DATA_TIMEOUT, param),
                            MAX_NETWORK_ACTIVE_TIMEOUT_MS);
                } else {
                    return;
                }
            }
            //发起IMS连接请求
            if (requestNwRequest(apnType, phoneId) < 0) {
                rejectDefaultBearerDataConnActivation(param, FAILCAUSE_UNKNOWN, 0);
            }
        }
    •  

    requestNwRequest方法实例化NetworkRequest并填充数据后,通过ConnectivityManager.requestNetwork发起连接请求。

    private int requestNwRequest(String requestApnType, int phoneId) {
            ...
                NetworkCallback nwCb = mDataNetworkRequests[pos].nwCb;
                Builder builder = new NetworkRequest.Builder();
                //IMS & EIMS
                builder.addCapability(APN_CAP_LIST[pos]);
                builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
                //指定为当前subId
                builder.setNetworkSpecifier(String.valueOf(subId));
                mDataNetworkRequests[pos].nwRequest = builder.build();
                NetworkRequest nwRequest = mDataNetworkRequests[pos].nwRequest;
                releaseNwRequest(requestApnType);
                synchronized (mAPNStatuses) {
                        ApnStatus apnStatus = mAPNStatuses.get(requestApnType);
                        apnStatus.mName = requestApnType;//IMS
                        apnStatus.mStatus = TelephonyManager.DATA_DISCONNECTED;
                        apnStatus.isSendReq = true;
                        apnStatus.ifaceName = "";
                        //发起request
                        getConnectivityManager().requestNetwork(nwRequest, nwCb,
                                ConnectivityManager.MAX_NETWORK_REQUEST_TIMEOUT_MS);
                }
            ...
    
            return nRet;
        }
    private static final int[] APN_CAP_LIST = new int[] {
                NetworkCapabilities.NET_CAPABILITY_IMS,
                NetworkCapabilities.NET_CAPABILITY_EIMS
        };
    •  

    接下来SETUP_DATA_CALL的工作由ConnectivityService和telephony数据模块完成。返回成功后,检查手机的网络接口发现新建了一个Interface——ccmni4

    root@x6:/ # ifconfig                                                        
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0 
              inet6 addr: ::1/128 Scope: Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:46 errors:0 dropped:0 overruns:0 frame:0 
              TX packets:46 errors:0 dropped:0 overruns:0 carrier:0 
              collisions:0 txqueuelen:0 
              RX bytes:3992 TX bytes:3992 
    
    ccmni4    Link encap:Ethernet  HWaddr 12:7A:92:06:07:BE
              inet6 addr: 2409:8809:8590:da21:279:6506:7e0d:afdc/64 Scope: Global
              inet6 addr: fe80::279:6506:7e0d:afdc/64 Scope: Link
              UP RUNNING NOARP  MTU:1410  Metric:1
              RX packets:26 errors:0 dropped:0 overruns:0 frame:0 
              TX packets:29 errors:0 dropped:0 overruns:0 carrier:0 
              collisions:0 txqueuelen:1000 
              RX bytes:17494 TX bytes:18434 
    
    •  

    ccmni4是mtk在底层指定的ims默认承载接口的名称,连接建立后DataDispatcher还需要检查这个Interface的名字是否正确,最后发送ACT消息通知volte_imsm连接已经建立

    //DataDispatcher.java
    private static final String IMS_INTERFACE_NAME = "ccmni4";
    
    private void handleDefaultBearerActivationResponse(Network network, String type) {
    
            TransactionParam deacTrans = findTransaction
                    (VaConstants.MSG_ID_WRAP_IMSM_IMSPA_PDN_DEACT_REQ, type);
            synchronized (mAPNStatuses) {
                ApnStatus apnStatus = mAPNStatuses.get(type);
                if (deacTrans == null) {
                    apnStatus.mStatus = TelephonyManager.DATA_CONNECTED;
                    ConnectivityManager cm = (ConnectivityManager) mContext
                            .getSystemService(Context.CONNECTIVITY_SERVICE);
                    LinkProperties mLink = cm.getLinkProperties(network);
                    ...
                    apnStatus.ifaceName = mLink.getInterfaceName();
                    //检查iface名字是否为"ccmni4"
                    if (IMS_INTERFACE_NAME.equals(apnStatus.ifaceName)
                            || EMERGENCY_INTERFACE_NAME.equals(apnStatus.ifaceName)) {
                        //发送MSG_ID_WRAP_IMSM_IMSPA_PDN_ACT_REQ通知volte_imsm
                        responseDefaultBearerDataConnActivated(
                              findTransaction(VaConstants.MSG_ID_WRAP_IMSM_IMSPA_PDN_ACT_REQ, type),
                                network.netId, apnStatus.ifaceName);
                    } 
                    ...
                } 
                ...
            }
        }
    •  

    这里写图片描述

    这部分的代码量较多,理解了设计意图后其实结构和流程都比较简单,同样以流程图总结: 
    这里写图片描述


    注册IMS服务

    完成注册

    IMS注册基于SIP,这部分由ims核心模块处理,需要分析协议和模块设计,这里先不作深入探讨。 
    转载自网络

    注册成功后,返回200 OK。 
    这里写图片描述

    rild_ims将注册状态及capability通过RIL_UNSOL_IMS_REGISTRATION_INFO消息上报: 
    这里写图片描述 
    ImsService在构造方法中注册过对RIL_UNSOL_IMS_REGISTRATION_INFO的监听,因此处理方法就在ImsService的handler中能找到。

     mImsRILAdapter.registerForImsRegistrationInfo(mHandler, EVENT_IMS_REGISTRATION_INFO, null);
    • 1

    ImsService 处理: 
    从EVENT_IMS_REGISTRATION_INFO中读取到ims注册状态和Capability,并通知监听者。

    //ImsService.java
    //IMS所支持的capability
    private static final int IMS_VOICE_OVER_LTE = 1;
    private static final int IMS_RCS_OVER_LTE = 2;
    private static final int IMS_SMS_OVER_LTE = 4;
    private static final int IMS_VIDEO_OVER_LTE = 8;
    private static final int IMS_VOICE_OVER_WIFI = 16;
    
    public void handleMessage(Message msg) {
                AsyncResult ar;
                Intent intent;
                int phoneId = getMainCapabilityPhoneId();
                switch (msg.what) {
                    case EVENT_IMS_REGISTRATION_INFO:
                        ar = (AsyncResult) msg.obj;
                        //根据协议的规定,CIREGU返回消息的第一字段表示注册状态,第二个表示capability
                         /**
                         * According to 3GPP TS 27.007 +CIREGU format
                         *
                         * AsyncResult.result is an Object[]
                         * ((Object[])AsyncResult.result)[0] is integer type to indicate the IMS regiration status.
                         *                                    0: not registered
                         *                                    1: registered
                         * ((Object[])AsyncResult.result)[1] is numeric value in hexadecimal format to indicate the IMS capability.
                         *                                    1: RTP-based transfer of voice according to MMTEL (see 3GPP TS 24.173 [87])
                         *                                    2: RTP-based transfer of text according to MMTEL (see 3GPP TS 24.173 [87])
                         *                                    4: SMS using IMS functionality (see 3GPP TS 24.341[101])
                         *                                    8: RTP-based transfer of video according to MMTEL (see 3GPP TS 24.183 [87])
                         *
                         */
    
                        //对比socketId是否当前的active phoneId
                        int socketId = ((int[]) ar.result)[2];
                        if (socketId != mActivePhoneId) {
                            break;
                        }
    
                        int newImsRegInfo = ServiceState.STATE_POWER_OFF;
                        //读取Ims的注册状态
                        if (((int[]) ar.result)[0] == 1) {
                            newImsRegInfo = ServiceState.STATE_IN_SERVICE;
                        } else {
                            newImsRegInfo = ServiceState.STATE_OUT_OF_SERVICE;
                        }
                        //读取当前支持的capability
                        int newImsExtInfo = ((int[]) ar.result)[1];
                        mImsRegInfo = newImsRegInfo;
    
                        //通知ims注册状态更新
                        notifyRegistrationStateChange(mImsRegInfo);
    
                        if ((mImsRegInfo == ServiceState.STATE_IN_SERVICE)) {
                            mImsExtInfo = newImsExtInfo;
                        } else {
                            mImsExtInfo = 0;
                        }
                        //通知ims capability更新
                        notifyRegistrationCapabilityChange(mImsExtInfo);
                        break;
                        ...
                }
                ...
    }  
    •  

    从LOG来看,此次CIREGU指令返回的结果是“1,5”,按照定义,1表示已注册,5代表同时支持IMS_VOICE_OVER_LTE和IMS_SMS_OVER_LTE,即语音和短信业务。

    AT< +CIREGU: 1,5
    • 1

    注册状态的同步

    ImsManager获得注册状态和capability后,回调ImsPhoneCallTracker中实例化的ImsConnectionStateListener,数据最终将传递到ImsPhone。 
    ImsPhone中有ServiceState实例来标记data和ims voice服务状态,并有布尔值mImsRegistered来标记ims注册情况。

    //ImsManager.java
        private class ImsRegistrationListenerProxy extends IImsRegistrationListener.Stub {
            private int mServiceClass;
            private ImsConnectionStateListener mListener;
    
            public ImsRegistrationListenerProxy(int serviceClass,
                    ImsConnectionStateListener listener) {
                mServiceClass = serviceClass;
                mListener = listener;
            }
    
            ...
    
            @Override
            public void registrationConnected() {
                if (mListener != null) {
                    mListener.onImsConnected();
                }
            }
    
            @Override
            public void registrationProgressing() {
                if (mListener != null) {
                    mListener.onImsProgressing();
                }
            }
    
            @Override
            public void registrationDisconnected(ImsReasonInfo imsReasonInfo) {
                if (mListener != null) {
                    mListener.onImsDisconnected(imsReasonInfo);
                }
            }
    
            @Override
            public void registrationResumed() {
                if (mListener != null) {
                    mListener.onImsResumed();
                }
            }
    
            @Override
            public void registrationSuspended() {
                if (mListener != null) {
                    mListener.onImsSuspended();
                }
            }
    
            @Override
            public void registrationFeatureCapabilityChanged(int serviceClass,
                    int[] enabledFeatures, int[] disabledFeatures) {
                if (mListener != null) {
                    mListener.onFeatureCapabilityChanged(serviceClass,
                            enabledFeatures, disabledFeatures);
                }
            }
    
        }
    •  

    ImsPhoneCallTracker如何处理注册信息和capability的上报: 
    1. 注册状态同步到ImsPhone; 
    2. Capability同步到mImsFeatureEnabled数组中,标记可用的ims业务; 
    3. 最后发出ACTION_IMS_STATE_CHANGED广播。

    ImsPhoneCallTracker.java
        /**
         * Listen to the IMS service state change
         *
         */
        private ImsConnectionStateListener mImsConnectionStateListener =
            new ImsConnectionStateListener() {
            @Override
            public void onImsConnected() {
                mPhone.setServiceState(ServiceState.STATE_IN_SERVICE);
                mPhone.setImsRegistered(true);
            }
    
            @Override
            public void onImsDisconnected(ImsReasonInfo imsReasonInfo) {
                mPhone.setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
                mPhone.setImsRegistered(false);
                mPhone.processDisconnectReason(imsReasonInfo);
                if (imsReasonInfo != null && imsReasonInfo.getExtraMessage() != null
                        && !imsReasonInfo.getExtraMessage().equals("")) {
                    mImsRegistrationErrorCode = Integer.parseInt(imsReasonInfo.getExtraMessage());
                }
            }
    
            @Override
            public void onImsProgressing() {
            }
    
            @Override
            public void onImsResumed() {
                mPhone.setServiceState(ServiceState.STATE_IN_SERVICE);
            }
    
            @Override
            public void onImsSuspended() {
                mPhone.setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
            }
    
            @Override
            public void onFeatureCapabilityChanged(int serviceClass,
                    int[] enabledFeatures, int[] disabledFeatures) {
                if (serviceClass == ImsServiceClass.MMTEL) {
                    boolean tmpIsVideoCallEnabled = isVideoCallEnabled();
                    // Check enabledFeatures to determine capabilities. We ignore disabledFeatures.
                    for (int  i = ImsConfig.FeatureConstants.FEATURE_TYPE_VOICE_OVER_LTE;
                            i <= ImsConfig.FeatureConstants.FEATURE_TYPE_VIDEO_OVER_WIFI; i++) {
                        if (enabledFeatures[i] == i) {
                            mImsFeatureEnabled[i] = true;
                        } else if (enabledFeatures[i]
                                == ImsConfig.FeatureConstants.FEATURE_TYPE_UNKNOWN) {
                            mImsFeatureEnabled[i] = false;
                        } else {
                        }
                    }
                    if (tmpIsVideoCallEnabled != isVideoCallEnabled()) {
                        mPhone.notifyForVideoCapabilityChanged(isVideoCallEnabled());
                    }
    
                    for (ImsPhoneConnection connection : mConnections) {
                        connection.updateWifiState();
                    }
    
                    mPhone.onFeatureCapabilityChanged();
                    broadcastImsStatusChange();
                }
            }
        };
    •  

    ImsPhone更新ServiceState的Log:

    06-02 16:47:44.925 D/ImsPhone( 2170): updateDataServiceState: 
    defSs = 0 0 voice home data home 中国移动 中国移动 46000 中国移动 中国移动 46000  LTE LTE_CA CSS not supported 0 0 RoamInd=-1 DefRoamInd=-1 EmergOnly=false Ril Voice Regist state: 1 Ril Data Regist state: 1 mProprietaryDataRadioTechnology: 0 VoiceRejectCause: 0 DataRejectCause: -1 IsDataRoamingFromRegistration=false 
    //imsServiceState
    imsSs = 0 0 voice home data home null null null null null null  Unknown LTE_CA CSS not supported -1 -1 RoamInd=-1 DefRoamInd=-1 EmergOnly=false Ril Voice Regist state: 0 Ril Data Regist state: 0 mProprietaryDataRadioTechnology: 0 VoiceRejectCause: -1 DataRejectCause: -1 IsDataRoamingFromRegistration=false
    •  

    小结

    以上分析只分析了AP侧流程,相对于完整的ims注册过程来说并不完整,核心部分的协议及信令流程许多对上层来说是透明的,需要对这些部分深入了解后再做补充。

     

    原文地址:https://blog.csdn.net/wilschan0201/article/details/72846897

     

    展开全文
  • 3G核心网技术标准的持续发展,体现为36PP的UMTS标准的几个版本:R99、R4、R5、R6和R7,R4引入了分组软交换技术,R5进而引入了IP多媒体子系统IMS以实现全IP多业务移动网络的最终发展目标。R5以后,36PP核心网的电路域...
  • 对同时运营固定移动话音、宽带业务的综合运营商而言,最大的挑战就是实现网络的融合……
  • IMS核心网网络安全指标体系研究 (1).pdf
  • 人工智能-机器学习-移动核心网IMS安全和NAT穿越的研究.pdf
  • IMS核心网的架构及基本原理介绍,是中兴的培训资料,ppt做得挺好的。
  • 核心网技术总结(四) IMS的网络分层结构 从上往下可分为,应用层、业务能力层、会话控制层、承载控制与接入层。 承载与接入层:主要功能是用户接入(GPRS /UMTS/CDMA/WiFi/xDSL/LAN)、连接传统网络(PSTN/PLMN/...

                                                      核心网技术总结(四)

    1. IMS的网络分层结构

    从上往下可分为,应用层、业务能力层、会话控制层、承载控制与接入层。

     

    承载与接入层:主要功能是用户接入(GPRS /UMTS/CDMA/WiFi/xDSL/LAN)、连接传统网络(PSTN/PLMN/H.323/SIP VoIP)、控制承载资源

    网元:SBC、MGW等

     

    会话层:主要的功能是呼叫控制、用户管理、业务触发、资源控制、网络互通

    包括的网元有:P-CSCF、I-CSCF、S-CSCF、AGCF、MGCF

     

    业务能力层:提供各种各样的业务能力,由各种不同的应用服务器与资源服务器组成,提供的业务能力包括立即消息(IM)/呈现(Presence)/群组、PoC/通用电信业务

     

    应用层:主要提供第三方的应用,通过OSA提供的接口来实现对下层业务能力的调用。如:游戏中心、会议中心、交友中心、企业应用等。

     

    2.IMS各网元的主要功能

    会话控制层:

    CSCF(call Session Control Function)呼叫会话控制功能

    CSCF类型

    (1)P-CSCF:代理CSCF(proxy CSCF)用户在归属或者拜访网络的第一个连接点

    (2)I-CSCF:问询CSCF(interrogating CSCF)用户的归属网络第一入口点,分配S-CSCF、路由查询以及域间拓扑隐藏功能。

    (3)S-CSCF:服务CSCF(serving CSCF)多媒体模块的核心,附着对终端的注册鉴权,会话控制,业务触发。

    HSS(Home subscriber server)归属用户服务器,用于保存用户的签约信息,主要信息包括:

    1. 用户标识(包括公共及私有标识)、号码和地址信息
    2. 用户安全上下文:用户网络接入认证的密钥信息、漫游限制信息
    3. 用户的路由信息:HSS支持用户的注册,并且存储用户的位置信息
    4. 用户的业务签约信息:包括其他的AS的增值业务数据

    SLF(subscription locator function)签约数据定位功能,用于多个HSS的选择定位

     

    互联互通功能

    MGCF(Media Gateway Control Function)

    实现IMS核心控制面与PSTN/PLMN的交互,控制MGW完成TDW承载与IP承载的实时转换。

     

    IM-MGW(IP multimedia media gateway)

    完成IMS与PSTN及CS域用户宽带、窄带承载互通及必要的编解码变换

     

    BGCF(breakout Gateway control function)

    S-CSCF将会话控制信令前转到BGCF,BGCF选择MGCF,把会话路由到传统PSTN/PLMN网络

     

    SGW(signaling Gateway)信令网关

    完成ISUP over IP到ISUP over TDM的转换

     

    媒体资源

    MRF(multimedia Resource Function)媒体资源功能,包含两个部分:

    解析来自S-CSCF及SIP资源控制命令

    实现对MRFP的媒体资源控制

     

    MRFP(Multimedia Resource Function Process)媒体资源功能处理器。

    在MRFC的控制下,MRFP为终端提供媒体资源,包含多媒体信息播放(提示音、流媒体)和媒体内容解析处理(编解码变换等)

     

    其他网元

    DNS服务器负责URL地址到IP地址的解析

     

    ENUM server服务器负责电话号码到URL的转换

     

    NAT/ALG/SBC设备:

    完成公司网的IP地址转换、媒体流转发以及网络安全保证等功能

     

    业务能力层

    AS—应用服务器

    为IMS用户提供IM增值业务,可以位于用户归属网,也可以由第三方提供,其主要功能为:

    1. 处理从IMS发来的SIP会话
    2. 发起SIP请求,发送计费信息给CCF和OCS

    IMS AS 的类型

    1. OSA-SCS

    提供OSA服务网关功能,为第三方服务器提供接口

    1. IM-SSF

    作为网关,提供与传统智能网服务器的接口

    1. SIP AS

    直接提供IMS业务

     

    3.IMS中设计的接口和协议

    IMS网络中使用到的协议

    SIP:用于建立,更改和终止多媒体会话或呼叫的应用层协议

    SDP:会话描述协议,描述了承载层面的相关信息

    Diameter:基于RADIUS构建的,由IETF开发的认证,授权和计费协议

    H.248:用于媒体网关控制器管理媒体网关的资源

     

    各协议直接的参考点:

     

     

     

    核心网的IMS业务

    (1)语音业务:电话业务、紧急呼叫业务、特服类紧急呼叫业务

    (2)补充业务:支持呼叫前转类业务、支持呼叫限制类业务、支持闭合用户业务

    (3)智能业务:预付费、主被叫付费、IP直通车业务等智能业务

    (4)增值业务: 多媒体业务、语音彩铃业务

     

     

     

    展开全文
  • IMS构架下广电网络业务核心网元的建设.ppt
  • IMS构架下广电网络业务核心网元的建设.pptx
  • IMS核心网总体技术方案 完整的设计方案
  • 引言  现阶段,我国各运营商面临着网络演进的问题,即...IMS已经被定义为支持所有IP接入网的多媒体业务的核心网。虽然IMS最初是为第三代移动网而制定的标准,但是IMS的体系架构能够很好地支持固定网和移动网在各种层
  • 硬件开发相关内容 华为IMS基础培训_核心网维护中心
  • 核心网技术总结(5) 1.IMS的信令流程 注册流程的相关概念 为什么要注册 用户使用IMPU(SIP URI)通信 建立用户当前的IP与其IMPU的对应关系 掌握用户当前的位置信息及业务能力 注册过程的鉴权与认证保证了网络...
  • 现在网上大学对于认证等级考试提供后评估数据,因为考试结束...因为涉及IMS的知识相对会熟悉一些,对于安全规程/运维管理办法/虚拟化平台/数据库/流量清洗等内容并不是十分了解。对于没听过的项目还是百度找了一下相...
  • 一、前言  在经历了十几年的高速发展后,移动运营商越来越认清了一条重要的规律,那就是电信业务必须不断地发展以不断靠近经济发展...在3GPP的文件R5中,IMS是UMTS核心网络中提供端到端多媒体业务和集群多媒体业务的
  • [5G核心网部署与网络规划设计]VoNR/VoeLTE相对VoLTE,IMS网络的改造点主要包括哪些? 多选 支持5G位置信息获取|支持5G接入话单|被叫域选增加对5G接入的处理|紧急呼叫支持5G小区格式 [5G核心网部署与网络规划设计]...
  • 移动通信在经历了两代发展之后,目前3G标准已经成熟,并在一些国家...R99在无线接口引入了新的频率、新的无线技术,但在核心网络方面则保持了2.5G的GPRS引入后的网络架构,仅需升级支持3G的功能和2G、3G协同工作。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,613
精华内容 1,445
关键字:

核心网_ims

友情链接: GT卡LabView库.zip