コンテンツにスキップ

NF Set / Binding Indication / SCP Routing — PCF障害時にPolicyの継続性をどう守るか

難易度: 上級(マニアック) / 想定学習時間: 40分 / 前提: BSF / PCF Binding, SCP, NRF / 主役: PCF, BSF, SCP, NRF, NEF / AF, SMF / 主Interface: SBI(Npcf / Nbsf / Nnrf), N5, N7

学習目標

この章を読み終えると、次のことができるようになります。

  • NF Instance / NF Set / NF Service Instance / NF Service Set の違いを説明できる(TS 23.501 §5.21.3)
  • Binding Level が「後続Requestをどの範囲に結び付け、障害時にどの範囲で再選択してよいか」を表すことを説明できる
  • BSFのPCF Binding(Nbsf_Management)と、SBIのBinding Indication(3gpp-Sbi-Binding / 3gpp-Sbi-Routing-Binding)の違いを説明できる
  • PCF障害時の切替を ①発見・ルーティング ②Context継続性 ③Binding整合性 の3段階に分けて切り分けられる
  • Wiresharkで Binding関連Header・Location・3gpp-Sbi-Target-apiRoot を読み、Requestが「どこへ向かい、誰が処理したか」を追える

前提知識

この章の焦点(Level ∞ マニアック)

BSFの章では「担当PCFをどう見つけるか」を扱いました。この章では一歩進めて、担当PCFが落ちたら何が起きるか を扱います。「同じPCF Setの別Instanceへ転送すれば直る」という単純な話ではなく、ルーティングの切替・Policy Contextの継続・Bindingの整合 の3つが揃って初めて継続性が得られることを、Header単位・Trace単位で確認します。


Why — なぜ「別のPCFに送れば直る」では済まないのか

次のPDU Sessionを考えます。

UE ── AMF ── SMF ── N7 ── PCF-A
                 │          │
                 │          └─ SM Policy Association の Context
                 └─ UPF

AF ── NEF ── BSF ──────────> PCF-A(Binding先)

PCF-Aが故障した後、同じ種類のPCF-Bが稼働していても、PCF-Bが対象SessionのContextを扱えるとは限りません。PCF-AとPCF-Bが同じNF Setに属し、かつContextを共有していて初めて、PCF-Bは既存のSM Policy AssociationやAF Sessionの続きを処理できます。

必要な条件は大きく3つです。

  1. 発見・ルーティング — 代替PCFを見つけ、仕様が許す範囲でRequestを送り直せること
  2. Contextの継続性 — 代替PCFが既存のPolicy Association等のContextを利用できること
  3. Bindingの整合性 — BSFのBinding、SBIのBinding Indication、実際に処理したPCF Instanceが矛盾しないこと

例え話: PCF Setは「同じ顧客台帳を共有する窓口チーム」です。担当窓口(PCF-A)が急に休んでも、同じチームの別窓口(PCF-B)なら共有台帳(Context)を見て対応を続けられます。しかし、別の支店の窓口(別Setや台帳を共有しないPCF)へ回されると、「その案件は存じません」と言われてしまいます。また受付票(Binding)に「A窓口限定」と書かれていれば、案内係(SCP)は勝手に別窓口へ回してはいけません。


What — NF Set と Binding の構成要素

NF Instance / NF Set / NF Service Instance / NF Service Set

TS 23.501 §5.21.3 は、NFの信頼性(Reliability)を NF Set と NF Service Set という単位で扱います(NF Set概念の一般化はRel-16のSBA拡張、要確認。AMF SetはRel-15から存在)。各用語の定義文は TS 23.501 §3.1(Definitions)にあり(要確認)、§5.21.3 はその機能説明です。

用語 意味 例 規定
NF Instance NF Instance ID(UUID)で識別される個々のNF実体 PCF-A TS 23.501 §3.1、§5.21.3
NF Set 同じNF Typeで、同じServiceと同じNetwork Sliceをサポートし、同じContextデータにアクセスできる、相互に代替可能なNF Instanceの集合。地理的に分散していてもよい PCF Set X = TS 23.501 §3.1、§5.21.3(枝番は要確認)
NF Service Instance NF Instance内の個々のService実体 PCF-A上の Npcf_PolicyAuthorization TS 23.501 §3.1、§5.21.3
NF Service Set 1つのNF Instance内 の、同じService Typeで相互に代替可能なNF Service Instanceの集合。同じContextデータにアクセスできる PCF-A内の Npcf_SMPolicyControl × 2 TS 23.501 §3.1、§5.21.3(枝番は要確認)
                    PCF Set X(NF Set)
   ┌────────────────────────────────────────────────┐
   │ PCF-A(NF Instance)     PCF-B(NF Instance)   │
   │  ├─ NF Service Set S1      ├─ NF Service Set S1'│
   │  │   ├─ SMPolicyControl #1 │   └─ ...           │
   │  │   └─ SMPolicyControl #2 │                    │
   │  └─ PolicyAuthorization #1 └─ ...               │
   └────────────────────────────────────────────────┘
                         │
            共有Context(UDSF または 実装固有のDB)

