分享

PFCP(二)

 bin仔学习园地 2023-02-23 发布于上海

图片

感谢阅读。
这一篇谈PDR(Packet Detection Rule)和FAR(Forward Action Rule)。前面提到,从CUPS(Control and User Plane Separation)的角度看,UPF最重要的工作,是从各个接口(N3、N6、N9和N4-u)接收“用户面”“数据”,找到匹配的PFCP会话(PFCP Session)和PDR,根据PDR关联的其他“Rule”处理“数据”,相对应的,SMF最重要的工作,则是指示UPF建立、修改和删除PFCP Session Context,其中包含PDR和其他“Rule”—— 在其他“Rule”之中,最重要的就是FAR。简单的理解,UPF“用户面”路径上的转发节点,自身不产生“数据”,只负责转发“数据”,UPF就像快递公司的中转站,自身不产生“货物”,只负责转发“货物”(我们不生产水,我们只是大自然的搬运工),协议把“转发”拆开为关联的两个部分来实现,PDR负责“接收”(Packet in),FAR负责“发送”(Packet out)。

图片

UPF为什么需要PDR和FAR呢?设想一下,如果网络只有一个用户,且只有一种业务(如果只看协议的5GS拓扑图,容易产生这种错觉),UPF确实不需要PDRFAR,只要将从AN(Access Network,接入网络)接收的上行数据发送到DN(Data Network,外部的数据网络),将从DN接收的下行数据发送到AN,就万事大吉了。但实际情况是,5GS是为多用户多业务场景设计的公共网络,UPF接收的上行数据,可能来自不同的ANUE,需要送往不同的DN,反过来,UPF接收的下行数据,可能来自不同的DN,需要送往不同的ANUE—— UPF和快递公司的中转站一样,收到的“货物”可能来自不同的用户,需要送往不同的目的地。为了确保数据送往正确的目的地(DN或UE),UPF接收数据后,需要先根据PDR进行识别(区分),UPF发送数据前,需要先根据(PDR关联的)FAR(和QER)进行封装 —— 以帮助下游节点(检测)识别数据。

图片

举个例子,示图中共有4个UE:A、B、C、D,3个DN:X、Y、Z。在上行方向的N3接口,UPF X(连接DN X)收到的数据可能来自同一基站(M)的不同UE(A或B),UPF Z(连接DN Z)收到的数据可能来自不同基站(M或N)的不同UE(B、C或D)。对于UE A DN Y组合,如果UPF I角色为UL CL(Uplink Classifier)或BP(Branching Point),则同时存在两个PSA(Y1和Y2,都连接DN Y),在上行方向的N9接口,UPF I根据(PDU Layer)目的地址(UL CL场景)或源地址(BP场景)发送到不同PSA(Y1或Y2)。可以想象,在下行方向的N6接口(示图没有呈现),UPF X收到的数据可能需要发送到UE A或UE B,UPF Z收到的数据可能需要发送到UE B、UE C或UE D,在发送之前,UPF(X和Z)需要根据(PDU Layer)目的地址(即UE IP)进行识别 —— 如果某个(物理)UPF同时连接多个DN,UPF还需要根据Network Instance进行区分(即使只有一个DN,通常Network Instance也是存在的,3GPP TS 29.244: Network Instance - It shall be present if the CP function requests the UP function to allocate a UE IP address/prefix and the Traffic Endpoint ID is not present)。

图片

在5GS内部,同一UE(或不同UE)的不同业务通过不同的PDU会话(PDU Session)进行区分,对于“用户面”的某个特定的接口,不同的PDU会话体现为不同的GTP-U隧道(GTP-U Tunnel)。从UPF的角度看,在5GS内部N3接口和N9接口都使用GTP-U协议,UPF接收数据时,通过GTP-U报文的F-TEID(Fully Qualified Tunnel Endpoint Identifier)识别GTP-U隧道(识别PDU会话),UPF发送数据时,根据PDU会话对应GTP-U隧道的F-TEID,添加GTP-U包头(TEID)和IP包头(IP地址),以帮助下游节点识别GTP-U隧道。在5GS外部N6接口上传送的就是业务数据(如果PDU会话类型是IP,业务数据就是IP报文,UE IP是IP报文的源地址或目的地址),UPF接收数据时,通过Network Instance目的地址(即UE IP)进行区分,UPF发送数据时,则不需要进行GTP-U封装。有意思的是,SMF通过PDR将UE IP传递给UPF(PSA),作为N6接口接收数据的识别条件,但这个UE IP通常就是UPF分配的(协议允许UE IP由SMF或UPF分配,国内运营商通常选择UPF分配方案,3GPP TS 29.244: A UE IPv4 address or IPv6 prefix may be allocated by the CP function or the UP function),在现网中,SMF在PFCP会话建立时(通过过渡的PDR)要求UPF(PSA)分配UE IP,SMF从UPF获得UE IP后,在PFCP会话修改时(通过新建的PDR)将UE IP又传递给UPF。

图片

