ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

IMS计费联调实战:读懂TS 32.260规范,搞定CDR与Rf/Ro接口排错

IMS计费联调实战:读懂TS 32.260规范,搞定CDR与Rf/Ro接口排错 简介面向通信行业从业者与3GPP技术研究者的《3GPP TS 32.260 IMS计费行标 中文版》是一份针对3GPP官方技术规范的中文翻译文档重点解析IP多媒体子系统IMS的在线与离线计费架构、计费数据记录CDR、计费触发点、OCS/OFS以及Diameter/Gx接口等核心知识帮助读者快速理解从2G到4G网络中的计费管理与控制流程。包内含1个PDF文件整体大小约2.65MB方便随时查阅。文件按前言、范围、参考文献、定义与缩写、架构注意事项、计费原理等章节编排覆盖离线计费架构、在线计费架构和融合计费架构适合运营商研发、计费系统测试及网络优化人员对照英文原版深入研读。资源目前已有195人学习下载对于希望系统掌握IMS计费标准、提升跨网元接口调试能力的读者具有较高参考价值。1. 「IMS计费」行标不是给研发看的小说是给调测和联调用的尺子TS 32.260在3GPP SA5计费管理规范里属于「应用计费」这一层名字直译是IMS计费中文行标语境里通常把它当计费系统与IMS核心网对接时的行为约定。它跟TS 32.240计费架构、TS 32.298CDR编码、TS 32.299在线计费Diameter应用是配套的只盯着32.260很容易被接口报错和字段对不齐搞到翻车。实际工作中最需要这份文档的是做CS/PS域和IMS融合计费的老手以及刚接手VoLTE/VoNR计费联调的新人。它回答的不是「怎么计费更准」而是「IMS域里一次会话从开始到结束应该在哪些点上产生什么记录、往哪个接口发、字段里该填什么」。你拿它当字典查字段当流程图跟信令比当协议小说通读靠谱得多。2. 先看懂32.260在3GPP计费体系里的位置离线、在线与Rf/Ro分界线2.1 计费架构四件套别只看32.260一个文档3GPP计费规范是分层配套的TS 32.260本身并不定义完整的Diameter消息体而是定义IMS场景下的计费触发点和语义。在联调中你会发现出问题往往不是32.260里的规则没看而是把32.260、32.298、32.299的职责搞混了。我一般建议手边常备四份规范TS 32.240定总架构TS 32.260定IMS计费行为TS 32.298定CDR的ASCII编码和字段含义TS 32.299定在线计费接口的Diameter命令和AVP。四份配合起来才能从一条SIP信令推到一张CDR。IMS计费跟传统CS域计费最大的区别是IMS域里没有「一次呼叫一张话单」这种天然边界。一个IMS会话可以包含多个媒体流可以发生hold/resume可以转接可以和别的会话合并。所以32.260引入了「计费会话Charging Session」的概念用一个IMS Charging IdentifierICID把一次IMS会话相关的计费数据串起来。ICID这个字段在CDR里就是联调时首先要对上的主键很多字段对不齐的问题最后都发现是ICID的取值规则没统一。2.2 离线计费CTF和在线计费OCS的分工TS 32.260把IMS计费功能拆成两部分离线计费走Rf接口由CTFCharging Trigger Function生成计费事件发给CDFCharging Data Function最终生成CDR在线计费走Ro接口CTF实时跟OCSOnline Charging System做信用控制余额不足直接切话。实际现网里VoLTE用户基本是离线计费为主预付费用户走Ro在线计费后付费用户走Rf离线计费。也有混合场景同一个用户同时部署了在线和离线那就由网络侧根据用户签约的QoS和业务类型决定走哪条路径。联调时最容易忽略的一点是TS 32.260里的「计费触发点」并不仅仅是INVITE和BYE。它把IMS会话生命周期分成了多个计费事件比如初始请求、中间请求、释放请求、以及服务改变Service Change。注意这里的「服务改变」不是SIP re-INVITE那么简单它指的是媒体流增加/删除、编解码改变、hold/resume这类会影响计费量的行为。很多测试场景只测了正常通话漏了hold/resume结果CDR里的媒体信息段是空的这就是对触发点理解不全导致的。2.3 CDR类型映射一张CDR还是多张CDR32.260定义了IMS会话相关的CDR类型常见的是IMS CDRS-CSCF/P-CSCF/I-CSCF产生的会话CDR和IMS事件CDR针对单个计费事件比如SIP消息触发。规范还允许根据部署选择在多个网元上都产生CDR再用计费系统去重。这里有个关键设计如果P-CSCF和S-CSCF都产CDRICID和节点标识组合起来就是唯一键。我在做计费系统去重时踩过坑——两段CDR的start time差几秒时长却相同导致分拣时被判成两条独立记录。后来查规范发现S-CSCF和P-CSCF对会话开始时间的定义并不完全一致规范允许它们各自记录自己感知到的开始时间。所以做离线计费汇聚时不能简单用“相同ICID且时间一致”去重必须带上产生网元标识。3. IMS会话计费的关键动作从SIP信令到计费请求的字段怎么填3.1 一次正常通话触发点与上报动作对照表IMS离线计费上报的核心原则是「事件驱动记录完整状态」。以下是一个基础语音呼叫的触发点对照适合直接拿去做联调用例设计信令事件计费动作上报内容要点初始INVITE发送计费请求开始Initial主被叫号码、ICID、媒体描述、接入点信息183/200 OK发送计费请求中间更新Interim协商后的实际媒体、P-CSCF地址re-INVITEhold/resume再次发送Interim媒体流变化、服务改变类型BYE / 200 OK发送计费请求结束Termination结束原因、时长、流量统计释放前最后一条消息可能产生事件计费针对未建立会话的事件记录这里的动作映射不是死板的一条信令一条消息。比如初始INVITE后如果一直没收到最终响应有些网元实现会等一段时间再发Termination标记为通话未接通。我建议你在测试用例里明确区分「主叫侧收到180」和「主叫侧收到200 OK」因为不少实现在只收到180时也会启动计费导致产生零时长话单——这在规范里允许但很多计费系统会把它当异常。3.2 关键AVP和CDR字段背熟这几个联调就够用了在线计费Ro接口里TS 32.260规定了若干典型的AVP它们由TS 32.299承载但含义由32.260约束。下面这几个是排障时对照最多的字段/AVP出现位置实际含义与踩坑点IMS-Charging-Identifier所有计费请求会话级标识后面通常带一个节点标识前缀别只取后半段Radio-FrequencyRFCDR中无线频率用于区分VoLTE和Wi-Fi Calling取值要跟接入网配置一致Called-Party-Address请求开始/结束被叫号码注意IMS可能带tel: URI格式需要归一化Service-Data请求更新包含媒体类型、编解码、带宽联调时要检查SDP协商结果是否真实反映协商Trunk-Group-Id请求开始中继群ID用于区分不同接入方式很多现网忘记配导致计费策略不生效Rating-GroupRo在线计费费率组OCS决定扣费档位配错会导致扣费金额翻倍参数说明字段取值优先级是「网络侧配置 SIP消息内容 默认值」。比如Called-Party-Address虽然请求URI里有但计费节点通常优先用P-Asserted-Identity或Request-URI里规范化后的号码而不是直接用initial INVITE里的内容。如果你在测试中发现话单里被叫号码格式跟信令不一致先查网元的号码归一化规则。3.3 服务改变与多媒体流为什么一张话单会变成多段IMS会话里媒体流增加或删除时TS 32.260要求产生一次计费更新并把服务改变原因写清楚。常见场景是视频通话中关掉摄像头只保留语音。此时媒体描述里会有两行m行其中一行被标记为inactive。如果你只看SDP不细看每个媒体流的状态很容易把带宽算错。规范里对Service-Data的处理方式是计费网络元素需要把SDP解析成媒体组成部分每个媒体部分包含媒体类型、媒体格式列表、以及带宽参数。联调时建议手动构造一次「先音视频再hold视频」的呼叫然后核对CDR里的媒体分量是否变为仅语音。这一步能过滤掉超过一半的规范理解偏差。4. 把32.260落成可执行的联调方案从读取规范到闭环测试4.1 行标落地第一步把规范条款翻译成测试用例表对于中文版行标最忌讳的是把英文规范逐句翻译然后存档那样对工程毫无帮助。我会把规范里的每个「shall」抽出来变成一条测试检查项。比如规范要求「发生SIP会话释放时CTF应发送计费请求终止」那么对应的测试用例就是建立呼叫、正常释放、验证网元是否发出Termination请求、验证内容是否包含终止原因。我习惯的用例表格至少包含四列规范条款编号比如32.260的4.3.2、触发动作、预期上报动作、验证点。不要只写「发送BYE」要写清楚「在呼叫保持10秒后发送BYE期望收到Termination且Service Duration字段等于实际通话时长」。这样做的好处是拿到任何新的测试环境照着表跑一遍就能判断网元的计费行为是否符合行标精神。测试时需要用SIP信令模拟工具和Diameter计费模拟器。免费方案里Sipp、OAI的IMS测试平台、以及一些开源的Diameter仿真器都足够。但注意开源仿真的CTF逻辑和商用网元实现有差异尤其对异常信令的处理。我一般先用仿真器验证计费系统本身的逻辑再和真实网元做对接。4.2 对接计费系统的参数配置Rf接口最常用的几个开关联调时最常改的参数集中在网元的计费接口配置上。以下是一份我常用的参数检查清单适用于绝大多数支持Rf/Ro的IMS核心网网元参数项推荐值/初始值说明计费节点地址CDF/OCS按实际部署填写主备地址都必须配测试地址不能留空上报模式离线事件触发在线实时信用控制预付费和后付费分开配置CDR文件批量落地周期5分钟或达到1MB联调时尽量设1分钟方便快速找日志时区UTC规范默认UTC但很多现网落地用本地时间必须确认计费系统侧中继群ID映射按接入网规划否则话单里Trunk-Group-Id为空号码清洗规则去掉86、去掉tel:前缀需与计费系统侧保持一致这些参数既影响话单内容也影响后续计费系统批价。比如时区字段如果网元写的是08:00但计费系统默认读取UTC会导致批价时算出来的时长偏移8小时。这是典型的「字段对不上」问题联调时要统一口径。4.3 构造最小可复现的测试呼叫三分钟闭环准备一个最简单的IMS计费联调环境通常包括SIP用户端软件话机、IMS核心网至少具备S-CSCF和P-CSCF功能、计费接收端能查看Diameter消息或生成CDR。操作步骤第一步在软件话机上注册两个用户确认双方注册成功。注册过程本身不触发计费但如果计费节点配置了「注册事件计费」会在注册时产生一条事件记录。联调时先关掉注册计费聚焦会话计费。第二步发出一个语音呼叫呼叫建立后保持15秒再挂断。观察Rf接口是否产生了三类消息Initial、Interim至少一条、Termination。如果中间做过hold还要额外看到第二条Interim。第三步打开接收端的CDR查看功能核对ICID一致性。如果看到Termination里的起始时间跟Initial里的起始时间不一致说明网元的时间同步有问题。这套闭环测试跑通后再进行异常场景呼叫未接通就挂断、被叫拒绝、无响应超时。每个场景下话单里的终止原因值比如CALLED_PARTY_BUSY、NO_ANSWER必须正确。很多时候问题都出在超时场景网元发Termination时没有把释放原因带全导致计费系统无法判断是否应收占用费。5. 避坑指南IMS计费联调里五个反复出现的翻车点5.1 现象话单里主叫号码变成匿名号码原因IMS网络里P-Asserted-Identity可能因为隐私设置被隐藏。很多网元在计费时会优先用Privacy头域判断是否显示主叫号码如果隐私标记为「限制」则话单里主叫字段填Anonymous。解决把隐私处理策略调整为「计费时不受Privacy限制」或者让计费系统在汇聚时用SIP URI里的内部号码替代。解决方式更常见的不是改交换机而是在计费系统侧配置号码优先级先取P-Asserted-Identity如果为空再取From头域的URI。这个优先级规则要写在联调文档里否则两边各按各的理解出了问题互相推。5.2 现象同一ICID产生了多张时长几乎相同的CDR原因P-CSCF、S-CSCF、I-CSCF都配置了产生CDR且计费汇聚系统没有按网元标识去重。TS 32.260允许每个节点都产生CDR但要求计费系统去重。解决在计费汇聚规则里去重键改为ICID计费节点地址。同时检查各网元上报的Start Time是否统一取了会话建立时刻而不是各自的第一条SIP消息时刻。我遇到过一个现网P-CSCF取INVITE到达时刻S-CSCF取200 OK发送时刻导致两段CDR起始时间差3秒被用户投诉时长不准。5.3 现象在线计费用户通话被提前掐断原因Ro接口的信用控制里初始配额Granted-Service-Unit设得太小导致通话刚建立就触发重授权而重授权请求因为Diameter超时被误判为失败。解决把初始配额设置成足够覆盖一次典型呼叫的时长同时加大Diameter请求超时重发次数。这里有个经验值初始配额建议不低于60秒重发次数设3次超时间隔500毫秒。这样既能防止恶意用户无限通话也不会因为网络抖动误伤正常用户。这个坑经常在预付费VoLTE商用后集中爆发。尤其当用户跨LTE和Wi-Fi切换时Ro接口会触发重授权如果OCS响应慢CTF会执行「信用不足释放」策略。建议在OCS侧对这类切换请求设置更高的优先级队列。5.4 现象SDP媒体流的带宽参数合计为公司总带宽的数倍原因话单里的带宽字段包含了上行和下行且有些网元把每个编解码器的带宽都列出而非仅列出协商后实际使用的编解码。TS 32.260要求列出协商后的实际媒体分量但未严格要求「去重」编解码。解决在计费系统侧把带宽相加前先按媒体流索引去重只取协商后激活的那一路。同时确认网元配置中的「SDP解析深度」参数有的实现默认只解析第一个m行导致视频流量完全没被记录。5.5 现象CDR文件里的时间戳与计费系统显示时间差8小时原因网元将本地时间写入CDR但CDR文件头或字段本身没有携带时区偏移。规范要求使用UTC但实际很多国内部署把系统时区设为东八区且没有把系统时间切到UTC。解决所有IMS核心网设备的时间统一设置为UTC并在计费系统显示层做时区转换。这个规则必须在开局时写进工程规范否则后期改时间会导致在途话单混乱。如果实在不能改系统时区至少确保网元有独立的「计费时区」参数并把这个参数同步给计费系统。6. 用静态核查加动态抓包验证你的计费实现是否真的符合32.260验证计费行为是否合标我自己的习惯分两步走。静态核查把网元生成的CDR样例字段和规范里对应的CDR字段定义逐项对照。重点看必选字段是否全部存在比如ICID、被叫号码、会话起始时间、会话结束时间、媒体描述。动态核查在SIP话机上做一次包含hold/resume和modify媒体的通话同时在Rf接口上挂包抓取Initial、Interim、Termination三条消息验证字段是否随信令变化。我还有个土办法造一条超过2小时的呼叫然后观察网元是否会按规范要求以及按「最大配额」产生中间上报。很多网元实现默认只有事件触发上报没有定时上报。用户在长通话时如果网络侧没有任何事件变化话单里只有一条Initial一条Termination从计费系统角度无法识别中途是否发生了断网重连。此时可以通过配置补充「时间周期上报」参数强制每60分钟发一条Interim。这个配置在商用场景很有用既能保证话单完整性又能让OCS在线计费及时扣减长时间通话的信用额度。最后说一个我踩了无数次才记住的教训升级网元版本后别只看二次确认的计费用例一定要重新跑一遍「呼叫保持-恢复-挂断」的用例。因为很多网元升级后SDP解析逻辑变了媒体状态没同步到计费模块话单里看不到hold状态光看主流程根本发现不了。文档是静态的信令是动态的验IMS计费就要用动态信令去抽打静态规则。希望这次整理的路径能帮你的联调少熬几个夜。本文还有配套的精品资源点击获取
返回列表