「同じNF Type」≠「同じNF Set」

PCFが何台並んでいても、同じNF Set IDで構成され、同じContextにアクセスできる のでなければ相互代替はできません。逆に、NF SetはKubernetes ClusterやLB VIPと同義ではありません。どのPod / VMを同じSetに入れ、Contextをどう共有するかは Vendor / オペレータ設計(実装依存) です。

NF Set ID の表記

NF Set IDは TS 23.003 §28.12 で、次の形式のグローバルに一意な文字列として定義されます(NF Service Set ID は §28.13、要確認)。

set<Set ID>.<nftype>set.5gc.mnc<MNC>.mcc<MCC>
例(テスト用PLMN 001-01、PCF): set1.pcfset.5gc.mnc001.mcc001

AMF Setだけは set<AMF Set ID>.region<AMF Region ID>.amfset.5gc.mnc<MNC>.mcc<MCC> という特別な形式になり、GUAMIのAMF Region / AMF Setと対応します(GUAMI参照)。AMF SetはNF Setの一種 であり、本章の基本的な考え方はAMFにも当てはまります。ただしAMFには GUAMI・Backup AMF(backupamfinst)・計画停止手順などの固有の扱いがあります(TS 23.501 §5.21.2 / GUAMI)。

NRFでの見え方

各NF Instanceは、NRFへ登録するNF Profileで自分の所属NF Set(nfSetIdList)や、NF Serviceごとの NF Service Set(nfServiceSetIdList)を公開します(TS 29.510 のNFProfile / NFService型、属性名・節番号は要確認)。Consumer や SCP は、NRF Discovery で「このNF Setに属するPCF」を検索して代替候補を得ます(クエリパラメータ target-nf-set-id、要確認)。

Binding Level — 後続Requestを「どの範囲」に結び付けるか

TS 23.501 §6.3.1.0(Principles for Binding, Selection and Reselection)は、Binding を「特定のNF Producer側リソース(Context)に関する後続Requestを、どのNF Producer Instance群へ送るべきかを示す仕組み」として整理し、次の4つの Binding Level を定めています。

Binding Level 結び付く範囲 通常のSelection 利用不可時のReselection(概念)
NF Service Instance 特定のService Instance 指定Service Instance 同一NF Service Set内、さらにNF Instance / NF Setが示されていればその範囲
NF Service Set 同等Service Instance群 Set内のいずれか 示された上位範囲(NF Instance / NF Set)
NF Instance 特定のNF Instance 指定NF Instance(内のService Instance) NF Setが示されていれば 同一NF Set内の別Instance
NF Set 同等NF Instance群 Set内のいずれか 同一NF Set内の別Instance

表は TS 23.501 §6.3.1.0 の表(Binding, selection and reselection)を概念的に要約したものです。各セルの厳密な条件は原文で要確認です。

「NF Instance Level + NF Set併記」は「NF Set Level」ではない

NF Instance Level で NF Set も示されている場合、通常は指定されたNF Instanceへ送ります。同一NF Set内の別Instanceへ振り替えてよいのは、指定Instanceが利用できない場合の Reselection に限られます。逆に Binding Indication に NF Set が含まれない NF Instance Level では、Binding Indicationだけでは再選択の範囲が示されません。NRFのNF Profile(nfSetIdList)に基づく再選択の可否は TS 23.501 §6.3.1.0 で要確認です。「Binding Levelが何で、どの範囲が併記されているか」がReselectionの許容範囲を判断する出発点になります。

BSFのPCF Binding と SBIのBinding Indication は別物

名前が似ていますが、持ち主・形式・利用者がまったく異なります。

項目 BSFに登録された PCF Binding SBIの Binding Indication
どこにある? BSFが保持するBindingリソース HTTP/2 Header(3gpp-Sbi-Binding / 3gpp-Sbi-Routing-Binding)
何を表す? UE / PDU Session(UE IP・DNN・S-NSSAI等)↔ 担当PCF(PCF Instance ID・PCF Set ID・Binding Level等) 特定リソース(Context)に関する後続Requestを送るべきProducerの範囲
作成者 PCF(Nbsf_Management_Register / Update) Producer(Resource作成時の応答等)、またはConsumer(Notification / Callbackの受け先として)
利用者 BSF Consumer(NEF / AF、PCF for UE 等) NF Consumer、SCP
主な仕様 TS 23.503 §6.1.1.2.2(枝番は要確認)、TS 23.501 §6.3.7.1(要確認)、TS 29.521 TS 23.501 §6.3.1.0、TS 29.500 §5.2.3.2.5 / §5.2.3.2.6 / §6.12
いつ使う? 最初に 担当PCFを見つけるとき 見つけた後 のリソースへの後続Request、障害時の再選択