相似的,作为N3接口或N9接口接收数据的识别条件的Local F-TEID,也是UPF自己分配的 —— 且只能由UPF分配(3GPP TS 29.244: For EPC and 5GC, F-TEID shall be only allocated by the UP function, see clause 5.8.2.3 of 3GPP TS 23.501[28]. The UP function shall set the FTUP feature flag in the UP Function Features IE (see clause 8.2.25) and the CP function shall request the UP function to allocate the F-TEID),SMF从UPF获得F-TEID后,通过“控制面”消息传递给GTP-U隧道的对端,后续对端发送数据时将这个F-TEID添加到GTP-U包头。以上图为例,从I-UPF的角度看,对于特定的PDU会话,I-UPF分配N3接口的F-TEID,通过N4、N11、N2接口传递给AN,后续AN发送上行数据时将这个F-TEID添加到GTP-U包头,相似的,I-UPF分配N9接口的F-TEID,通过(两个)N4接口传递给PSA,后续PSA发送下行数据时将这个F-TEID添加到GTP-U包头。可以想象(示图没有呈现),对于特定的PDU会话,AN分配N3接口的F-TEID,通过N2、N11、N4接口传递给I-UPF,后续I-UPF发送下行数据时将这个F-TEID添加到GTP-U包头;PSA分配N9接口的F-TEID,通过(两个)N4接口传递给I-UPF,后续I-UPF发送上行数据时将这个F-TEID添加到GTP-U包头。

图片

只对PDU会话进行区分还不够,更进一步的,在PDU会话内部,部分节点可能需要区分不同的QoS流(QoS Flow),以进行相应的QoS控制。和PDU会话相似,QoS流是UE到PSA(UPF)之间的“端到端”管道,以QFI(QoS Flow Identifier)作为标识,在N3和N9接口的GTP-U隧道内,不同的QoS流通过GTP-U包头的QFI进行区分。SMF分配QFI后,通过“控制面”消息将QFI分别传递给QoS流的两端 —— UE和PSA。在上行方向,SMF通过N1接口将QFI传递给UE,UE(在Uu接口)发送“用户面”数据前将QFI封装进SDAP包头,gNB从SDAP包头获取QFI后,再封装进N3接口的GTP-U包头;在下行方向,SMF通过N4接口(通过PDR关联的QER)将QFI传递给PSA,PSA将QFI封装进N3接口(或N9接口,取决于是否存在I-UPF)的GTP-U包头。PSA以外的UPF(即I-UPF),不一定会从SMF获得QFI —— 可见QFI是可选的识别条件。实际上,I-UPF作为转发节点,只需要将接收报文的QFI“复制 粘贴”到发送报文,在PSA和AN之间的承载网络,进行差异化处理也不是基于QFI,而是基于FAR插入的DSCP—— 这里DSCP是SMF根据5QIPriority LevelARP确定的(3GPP TS 29.244: For 5GC, transport level marking is performed on a per QoS flow basis. Transport level marking refers to the process of marking traffic at the UPF with a DSCP value based on the mapping from the 5QI, the Priority Level (if explicitly signalled) and optionally the ARP priority level configured at the SMF)。

图片

在上述认识的基础上,我们粗略看一下PDR和FAR。由图可见,每个PDR和FAR都有自己的PDR IDFAR ID,用于区分不同的PDR或FAR。对于PDR来说,最重要的构成是PDI(Packet Detection Information),包含各种包检测信息,除了上面提到的Network InstanceUE IP addressLocal F-TEIDQFI,还可能包含Source InterfaceTraffic Endpoint IDSDF FilterApplication ID等,这为包检测提供了丰富的组合。由于一个数据包可能同时匹配多个PDR,PDR还需要定义Precedence(优先级),帮助UPF确定PDR。随后,UPF通过PDR包含的FAR ID找到对应的FAR。对FAR来说,最重要的构成是Apply Action,其中BUFFFORWDROP的取值(三者只能有一项为1)指示如何处理匹配PDR的数据,是缓存转发还是丢弃—— 如果缓存,根据FAR关联的BAR(Buffering Action Rule)指示如何缓存;如果转发,由Forwarding Parameters指示如何转发。另外,由于GTP-U隧道“点到点”(Endpoint to Endpoint)之间建立的,即F-TEID“点到点”有效的(或更准确的说,只在某个“点”有效),因此,在N3接口和N9接口,对应的PDR会包含Outer Header Removal,PDR关联的FAR(的Forwarding Parameters)会包含Outer Header Creation,这意味着,UPF在N3接口或N9接口接收数据后会先剥去旧的GTP-U包头、UDP包头和IP包头,发送数据前会再添加新的GTP-U包头、UPD包头和IP包头。

图片

由上,从UPF的角度看,从特定某个接口接收的数据,可能匹配不同的PDR,因为数据可能和不同的UE相关,比如说,UPF(PSA)从N6接口接收的数据,会和包含不同UE IP的PDR匹配,UPF从N3接口或N9接口接收的数据,会和包含不同F-TEID的PDR匹配。更进一步的,对于特定的UE,从特定某个接口接收的数据,也可能匹配不同的PDR,以上图的A处为例,UPF(UL CL)从N3接口接收的数据,可能匹配不同的PDR(ID分别为0x 401和0x 1403),通过不同的FAR(ID分别为0x 2030 0001和0x 2050 0002)向不同的PSA发送。另外,PDR和FAR不是“一一对应”的关系,一个PDR可以关联多个FAR(我没见过实例),不同PDR也可能关联同一FAR(这些必须PDR属于同一PFCP会话,3GPP TS 29.244: A FAR, a QER, a URR and a MAR shall only be associated to one or multiple PDRs of the same PFCP session context),以上图的B处为例,UPF(UL CL)从N9接口的数据来自不同的PSA,可能匹配不同的PDR(ID分别为0x 802和0x 1804,F-TEID的IP相同,TEID不同),但通过相同的FAR(ID为0x 2040 0003)向gNB发送。关于PDR和FAR的更多细节,详见下一篇。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章