5G核心网学习平台
精华问答 #Q19

P-CSCF如何根据SDP参数的取值映射到Rx接口的Max-Requested-Bandwidth参数

来自知识星球

P-CSCF如何根据SDP参数的取值映射到Rx接⼝的Max-Requested-Bandwidth参数

这个问题的背景是:

1)5GC要为上层语音业务建专有Qos流(GBR)来提供Qos保证;

2)而上层的语音业务Qos是通过协商的SDP结果来确定Qos的;

3)因此,P-CSCF要做一件事情,就是把SDP中的参数,映射到Rx接口(以后是基于SBI的N5接口)的

Diameter参数中,发给PCF来执行策略,并触发专有Qos流的建立。

如何映射的规则在TS29.513的7 QoS Parameters Mapping中有详细介绍。

其中,有一个关键参数是Max-Requested-Bandwidth,

它又包括Max-Requested-Bandwidth-DL和Max-Requested-Bandwidth-UL。

用于IMS向5GC/EPC请求上行/下行IP流最大带宽(bit/s)。

最终这个带宽会作为IMS音频/视频业务的GBR Qos参数。

因此非常重要。

那Max-Requested-Bandwidth这个参数是如何从SDP的参数里映射过来的呢?

映射规则在29513的Table 7.2.3-1: Rules for derivation of service information within Media Component

Description from SDP media componentz中定义,部分截图如下:

实际上映射规则来自于右侧的伪代码,如下:

(这里以上行带宽为例,下行类似)

"IF <SDP direction> = UE terminated (NOTE 8) THEN

IF Transport in m-line is "TCP" or "TCP/MSRP" THEN (NOTE 9)

IF a=recvonly or a=sendrecv or no direction attribute THEN

IF b=AS:<bandwidth> is present and

( b=TIAS:<Tibandwidth> is not

present or is present but not supported ) THEN

"marBwUl" := <bandwidth> * 1000; /* Unit bit/s

ELSE

IF b=TIAS:<Tibandwidth> is present and supported THEN

"marBwUl" := <Transport-dependent bandwidth>

(NOTE 11) /* Unit bit/s

ELSE

"marBwUl" := <Operator specific setting>;

ENDIF;

ENDIF;

ELSE

"marBwUl" := <Operator specific setting>,

(NOTE 10)

ENDIF;

ELSE /* UDP or RTP/AVP transport

IF b=AS:<bandwidth> is present and

( b=TIAS:<Tibandwidth> is not

present or is present but not supported ) THEN

IF a=rtcp-mux is negotiated(NOTE 13) THEN

IF b=RR:<rrbandwidth> is present

OR b=RS:<rsbandwidth> is present THEN

"marBwUl" := <bandwidth> * 1000 +

<rrbandwidth> + <rsbandwidth>;

ELSE

"marBwUl" := <bandwidth> * 1050;

/* Unit is bit/s

ENDIF

ELSE

"marBwUl" := <bandwidth> * 1000;

/* Unit is bit/s

ENDIF;

ELSE

IF b=TIAS:<Tibandwidth> is present and supported THEN

IF a=rtcp-mux is negotiated (NOTE 13) THEN

IF b=RR:<rrbandwidth> is present

OR b=RS:<rsbandwidth> is present THEN

"marBwUl" :=

<Transport-dependent bandwidth> (NOTE 11) +

<rrbandwidth> + <rsbandwidth>; (NOTE 3; NOTE 6)

ELSE

"marBwUl" :=

<Transport-dependent bandwidth>

* 1.05 (NOTE 11) /* Unit bit/s

ENDIF

ELSE

"marBwUl" := <Transport-dependent bandwidth>

(NOTE 11) /* Unit bit/s

ENDIF;

ELSE

"marBwUl" := <Operator specific setting>,

or attribute not supplied;

ENDIF;

ENDIF;

ENDIF

ELSE

Consider SDP in opposite direction

ENDIF"

这段伪代码用于确定VoLTE(Voice over LTE)服务中上行链路的最大请求带宽(`marBwUl`)。它根据

SDP(Session Description Protocol)中的不同条件和属性来计算带宽。以下是对这段代码的逐步解读:

1. SDP方向检查:

- 如果SDP方向是“UE terminated”,则继续执行,否则考虑SDP的相反方向。

2. 传输协议检查:

- 如果传输协议是“TCP”或“TCP/MSRP”:

- 检查SDP中的方向属性(`a=recvonly`、`a=sendrecv`或没有方向属性):

- 如果`b=AS:<bandwidth>`存在,并且`b=TIAS:<Tibandwidth>`不存在或不被支持:

- 将`marBwUl`设置为`<bandwidth> * 1000`(单位是bit/s)。

- 如果`b=TIAS:<Tibandwidth>`存在且被支持:

- 将`marBwUl`设置为传输协议相关的带宽。

- 否则,使用运营商特定的设置。

- 如果方向属性不符合上述条件,使用运营商特定的设置。

- 如果传输协议是“UDP”或“RTP/AVP”:

- 如果`b=AS:<bandwidth>`存在,并且`b=TIAS:<Tibandwidth>`不存在或不被支持:

- 如果协商了`a=rtcp-mux`:

- 如果`b=RR:<rrbandwidth>`或`b=RS:<rsbandwidth>`存在:

- 将`marBwUl`设置为`<bandwidth> * 1000 + <rrbandwidth> + <rsbandwidth>`。

- 否则,将`marBwUl`设置为`<bandwidth> * 1050`。

- 如果没有协商`a=rtcp-mux`,将`marBwUl`设置为`<bandwidth> * 1000`。

- 如果`b=TIAS:<Tibandwidth>`存在且被支持:

- 如果协商了`a=rtcp-mux`:

- 如果`b=RR:<rrbandwidth>`或`b=RS:<rsbandwidth>`存在:

- 将`marBwUl`设置为传输协议相关的带宽加上`<rrbandwidth>`和`<rsbandwidth>`。

- 否则,将`marBwUl`设置为传输协议相关的带宽乘以1.05。

- 如果没有协商`a=rtcp-mux`,将`marBwUl`设置为传输协议相关的带宽。

- 如果上述条件都不满足,使用运营商特定的设置或不提供属性。

如果还是不好理解,那再用大白话总结一下。

因此总结后就是:

• 如果SDP中传输协议是TCP,那Max-Requested-Bandwidth-UL就等于b行中的AS;(不过要乘

1000,换算成kbps)

• 如果SDP中传输协议是UDP,那Max-Requested-Bandwidth-UL就等于b行中的AS;(不过要乘

1000,换算成kbps)。【没有协商`a=rtcp-mux`场景。】

看个例子:

这是一个带SDP的183响应。可以看到b:AS的取值是49。

再看Rx接口:

这是一个紧跟着183的Rx接口的AAR消息,可以看到

Max-Requested-Bandwidth-UL和Max-Requested-Bandwidth-DL的取值都是49000,

也就是严格按照29513的要求,用b:AS的49乘以1000得到的。

返回精华问答列表