「最初はBSF、後はBinding Indication」の例外

上の二分法は目安です。NEF / AFがBSF Discoveryで得た PCF Set ID・Binding Level から 3gpp-Sbi-Routing-Binding を組み立て、最初の Npcf_PolicyAuthorization_Create に付ける場合もあります(後述のCall Flow。TS 29.514 / TS 29.521、要確認)。また、SCPがBSFへのDiscoveryを代行する(Delegated Discovery)構成もあります(BSF / PCF Binding参照)。

BSFのPCF Bindingにも、PCF Set ID と Binding Level(NF Instance / NF Set)を含められます(TS 29.521 の PcfBinding型 pcfId / pcfSetId / bindLevel、属性名は要確認)。BSFのPCF Bindingで扱うBinding Levelは NF Instance と NF Set で、SBI全般で定義される NF Service Instance / NF Service Set Level とは扱う範囲が異なる点に注意してください(TS 23.503 §6.1.1.2.2、要確認)。

2つのHeader — 3gpp-Sbi-Binding と 3gpp-Sbi-Routing-Binding

Header 誰が付ける 目的 規定
3gpp-Sbi-Binding Producer(Resource作成の応答等)/Consumer(Notification・Callbackの受け先を示すRequest等)。付与は任意(may) Binding情報を相手に伝える(「今後このリソースへはこの範囲に送ってほしい」) TS 29.500 §5.2.3.2.6
3gpp-Sbi-Routing-Binding Consumer(主にSCP経由の後続Request) このRequestをどこへ運ぶか をSCPに示す(SCPのRouting・Reselectionに使う) TS 29.500 §5.2.3.2.5
3gpp-Sbi-Target-apiRoot Consumer(Indirect Communication) SCP経由のとき、Consumerが選んだ宛先Producerの apiRoot を示す(SCP→SCPのホップで使われる場合もある) TS 29.500 §5.2.3.2.4(要確認)
3gpp-Sbi-Producer-Id 応答に付く(SCPが付けるかProducer自身が付けるか、いつ付くかは要確認) 実際にRequestを処理したProducerのNF Instance ID等を示す(再選択時に重要) TS 29.500 §5.2.3.2.8(枝番・付与主体・付与条件は要確認)
PCF ── 201 Created + 3gpp-Sbi-Binding(任意)──> Consumer(NEF / SMF)
                                                    │ Binding を保存
                                                    ▼ 後続Request
Consumer ── 3gpp-Sbi-Routing-Binding ──> SCP ──> PCF(Binding範囲内のInstance)

主なパラメータ(TS 29.500 §5.2.3.2.6 のABNF)

パラメータ 意味
bl Binding Level(NF Instance / NF Set / NF Service Instance / NF Service Set)。値の綴り(例: nfinstance / nfset / nfserviceinstance / nfserviceset)はABNFで要確認
nfinst NF Instance ID
nfset NF Set ID
nfservinst NF Service Instance ID(要確認)
nfserviceset NF Service Set ID(綴りは nfservset の可能性もあり要確認)
servname Service名(Notification / Callbackの受け先を示す場合等。要確認)
scope Binding Indicationの適用範囲(例: 他Serviceへの適用、Callback向け等。値は要確認)
backupamfinst AMFが受け手の場合のBackup AMF Instance(要確認)

上記は主要パラメータの抜粋で、Releaseによりパラメータが追加されています(網羅ではありません)。

以下はHeaderの読み方を示す模式例で、IDは説明用です。全てのRequestにこのHeaderが必須という意味ではありません。

:method: POST
:path: /npcf-policyauthorization/v1/app-sessions
3gpp-Sbi-Routing-Binding: bl=nfset; nfset=set1.pcfset.5gc.mnc001.mcc001
  • bl=nfset:Binding Level は NF Set(綴りは要確認)
  • nfset=...:対象NF Set ID
  • :path:呼び出すAPI Resource

NF Instance Levelの模式例:

3gpp-Sbi-Routing-Binding: bl=nfinstance; nfinst=54804518-4191-46b3-955c-ac631f953ed8; nfset=set1.pcfset.5gc.mnc001.mcc001

nfinst は特定NF Instanceを表します。nfset が併記されていても、bl=nfinstance が bl=nfset として扱われるわけではありません(上の warning 参照)。


How — PCF障害時の振る舞い

Call Flow(SCP経由・概念図)

sequenceDiagram
    participant SMF
    participant NEF
    participant BSF
    participant SCP
    participant PCFA as PCF-A
    participant PCFB as PCF-B
    SMF->>SCP: Npcf_SMPolicyControl_Create
    SCP->>PCFA: 転送(PCF Set内のInstanceを選択)
    PCFA-->>SMF: 201 Created + Location + 3gpp-Sbi-Binding(任意、経由はSCP)
    PCFA->>BSF: Nbsf_Management_Register(pcfId, pcfSetId, bindLevel)
    NEF->>BSF: Nbsf_Management_Discovery(UE IP, DNN, S-NSSAI)
    BSF-->>NEF: 200 OK(PCF Binding)
    NEF->>SCP: Npcf_PolicyAuthorization_Create + 3gpp-Sbi-Routing-Binding
    SCP-xPCFA: 転送失敗(PCF-A障害)
    Note over SCP: Binding Levelが許す範囲で
同一PCF Set内の代替を再選択 SCP->>PCFB: 転送 Note over PCFB: 共有ContextからSM Policy Associationを参照 PCFB-->>NEF: 201 Created + Location + 3gpp-Sbi-Binding(任意、経由はSCP) PCFB->>SMF: Npcf_SMPolicyControl_UpdateNotify(PCC Rule更新) opt 必要なシナリオ PCFB->>BSF: Nbsf_Management_Update(新Instanceを反映) end

これは理解用の概念図です。実際の再選択条件、エラー応答、リトライ回数、Contextの引継ぎ方法は、仕様のProcedureと実装構成に依存します。SCPを経由するだけで全ての障害が自動回復するわけではありません。

Signal Flow

# 方向 メッセージ(HTTP) Binding関連の要点 規定
1 SMF → PCF Npcf_SMPolicyControl_Create(POST /npcf-smpolicycontrol/v1/sm-policies) SMFが自身のNotification受け先のBindingを 3gpp-Sbi-Binding で示し得る TS 29.512、TS 29.500 §5.2.3.2.6
2 PCF → SMF 201 Created(Location、3gpp-Sbi-Binding) PCFは作成したSM Policyリソースの Binding を返し得る(任意) TS 29.500 §6.12(枝番は要確認)
3 PCF → BSF Nbsf_Management_Register(POST /nbsf-management/v1/pcfBindings) PCF Instance ID / PCF Set ID / Binding Level を登録 TS 29.521 §4.2.2(要確認)
4 NEF → BSF Nbsf_Management_Discovery(GET /nbsf-management/v1/pcfBindings?...) 担当PCF・PCF Set・Binding Level を取得 TS 29.521 §4.2.4(枝番は要確認)
5 NEF → SCP → PCF Npcf_PolicyAuthorization_Create(POST /npcf-policyauthorization/v1/app-sessions) 3gpp-Sbi-Routing-Binding / 3gpp-Sbi-Target-apiRoot でSCPに宛先範囲を示す TS 29.514、TS 29.500 §5.2.3.2.5
6 SCP → PCF-B (再選択して転送) Binding Levelが許す範囲内で再選択。応答で処理Producerが分かる場合がある(Producer-Id / Location。付与条件は要確認) TS 23.501 §6.3.1.0、TS 29.500 §6.10(要確認)
7 PCF → SMF Npcf_SMPolicyControl_UpdateNotify(POST {notificationUri}/update) SMFのBinding(手順1)に基づき通知を届ける TS 29.512
8 PCF → BSF Nbsf_Management_Update(PATCH) 新しいPCF Instanceが選ばれた場合などにBindingを更新 TS 23.503 §6.1.1.2.2 / TS 29.521 §4.2.5(要確認)

再選択したら、リソースURIはどうなるか

ProducerのリソースURIは {apiRoot}/{apiName}/{apiVersion}/{resource} の形をしています(TS 29.501 §4.4.1、要確認)。NF Set内での再選択では、apiRoot部分を代替Instanceのものに置き換え、残りのパスは維持して 後続Requestを送る、という考え方が取られます(TS 29.500 §6.12、枝番・条件は要確認)。代替Instanceがリソースを引き継いだ場合、応答の Location や新しい 3gpp-Sbi-Binding で更新後の宛先が返ることがあり、Consumerは以後その値を使うことが想定されます(Consumer側の規定は TS 29.500 §6.12 で要確認)。

旧: https://pcf-a.example/npcf-policyauthorization/v1/app-sessions/as-123
新: https://pcf-b.example/npcf-policyauthorization/v1/app-sessions/as-123
    └ apiRoot だけが変わる ┘└──────── パスは同じ ────────────────┘

このとき、パスが同じでもPCF-BがContext(as-123)を引けなければ処理は失敗します。ここが「ルーティングの切替」と「Contextの継続」が別問題である理由です。

PCF障害時の切替を3段階で考える

flowchart TD
    F["PCF-A障害"] --> A1
    subgraph SA["段階A: 発見・ルーティング(3GPPが規定)"]
        A1["Binding Levelと併記範囲を確認"] --> A2["NRFで同一PCF SetのInstanceを確認
NF Status / Service / Endpoint"] A2 --> A3["Consumer または SCPが
許容範囲内で再選択"] end A3 --> B1 subgraph SB["段階B: Context継続性(主に実装依存)"] B1["代替PCFがSM Policy Association
AF Session / PCC Ruleを参照できるか"] end B1 --> C1 subgraph SC["段階C: Binding整合性"] C1["BSFのPCF Binding"] --- C2["SBIのBinding Indication"] C2 --- C3["実際に処理したPCF Instance"] end

段階A:経路を切り替えられるか?

PCF-A障害
   ↓
Binding Level確認(NF Set Level か、NF Instance Level + NF Set併記か)
   ↓
NRFのNF Profile(nfSetIdList / Status / Service / Endpoint)を確認
   ↓
Consumer(Direct)または SCP(Indirect)が許容範囲内で再選択

段階B:代替PCFがContextを扱えるか?

PCF-B
 ├─ SM Policy Association のContextを参照できる?
 ├─ AF Session と PCC Rule の関連を維持できる?
 └─ Context共有(UDSF / 実装固有DB)や同期は完了している?

NF Setの定義自体が「同じContextデータにアクセスできる」ことを前提としています(TS 23.501 §5.21.3)。Contextを置く場所として UDSF(非構造化データの格納)を使う構成もありますが、具体的な共有・複製・復旧方式はVendor実装依存 です。

段階C:Bindingが整合しているか?

BSF の PCF Binding
       ↕
SBI の Binding Indication(Consumerが保存した値 / Routing-Binding)
       ↕
実際にRequestを処理したPCF Instance(3gpp-Sbi-Producer-Id / Location)

新しいPCF Instanceが選ばれた場合、BSFのBindingを Nbsf_Management_Update で更新する必要があるシナリオがあります(TS 23.503 §6.1.1.2.2、適用条件は要確認)。Binding Level が NF Set でBSFに登録されていれば、Set内のInstance交代ではBSF側の記載と矛盾しにくくなりますが、NF Instance Levelで登録されている場合は古いInstanceを指したままになり得ます。

Direct Communication の場合

SCPを使わない Direct Communication(Model A / B)では、Consumer自身 がBinding Indicationと NRF から得たNF Set情報を使って再選択し得ます。Indirect Communication(Model C / D)では、Consumerが付けた 3gpp-Sbi-Routing-Binding 等を見て SCP が再選択を行えます。どちらの場合も、Binding Level(と併記された範囲)が判断の基準になります(TS 23.501 §6.3.1.0)。通信モデルの全体像は SBI Communication Model A–D で扱います。


Packet Analysis (Wireshark)

Display Filter

フィルタ 用途
http2 SBI全体(TLSの場合は復号が必要)
http2.header.name contains "3gpp-sbi" 3GPP独自Header(Binding / Routing-Binding / Target-apiRoot / Producer-Id 等)を含むフレーム
http2.header.value contains "pcfset" PCF Set IDを含むHeader
http2.header.name == "location" Resource作成応答の Location(どのInstanceがリソースを作ったか)
http2.headers.path contains "npcf-policyauthorization" Npcf_PolicyAuthorization
http2.headers.path contains "nbsf-management" Nbsf_Management(Register / Discovery / Update)
http2.headers.path contains "nnrf-disc" NRF Discovery(代替候補の検索)

フィールド名(http2.header.name / http2.headers.path 等)はWiresharkの版で異なる場合があります(要確認)。HTTP/2ではHeader名は小文字で運ばれます(RFC 9113 §8.2.1)。

Decode例(概念表現)

以下は表示構造の概念表現で、値は架空例です(要キャプチャ)。

HyperText Transfer Protocol 2
 └─ Stream: HEADERS, Stream ID: 7
     ├─ :method: POST
     ├─ :scheme: https
     ├─ :authority: scp.example:443
     ├─ :path: /npcf-policyauthorization/v1/app-sessions
     ├─ 3gpp-sbi-target-apiroot: https://pcf-a.example:443
     └─ 3gpp-sbi-routing-binding: bl=nfset; nfset=set1.pcfset.5gc.mnc001.mcc001

HyperText Transfer Protocol 2
 └─ Stream: HEADERS, Stream ID: 7
     ├─ :status: 201
     ├─ location: https://pcf-b.example:443/npcf-policyauthorization/v1/app-sessions/as-123
     ├─ 3gpp-sbi-binding: bl=nfset; nfset=set1.pcfset.5gc.mnc001.mcc001
     └─ 3gpp-sbi-producer-id: <PCF-B の NF Instance ID>

この例では、Consumerは PCF-A 宛て(Target-apiRoot)に送ったが、応答のLocationとProducer-IdはPCF-B を示しています。SCPがNF Set内で再選択したことを示す典型的な読み筋です(Producer-Id を付けるのがSCPかProducerか、付与条件は要確認)。

見る順番

flowchart LR
    A["① BSF Discovery応答
pcfId / pcfSetId / bindLevel"] --> B["② 後続Request Header
Routing-Binding / Target-apiRoot"] B --> C["③ SCPの転送先
SCP⇔PCF区間のキャプチャ"] C --> D["④ 応答
status / Location / Binding / Producer-Id"] D --> E["⑤ 後続処理
UpdateNotify / PFCP"]
  • 同じ Stream ID でRequestと応答を対応付けます(Stream IDはHTTP/2コネクション単位なので、Consumer⇔SCP区間とSCP⇔PCF区間では別のIDになります)。
  • TLSで暗号化されている場合は、復号可能なTrace(鍵ログ等)や各NFのSBIログを使います。HeaderがCapture上で見えないだけで、送信されていないとは断定しません。
  • HTTP/2 / ProblemDetails の読み方は N7 SBI解析、全体のTipsは パケット解析のTips を参照してください。

Trouble Shooting

ケース1:PCF-AがDown、PCF-BはHealthyなのにRequestが失敗する

調査の順序:

  1. BSF Discovery応答の PCF Instance ID / PCF Set ID / Binding Level を確認する
  2. 後続Requestの 3gpp-Sbi-Routing-Binding(bl と併記範囲)を確認する
  3. NRFに PCF-B が 同じNF Set ID で登録され、必要なNF Serviceを提供しているか確認する
  4. SCP(またはDirectならConsumer)が 仕様上許される範囲で PCF-Bを再選択したか確認する
  5. PCF-Bが対象Contextを持つか、参照可能か確認する

ケース2:BSFはPCF-Bを返すのに、RequestはPCF-Aへ向かう

BSF応答・後続Request Header・SCPの実際の転送先 の3点を比較します。NEF/AFは、PolicyAuthorization Create 以降は 作成時に保存したリソースURIとBinding Indication で後続Requestを送るため、BSFの最新値を毎回参照するとは限りません。継続中のService Sessionでは Producer から受け取った Binding Indication が優先される場合があります(TS 23.501 §6.3.1.0、適用条件は要確認)。BSFの値だけを見て誤転送と断定しない ことが重要です。

ケース3:HTTP/2は成功したのにPolicyが反映されない

NEF → SCP → PCF-B   HTTP 201/204 成功
                    │
                    ├─ PCF-B は正しい Policy Association Context に紐付けた?
                    ├─ PCF-B → SMF の UpdateNotify は送られた?宛先SMFは正しい?
                    └─ SMF → UPF の PFCP Session Modification は成功した?

HTTP成功とPolicyのEnd-to-End成功は別 です。SMF側もNF Setで冗長化されている場合、PCFからの通知はSMFが示したBinding(手順1)に従って届けられます。PFCP側は PFCP Rules を参照してください。

症状別一覧

症状 想定原因 確認ポイント ログ Packet 解決方法
PCF-A障害後、Requestが失敗し続ける(SCPから5xx) Binding LevelがNF InstanceでNF Set併記なし/SCPがRouting-Bindingを受け取っていない 3gpp-Sbi-Routing-Binding の bl と nfset の有無 SCPのRouting・Reselectionログ http2.header.name contains "3gpp-sbi" PCF側でNF Set Level(またはNF Set併記)のBindingを返す設定を確認(実装依存)
SCPが代替候補を見つけられない PCF-BがNRFに別のNF Set IDで登録/必要なServiceが未登録 NRFのNF Profile(nfSetIdList、NFService) NRF・PCF-Bの登録ログ http2.headers.path contains "nnrf" NF Set ID・Service登録を統一
PCF-Bへ転送されるが404等で失敗 PCF-BがContextを参照できない(共有・複製の遅延や未構成) PCF-BのContext参照結果、共有DB / UDSFの状態 PCF-Bのアプリログ http2(:status、ProblemDetails) Context共有方式を確認(実装依存・要検証)
SCPが504を返す 宛先Producerへ到達できない/再選択前に障害検出・リトライ待ちでタイムアウト SCPの応答(例: 504 + cause TARGET_NF_NOT_REACHABLE。応答待ちのタイムアウトを示す TIMED_OUT_REQUEST との使い分けを含め TS 29.500 §5.2.7.2 で要確認) SCPログ http2.headers.status == "504"(フィールド名は要確認) 障害検出時間・Retry設定を見直す(実装依存)
BSFはPCF-Bなのに後続RequestがPCF-Aへ Consumerが保存した旧リソースURI / Binding を使用 後続Requestの :authority / 3gpp-Sbi-Target-apiRoot NEF/AFのログ http2 応答の Location / 3gpp-Sbi-Binding による更新をConsumerが反映しているか確認
AFの別要求がBSF経由で古いPCFへ BSFのBindingが未更新(NF Instance Level登録) BSFの pcfId / bindLevel BSF・PCFログ http2.headers.path contains "nbsf-management" Nbsf_Management_Update の発行条件を確認
HTTPは成功だがQoSが変わらない UpdateNotify未送信・宛先誤り/PFCP失敗 PCF→SMF通知、SMF→UPFのPFCP PCF・SMF・UPFログ http2 / pfcp 下流の手続きを順に確認

3GPP仕様とVendor実装の境界

3GPPが定義するもの Vendor / 運用設計で確認するもの
NF Set / NF Service Set の定義と、Set内での相互代替の考え方 Pod・VM配置、Site間冗長、どのInstanceを同じSetに入れるか
Binding Levelと Selection / Reselection の原則(TS 23.501 §6.3.1.0) SCPの実際のRouting Policy、Retry回数、障害検出時間
3gpp-Sbi-Binding / 3gpp-Sbi-Routing-Binding / 3gpp-Sbi-Target-apiRoot 等のHeader Proxy / Service Mesh / LBでのHeaderの透過・書き換え
BSFの Register / Discovery / Update と PcfBinding の内容 Binding DBの複製、Cacheの保持時間
NF Set内のInstanceが同じContextにアクセスできるという前提 PCF Contextの具体的な共有・同期・復旧方式(UDSF利用の有無を含む)

NF Setを設定しただけで無停止切替は保証されない

Contextの可用性、対象API、障害検出時間、Retry / Reselection、後続のPolicy処理(UpdateNotify、PFCP)まで含めて検証が必要です。OSS実装(Open5GS / free5GC 等)が本章のHeaderや再選択をどこまでサポートするかも版依存であり、要確認 です。


EPC(4G)との比較

項目 4G EPC 5GC
同一セッションを同じPolicy決定点へ揃える仕組み DRA(Diameter Routing Agent)によるPCRF binding(TS 29.213、節番号は要確認) BSF(PCF Binding)+ SBIのBinding Indication
冗長化の単位 PCRF(ベンダー独自のクラスタ構成が中心)、MMEはMME Pool NF Set / NF Service Set(全NF共通の概念)。AMFはAMF Set
後続メッセージの宛先固定 Diameter Session-Id と Destination-Host Location(リソースURI)+ 3gpp-Sbi-Binding
中継ノードでの再ルーティング DRA / DEA SCP(Indirect Communication)

4GではPCRFの冗長化の多くがベンダー独自のクラスタ設計に委ねられていましたが、5GではNF Set・Binding Level・SCPによる再選択の 原則 が3GPPで規定された点が大きな違いです(ただしContext共有の方式は依然として実装依存)。


3GPP Specification

仕様 節 内容
TS 23.501 §5.21.3 NF Set / NF Service Set による信頼性サポート(NF Set・NF Service Setの定義。枝番 §5.21.3.1〜§5.21.3.4 の割当ては要確認)
TS 23.501 §6.3.1.0 Binding, Selection, Reselection の原則(Binding Level の表)
TS 23.501 Annex E NF / NF Service間通信のCommunication Model(Direct / Indirect、Model A〜D)
TS 23.503 §6.1.1.2.2 BSFとPCF Binding(新PCF Instance選択時のUpdateを含む。枝番は要確認)
TS 23.501 §6.3.7.1 PCF discovery and selection(要確認)
TS 23.501 §3.1 / §5.21.2 NF Set・NF Service Set等の定義(§3.1は要確認) / AMF Management(AMF固有の扱い)
TS 23.003 §28.12 / §28.13 NF Set ID / NF Service Set ID の形式(§28.13は要確認)
TS 29.500 §5.2.3.2.5 3gpp-Sbi-Routing-Binding
TS 29.500 §5.2.3.2.6 3gpp-Sbi-Binding
TS 29.500 §5.2.3.2.4 / §5.2.3.2.8 3gpp-Sbi-Target-apiRoot / 3gpp-Sbi-Producer-Id(枝番は要確認)
TS 29.500 §5.2.7.2 ProblemDetailsのcause(TARGET_NF_NOT_REACHABLE 等。要確認)
TS 29.500 §6.10 Indirect Communication のサポート(要確認)
TS 29.500 §6.12 NF Service Resource に対するBinding(枝番は要確認)
TS 29.501 §4.4.1 リソースURIの構造(apiRoot / apiName / apiVersion。要確認)
TS 29.510 §要確認 NRFのNFProfile / NFService(nfSetIdList / nfServiceSetIdList)
TS 29.521 §4.2.2 / §4.2.4 / §4.2.5 Nbsf_Management Register / Discovery / Update(枝番は要確認)
TS 29.512 / TS 29.514 — Npcf_SMPolicyControl / Npcf_PolicyAuthorization
RFC 9113 §8.2.1 HTTP/2のHeaderフィールド名(小文字)

Summary

  • NF Instance は個別のNF実体、NF Set は同じContextにアクセスできる相互代替可能なNF Instance群。NF Service Set は1つのNF Instance内のService Instance群
  • Binding Level は後続Requestの結び付け範囲であり、障害時の Reselection の許容範囲 を判断する出発点。NF Instance Level+NF Set併記は、通常は指定Instance、利用不可時のみSet内で再選択
  • BSFのPCF Binding は主に「最初に担当PCFを見つける」ための台帳、SBIのBinding Indication(3gpp-Sbi-Binding / 3gpp-Sbi-Routing-Binding)は「後続Requestをどこへ運ぶか」のHeader。Producerによる 3gpp-Sbi-Binding の付与は任意
  • SCP は Indirect Communication で Routing-Binding を見て再選択できるが、それだけで全障害が回復するわけではない
  • PCF障害時は ①発見・ルーティング ②Context継続性 ③Binding整合性 の3段階で切り分ける。Routingの切替とPolicy Contextの継続は別問題

理解度チェック

Q1. PCF-AとPCF-Bが同一PCF Setに属し、NEFのRequestに 3gpp-Sbi-Routing-Binding: bl=nfset; nfset=set1.pcfset.5gc.mnc001.mcc001 が付いています。PCF-Aが障害になったときの説明として最も適切なのはどれか。A. NF Set Levelなので、PCF-BがContextを持たなくても必ず処理を継続できる / B. NF Set LevelはPCF-Aだけへの固定を意味するため、PCF-Bへの再選択は禁止される / C. NF Set Levelなので条件を満たせば同一Set内のPCF-Bを再選択できるが、既存Policy Contextを扱えることも必要である / D. このHeaderはN3 GTP-UのQFIを指定する

正解: C。NF Set Level の Binding では、同一NF Set内の別Instanceを選択・再選択できます(TS 23.501 §6.3.1.0)。ただし再選択はルーティングの話であり、PCF-Bが既存のPolicy Association Contextにアクセスできなければ処理は継続できません(A は誤り)。B は NF Instance Level の説明と混同しています。D はUプレーンのQoS Flow識別子とSBI Headerを混同しています。

Q2. BSFのPCF Bindingと、SBIの 3gpp-Sbi-Binding Headerの違いを、作成者と用途の観点で説明してください。

BSFのPCF Bindingは、PCFが Nbsf_Management_Register で登録する「UE / PDU Session ↔ 担当PCF」の対応で、NEF / AF などが 最初に 担当PCFを見つけるために Discovery します。3gpp-Sbi-Binding は、Producer(例: リソースを作成したPCF)や、Notificationの受け先を示すConsumer(例: SMF)が付けるHTTP Headerで、特定リソースに関する後続Request・通知をどの範囲のInstanceへ送るべきか を相手に伝えます。前者はBSFというNFの中の台帳、後者はメッセージに載る情報です。

Q3. Routing-Bindingが bl=nfinstance; nfinst=(PCF-AのID); nfset=(PCF SetのID) です。PCF-Aが正常なとき、SCPはSet内の負荷が軽いPCF-Bへ転送してよいですか。

いいえ。NF Instance Level では、通常は指定されたNF Instance(PCF-A)へ送ります。併記されたNF Setは、指定Instanceが利用できない場合の Reselection の範囲を示すものであり、bl=nfset に読み替えて負荷分散してよいという意味ではありません(TS 23.501 §6.3.1.0。表の細部は原文で要確認)。

Q4. SCP経由のRequestで、ConsumerはTarget-apiRootにPCF-Aを指定しましたが、201応答のLocationはPCF-Bのホストを指していました。何が起きたと考えられ、Consumerは以後どうすべきですか。

PCF-Aが利用できず、SCPがBindingの許容範囲内で同一PCF Set内のPCF-Bを再選択した可能性があります(3gpp-Sbi-Producer-Id があれば処理したProducerを確認できます。付与条件は要確認)。Consumerは、応答で返された Location や(付いていれば)新しい 3gpp-Sbi-Binding を保存し、以後の後続Requestはそれに基づいて送ることが想定されます。同時に、BSFのBindingが新Instanceと矛盾していないか(必要なら Nbsf_Management_Update が行われたか)も確認します。


Next Step