コンテンツにスキップ

PDR / PDI / F-TEID / SDF Filter / Precedence — UPFはパケットをどう判定するか

難易度: 上級(マニアック) / 想定学習時間: 30分 / 前提: PFCP と PDR / FAR / QER / URR, PDU Session Establishment 深掘り / 主役: SMF, UPF, gNB / 主Interface: N4, N3, N6

学習目標

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

  • PDR と PDI の関係(PDIは「どのPacketをこのPDRに当てるか」というMatch条件の束)を説明できる
  • PDI の主要IE(Source Interface / Local F-TEID / UE IP Address / Network Instance / SDF Filter / Application ID / QFI)の意味を説明できる
  • UL(Access側、F-TEID でMatch)と DL(Core側、UE IP Address + SDF Filter でMatch)の判定キーが違う理由を説明できる
  • CHOOSE(CH)フラグ でUPFにTEIDを割り当てさせたとき、実際の値をどのメッセージで確認するかを説明できる
  • UL と DL で TEID を割り当てた主体が違う(受信側が割り当てる)ことを説明し、N2・N4・N3 の値を突き合わせられる
  • Precedence の値と PDR 選択の関係を説明し、「特定アプリだけ意図したPDRに当たらない」事象を切り分けられる

前提知識

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

前章では「PDR が どのPacketか を決め、FAR / QER / URR が どう扱うか を決める」という全体像を学びました。この章では、FAR / QER / URR の中身には深入りせず、PDR の中にある PDI(Packet Detection Information)が、何をキーに、どの順で、Packetを PDR に当てるのか を IE レベルで掘り下げます。


Why — 同じUPFに届くPacketを「誰の、どのTraffic」と見分ける必要がある

1台のUPFには、何万ものUE・PDU Session・QoS Flow のPacketが混ざって届きます。UPFは1つ1つのPacketについて、

① どの PFCP Session(≒どのUEのどのPDU Session)のPacketか
② その Session の中の、どの PDR に当たるか(どのTrafficとして扱うか)

を決めてから、FAR / QER / URR を適用します(TS 29.244 §5.2.1、要確認)。この「当てる」ための条件を書いたものが PDI です。

PDI の書き方を誤ると、FAR がどれだけ正しくても、Packet は 意図しない PDR に当たる か どの PDR にも当たらない ことになります。「PFCP は Request accepted なのに通信できない」問題の多くは、ここで起きます。

例え話: UPFは大きな物流センターの「仕分け口」です。PDI は仕分け口に貼られた 受付条件の札(どの搬入口から来たか・どの伝票番号か・宛名は誰か・品目は何か)で、Precedence は どの札を先に照合するかの順番 です。札の条件が1文字違うだけで、荷物は別のレーンへ流れるか、どこにも受け付けられずに止まります。


What — PDR と PDI の関係

PDR の中で PDI が占める位置

Create PDR
├─ PDR ID                       ← Session内でPDRを識別する番号(TEIDではない)
├─ Precedence                   ← 複数PDRがMatchしたときの優先度
├─ PDI(Packet Detection Information)   ← ★この章の主役:Match条件の束
│   ├─ Source Interface         (必須)
│   ├─ Local F-TEID             (任意)
│   ├─ Network Instance         (任意)
│   ├─ UE IP Address            (任意、複数可)
│   ├─ SDF Filter               (任意、複数可)
│   ├─ Application ID           (任意)
│   ├─ QFI                      (任意、複数可)
│   └─ Source Interface Type ほか(任意)
├─ Outer Header Removal         ← Match後に外側ヘッダを外すか
└─ FAR ID / QER ID / URR ID     ← Match後の処理(前章の範囲)

Create PDR と PDI の IE 構成は TS 29.244 §7.5.2.2(Table 7.5.2.2-1 / Table 7.5.2.2-2、表番号は要確認)で定義されています。上は主要IEの抜粋で、Ethernet PDU Session 用の Ethernet Packet Filter、Framed-Route、IP Multicast 関連など、Release で追加された IE は省略しています。5GS 側から見た PDR の属性は TS 23.501 §5.8.2.11.3 にも整理されています(枝番は要確認)。

PDR と PDI を混同しない

PDR は「Match条件 + Match後に何を参照するか」をまとめたルール全体、PDI はその中の「Match条件」部分だけです。Wireshark で Create PDR を開いたときも、PDI は1つの入れ子IEとして表示されます。

Match の基本ルール — 「違う種類は AND、同じ種類は OR」

TS 29.244 §5.2.1(要確認)は、Packet が PDR に Match する条件をおおむね次のように定めています。

規則 意味
種類の違う Match field はすべて一致する必要がある Source Interface かつ UE IP Address かつ SDF Filter …
PDI に含まれない Match field は「何でも一致」とみなす SDF Filter が無ければ、そのUE IP宛ての全Trafficに当たる
同じ種類のIEが複数あるときは、どれか1つ一致すればよい SDF Filter #1 または SDF Filter #2
Mask(Prefix 等)付きのときは Mask のビットだけ比較する IPv6 Prefix など
PDI
├─ Source Interface = Core          ┐
├─ UE IP Address = 10.45.0.3 (dst)  ├─ AND
└─ SDF Filter                       ┘
    ├─ #1 TCP 443  ┐
    └─ #2 UDP 443  ┘─ OR
→ 「Core側から来た、10.45.0.3 宛ての、TCP 443 または UDP 443」に Match

What — PDI を構成する主要IE

IE 何を表すか 典型的な使い方 規定
Source Interface Packet が UPF の どちら側から入ってきたか UL = Access、DL = Core TS 29.244 §8.2.2
Local F-TEID UPF側の GTP-U 受信端点(IP + TEID) UL(N3)や N9 の受信で Match TS 29.244 §8.2.3
Network Instance どのネットワーク(DNN / VRF 等)の Packet か N3用・N6用ネットワークの区別 TS 29.244 §8.2.4
UE IP Address UE の IP アドレス(Source か Destination か をフラグで示す) DL では宛先、UL では送信元 TS 29.244 §8.2.62(要確認)
SDF Filter 5-tuple 等による Traffic の細分類 特定サーバ・ポート宛てを別PDRへ TS 29.244 §8.2.5
Application ID UPF に事前定義された アプリ検出ルール の識別子 URL・ドメイン等によるアプリ単位の分類 TS 29.244 §8.2.6
QFI GTP-U の PDU Session Container に載る QoS Flow 識別子 UL で QoS Flow ごとに PDR を分ける TS 29.244 §8.2.89(要確認)

Source Interface — どちら側から来たか

Source Interface は PDI の中で 必須 の IE です(TS 29.244 §7.5.2.2、要確認)。主な値は次のとおりです(TS 29.244 §8.2.2)。

値 名前 5GC での典型
0 Access N3(gNB から)、PSA が I-UPF から N9 で受ける UL
1 Core N6(DN から)、I-UPF が PSA から N9 で受ける DL
2 SGi-LAN / N6-LAN Service Function Chaining 用の LAN 側
3 CP-function SMF から転送されてくる Packet(SMF バッファリング時の DL 等)
4 5G VN Internal 5G LAN(5G VN)グループ内通信(Rel-16〜、要確認)
                    UPF
               ┌──────────┐
gNB ── N3 ───► │ Access   │
               │          │
               │     Core │ ◄─── N6 ── DN
               └──────────┘

Source Interface は物理ポートではない

Source Interface は「論理的にどちら側から来たか」です。UPF のどの物理ポート・VLAN・VRF を Access / Core に対応させるかは 実装・構成依存 で、Network Instance と組み合わせて使われることが多くあります。より詳細なインタフェース種別(N3 / N9 / N6 等)を示す Source Interface Type(3GPP Interface Type IE)も任意で付けられます(TS 29.244 §8.2.118、要確認)。

Local F-TEID — UPF の「受信用」トンネル端点

F-TEID(Fully Qualified TEID) は、TEID + IPv4 / IPv6 アドレス の組で GTP-U トンネル端点を表します(TS 29.244 §8.2.3)。PDI の中の Local F-TEID は、UPF 自身が受信する端点 です。

F-TEID IE(概念)
├─ Flags: V4 / V6 / CH (CHOOSE) / CHID (CHOOSE ID)
│          CH=1 のときも V4 / V6 で割り当てさせるアドレス種別を示す
├─ TEID          (CH=0 のとき)
├─ IPv4 / IPv6   (CH=0 のとき)
└─ Choose ID     (CHID=1 のとき。CHID は CH=1 と併用)

UL の G-PDU は次の構造で UPF に届くため、外側の宛先IP と TEID だけで「どの Session のどのトンネルか」を一意に引けます。

Outer IP (dst = UPF N3 IP 198.51.100.20)
└─ UDP (dst 2152)
    └─ GTP-U (TEID = 0x00000101)          ← Local F-TEID と照合
        ├─ PDU Session Container (QFI=1)  ← PDI の QFI と照合(あれば)
        └─ Inner IP (src = UE IP 10.45.0.3)

UE IP Address — S/D フラグで「送信元か宛先か」を区別する

UE IP Address IE には S/D フラグ があり、PDI 内では 0 = Source(送信元)/ 1 = Destination(宛先) を表します(TS 29.244 §8.2.62、要確認)。

方向 UE IP の位置 S/D
DL(DN → UE) Inner IP の 宛先 Destination
UL(UE → DN) Inner IP の 送信元 Source

DL PDR では UE IP Address が主たる判定キーです。UL PDR でも、F-TEID に加えて UE IP Address(Source)を入れておき、なりすまし送信元を弾く構成がとれます(入れるかどうかは SMF実装依存)。IPv6 では /64 などの Prefix で表現されます。UPF が UE IP を割り当てる構成では、CHV4 / CHV6 フラグで UPF に選ばせることもできます(同節、要確認)。

Network Instance — どのネットワークの Packet か

Network Instance は、UPF 内で特定のネットワーク(例: DNN ごとの網、N3 用の網)を識別する値で、Domain Name や APN / DNN 形式で符号化され得ます(TS 29.244 §8.2.4)。どの値をどの VRF / ルーティングテーブルに対応付けるかは オペレータ設定・実装依存 です(5GS での使い方は TS 23.501 §5.6.12、要確認)。

QFI — UL の QoS Flow を分ける

UL の G-PDU には、gNB が PDU Session Container 拡張ヘッダで QFI を載せます(TS 38.415 §5.5.2.2、TS 29.281 §5.2.2.7、要確認)。同じ N3 トンネル(同じ Local F-TEID)上で複数の QoS Flow を運ぶため、UL PDR を QFI ごと に分けると、QoS Flow 単位で別の QER / URR を当てられます。QoS Flow の意味そのものは 次章 で扱います。


What — SDF Filter と Application ID

SDF Filter — 5-tuple で Traffic を分ける

SDF(Service Data Flow)Filter は、IP ヘッダ・トランスポートヘッダの値で Traffic を細分類する IE です(TS 29.244 §8.2.5)。

SDF Filter IE(概念)
├─ Flags: FD / TTC / SPI / FL / BID
├─ Flow Description       ← FD=1。IPFilterRule 形式の文字列
├─ ToS Traffic Class      ← TTC=1。IPv4 ToS / IPv6 Traffic Class
├─ Security Parameter Index ← SPI=1。IPsec SPI
├─ Flow Label             ← FL=1。IPv6 Flow Label
└─ SDF Filter ID          ← BID=1 のとき(双方向 Filter を ID で参照)

中心となる Flow Description は、Diameter の IPFilterRule 形式(RFC 6733 §4.3.1、要確認)を 3GPP が制約付きで使うもので、TS 29.244 §8.2.5 は TS 29.212 §5.4.2(Flow-Description AVP)の規定を参照しています(要確認)。

permit out 6 from 203.0.113.10 443 to 10.45.0.3
  │      │  │      │            │      └─ UE 側アドレス
  │      │  │      │            └─ 相手側ポート
  │      │  │      └─ 相手側(Remote)アドレス
  │      │  └─ Protocol 番号(6 = TCP、17 = UDP)
  │      └─ 方向
  └─ Action(3GPP では permit のみ)
5-tuple 例
Source IP / Port 203.0.113.10 / 443
Destination IP / Port 10.45.0.3 / 任意
Protocol 6(TCP)

Flow Description の向き(from / to)は要確認

Flow Description の in / out、from / to を UL / DL の PDR でどう解釈するか(Remote 側と UE 側のどちらを from に書くか)は、TS 29.212 §5.4.2 と TS 29.244 §8.2.5 の注記に従います(要確認)。実装によって UL PDR 側で送信元・宛先を入れ替えて設定するものがあるため、Trace で読むときは UE IP がどちらに書かれているか を必ず確認してください。

SDF Filter の元になるのは、多くの場合 PCF から SMF へ渡される PCC Rule の SDF template(Flow Information)です(TS 23.503 §6.3.1、要確認)。PCC Rule と PCF の詳細は PCF / SM Policy Association / PCC Rule で扱います。

Application ID — 5-tuple で書けない分類

Application ID は、UPF に 事前定義されたアプリ検出フィルタ を参照する識別子です(TS 29.244 §8.2.6)。その中身(PFD: Packet Flow Description。URL・ドメイン名・5-tuple 等)は、UPF に事前設定するか、SMF が PFCP の PFD Management 手続きで UPF に配る方式があります(TS 29.244 §6.2.5 / §7.4.3、要確認)。SMF に PFD を渡す元は NEF(PFDF)で、Nnef_PFDManagement サービスが使われます(TS 29.551、節番号は要確認)。どこまで深くPacketを検査して判定するか(DPI の範囲)は 実装依存 です。


What — Precedence

小さい値が優先

同じ Packet に複数の PDR が Match し得るため、PDR には Precedence があります。Precedence は Unsigned32 の値で、値が小さいほど優先度が高い と定義されています(TS 29.244 §8.2.11)。UPF は Session 内の PDR を 優先度の高い順に照合し、最初に Match した1つだけを選ぶ(以降の照合は行わない)と定められています(TS 29.244 §5.2.1、要確認)。

DL Packet: dst=10.45.0.3, src=203.0.113.10, TCP src port 443

PDR #3  Precedence=100  UE IP=10.45.0.3 + SDF(TCP 443 from 203.0.113.10) → match ← 選ばれる
PDR #2  Precedence=255  UE IP=10.45.0.3(SDF無し=全Traffic)             → (照合されない)

General と Specific の並べ方

Precedence 小 ─────────────────────────────── Precedence 大
  Specific(SDF Filter / Application ID 付き)   General(UE IP のみ、Catch-all)

具体的な条件の PDR ほど小さい値 にしないと、General な PDR が先に当たり、Specific な PDR には永遠に到達しません。PCC Rule にも Precedence があり、SMF はそれを基に PDR の Precedence を決めます(TS 23.503 §6.3.1、要確認)。実際の番号の振り方(例: Default QoS Flow 用 Catch-all を大きい値にする)は SMF実装・運用依存 です。

どの PDR にも Match しない Packet

Session は特定できたが、その Session のどの PDR にも当たらない Packet は、通常は破棄されます(扱いは実装依存/要確認)。一方、TEID 自体が UPF にとって未知の G-PDU は Session を特定できず、Error Indication の対象になります(TS 29.281 §7.3.1、要確認)。このため SMF は通常、Session ごとに Catch-all 的な PDR(UL: F-TEID のみ、DL: UE IP のみ)を最も大きい Precedence で用意します。ただしこれは SMF の作り方であり、Catch-all を置くことを仕様が義務づけているかは 要確認 です。


How — UL と DL の判定はこう違う

並べて比較する

項目 UL(UE → DN) DL(DN → UE)
Packet の来方 gNB から N3 の GTP-U DN から N6 の素の IP(PSA UPF・IP 型 PDU Session の場合)
Source Interface Access Core
主な判定キー Local F-TEID(+ QFI、UE IP(Source)、SDF Filter) UE IP Address(Destination)(+ SDF Filter / Application ID)
Match 後の外側ヘッダ Outer Header Removal(PDR 側)で GTP-U/UDP/IP を外す Outer Header Creation(FAR 側)で GTP-U/UDP/IP を付ける
使われる TEID UPF が受信するための TEID(UPF / SMF が割り当て) gNB が受信するための TEID(gNB が割り当て)
flowchart LR
    subgraph UL["UL:Access → Core"]
        A1["G-PDU
dst=UPF N3 IP
TEID=0x00000101"] --> A2{"PDI
Source=Access
Local F-TEID 一致?"} A2 -- "Match" --> A3["Outer Header Removal
GTP-U/UDP/IPv4"] A3 --> A4["FAR: FORW
Destination=Core → N6"] end subgraph DL["DL:Core → Access"] B1["IP Packet
dst=UE IP 10.45.0.3"] --> B2{"PDI
Source=Core
UE IP + SDF 一致?"} B2 -- "Match" --> B3["FAR: FORW
Destination=Access"] B3 --> B4["Outer Header Creation
gNB IP + gNB TEID → N3"] end

DL では、N6 から届いた時点で まだ N3 の TEID は存在しません。だから IP 型 PDU Session の PSA では、DL PDR は TEID ではなく UE IP Address で Match するしかありません(Ethernet 型は MAC アドレス等の Ethernet Packet Filter、Unstructured 型は N6 の PtP tunnelling 等で判定します)。なお、UPF が複数段のとき、I-UPF が PSA から N9 の GTP-U で受ける DL は、Source Interface = Core と Local F-TEID(N9 用) で Match します。

Outer Header Removal — UL の Match 後に外す

Outer Header Removal は PDR に付く IE で、Match した Packet から外側ヘッダを外す指示です(TS 29.244 §8.2.64、要確認)。

値(Description) 外すもの
0 GTP-U/UDP/IPv4
1 GTP-U/UDP/IPv6
6 GTP-U/UDP/IP(IPv4 / IPv6 どちらでも)

(値の一覧と、PDU Session Container 等の拡張ヘッダ削除を指示する GTP-U Extension Header Deletion フィールドの有無は版により異なるため要確認)

PDI での照合は 外す前の Packet(外側 IP・TEID・拡張ヘッダの QFI)と Inner IP の両方を使い、Removal は Match 後 の処理です。

Outer Header Creation — DL は FAR 側で付ける

DL で GTP-U を付ける Outer Header Creation は PDR ではなく FAR の Forwarding Parameters に入ります(TS 29.244 §8.2.56、要確認)。中身と更新タイミングは 前章 を参照してください。本章で押さえるべきは、DL の判定(PDR)と DL の宛先(FAR)は別のIE であり、DL だけ通らないときは両方を見る必要がある点です。


How — TEID は誰が割り当てるのか

受信側が割り当てる

GTP-U の TEID は 受信する側がローカルに割り当て、送信側はその値を使う ものです(TS 29.281 §5.1、要確認)。

UL:gNB ──GTP-U(TEID=0x00000101)──► UPF     0x00000101 は UPF側(UPF または SMF)が割り当てた値
DL:UPF ──GTP-U(TEID=0x12345678)──► gNB     0x12345678 は gNB が割り当てた値

したがって UL の TEID と DL の TEID は別物 で、同じ値である必要も理由もありません。「同じPDU Sessionなのに TEID が2つある」のは正常です。

CHOOSE(CH)フラグ — UPF に割り当てさせる

CN 側(UPF 側)のトンネル情報は、SMF が割り当てる方式と UPF に割り当てさせる方式の両方が規定されています(TS 23.501 §5.8.2.3、要確認)。UPF に割り当てさせる場合、SMF は Create PDR の Local F-TEID に CH=1 を立て、TEID と IP アドレスを入れずに送ります(TS 29.244 §8.2.3)。UPF がこの方式に対応しているかは、UP Function Features の FTUP で示されます(TS 29.244 §8.2.25、要確認)。

sequenceDiagram
    participant SMF
    participant UPF
    participant AMF
    participant gNB
    SMF->>UPF: PFCP Session Establishment Request
Create PDR (PDR ID 1, UL, QFI=1): Local F-TEID CH=1, CHID=1
Create PDR (PDR ID 3, UL, QFI=2): Local F-TEID CH=1, CHID=1 Note over UPF: TEIDとIPを割り当て
同じ CHOOSE ID には同じ F-TEID UPF-->>SMF: PFCP Session Establishment Response
Created PDR (PDR ID 1): F-TEID 198.51.100.20 / 0x00000101
Created PDR (PDR ID 3): F-TEID 198.51.100.20 / 0x00000101 SMF->>AMF: N2 SM 情報(UL NG-U UP TNL Information = 198.51.100.20 / 0x00000101) AMF->>gNB: NGAP PDU Session Resource Setup Request gNB-->>AMF: PDU Session Resource Setup Response
(DL QoS Flow per TNL Information = 192.0.2.10 / 0x12345678) Note over SMF,UPF: AMF経由でSMFへ。SMFは PFCP Session Modification で DL FAR の Outer Header Creation に反映(前章)
  • CH=1 のとき、Request 側には TEID が載っていません。実際の値は Session Establishment Response の Created PDR に入ります(TS 29.244 §7.5.3.2、要確認)。
  • CHOOSE ID(CHID) を使うと、複数の PDR(例: QFI ごとの UL PDR)に 同じ F-TEID を割り当てさせられます。5GC では 1 つの N3 トンネル上に複数の QoS Flow を載せるため、これが重要です(TS 29.244 §8.2.3、要確認)。
  • UPF 側 F-TEID は N2 SM 情報(PDU Session Resource Setup Request Transfer、TS 38.413 §9.3.4.1、要確認)内の UL NG-U UP TNL Information として gNB へ届き、gNB 側 F-TEID は PDU Session Resource Setup Response Transfer(TS 38.413 §9.3.4.2、要確認)内の DL QoS Flow per TNL Information として戻ってきます。流れの全体は PDU Session Establishment 深掘り を参照してください。
  • UPF が TEID をどの範囲から、どのアルゴリズムで払い出すかは 実装依存 です。

PDR ID ≠ TEID ≠ QFI

値 何を識別するか スコープ 誰が決めるか
PDR ID PFCP Session 内の PDR その PFCP Session 内のみ(Rule ID、TS 29.244 §8.2.36、要確認) SMF
TEID GTP-U トンネルの受信端点 受信ノード内 受信側(UL: UPF / SMF、DL: gNB)
QFI PDU Session 内の QoS Flow PDU Session 内 SMF(TS 23.501 §5.7.1.1、要確認)

PDR ID = 1 だからといって N3 で gtp.teid == 1 を探しても見つかりません。PDR ID は N4 の中だけで使う番号で、N3 の Packet には現れません。


Packet Analysis (Wireshark)

Display Filter

フィルタ 用途
pfcp N4 全体
pfcp.msg_type == 50 / == 51 Session Establishment Request / Response(メッセージ種別値は TS 29.244 §7.3、要確認)
pfcp.msg_type == 52 / == 53 Session Modification Request / Response(要確認)
gtp N3 の GTP-U
gtp.teid == 0x00000101 特定トンネル(UL なら UPF 側 TEID)に絞る
ngap gNB / UPF の F-TEID(N2 SM 情報)との突き合わせ用

PFCP の F-TEID・PDR ID・Precedence 等のフィールド名は Wireshark の版で異なるため断定しません(要確認)。GUI で該当フィールドを右クリックし「Apply as Filter」で確認するのが確実です。

Decode例(概念表現)

以下は表示構造の概念表現で、値はドキュメント用アドレスと架空の TEID です(要キャプチャ)。

PFCP Session Establishment Request
├─ Create PDR
│   ├─ PDR ID: 1
│   ├─ Precedence: 255
│   ├─ PDI
│   │   ├─ Source Interface: Access (0)
│   │   ├─ F-TEID: CH=1, CHID=1, Choose ID=1     ← TEIDはまだ無い
│   │   ├─ Network Instance: n3
│   │   ├─ UE IP Address: 10.45.0.3 (S/D=Source)
│   │   └─ QFI: 1
│   ├─ Outer Header Removal: GTP-U/UDP/IPv4
│   └─ FAR ID: 1
├─ Create PDR
│   ├─ PDR ID: 2
│   ├─ Precedence: 255
│   ├─ PDI
│   │   ├─ Source Interface: Core (1)
│   │   ├─ Network Instance: internet
│   │   └─ UE IP Address: 10.45.0.3 (S/D=Destination)
│   └─ FAR ID: 2
└─ Create PDR
    ├─ PDR ID: 4
    ├─ Precedence: 100                            ← 小さい=優先
    ├─ PDI
    │   ├─ Source Interface: Core (1)
    │   ├─ UE IP Address: 10.45.0.3 (S/D=Destination)
    │   └─ SDF Filter: FD=1
    │       └─ Flow Description: permit out 6 from 203.0.113.10 443 to 10.45.0.3
    └─ FAR ID: 2

PFCP Session Establishment Response
├─ Cause: Request accepted
└─ Created PDR
    ├─ PDR ID: 1
    └─ F-TEID: 198.51.100.20 / TEID 0x00000101    ← ここで初めて値が分かる

Network Instance の値(n3 / internet)は運用上の命名例で、実際の値は オペレータ設定依存 です。

見る順番

① PDR ID ............ どのPDRの話か(N4内だけの番号)
② Precedence ........ 他のPDRと比べて先に照合されるか
③ PDI
   ├─ Source Interface → UL(Access)か DL(Core)か
   ├─ Local F-TEID ... CH=1 なら Response の Created PDR を見に行く
   ├─ UE IP Address .. S/D はどちらか
   ├─ SDF Filter / Application ID → General か Specific か
   └─ QFI
④ Outer Header Removal → UL で GTP-U を外す設定があるか
⑤ FAR ID / QER ID / URR ID → Match後どこへつながるか(前章)

最初から全 IE を読むのではなく、「この PDR は何に Match し、Match 後どこへつながるか」 を先に掴みます。

Interface 横断で突き合わせる

値 N4(PFCP) N2(NGAP) N3(GTP-U)
UL:UPF 側 F-TEID Establishment Response の Created PDR Setup Request Transfer の UL NG-U UP TNL Information UL G-PDU の 宛先 IP / TEID
DL:gNB 側 F-TEID Modification Request の Update FAR → Update Forwarding Parameters → Outer Header Creation Setup Response Transfer の DL QoS Flow per TNL Information DL G-PDU の 宛先 IP / TEID
UE IP DL PDR の UE IP Address(Destination) (N1 の PDU Session Establishment Accept の PDU address。TS 24.501 §8.3.2 / §9.11.4.10、要確認) Inner IP の宛先 / 送信元

N2・N4・N3 の3か所で 同じ値が同じ意味で現れているか を表にすると、どこで食い違ったかが一目で分かります。


Trouble Shooting

症状 想定原因 確認ポイント ログ Packet 解決方法
UL が UPF に届くが DN へ出ない UL PDR に Match していない(F-TEID 不一致、QFI 不一致)、UL FAR の宛先誤り、N6 ルーティング ① N3 に G-PDU があるか ② TEID が Created PDR と一致するか ③ Source Interface = Access か ④ PDR → FAR 参照 ⑤ FAR が FORW / Destination = Core か ⑥ N6 経路 UPF のセッション・ドロップ統計(実装依存) gtp / pfcp 不一致箇所の設定を修正
gNB が送る UL に UPF が Error Indication を返す gNB が UPF の知らない TEID 宛てに送っている(Created PDR と N2 の UL NG-U UP TNL Information の不一致、UPF 再起動で Session 消失) Created PDR の F-TEID と N2 SM 情報の値 UPF / SMF ログ gtp(Error Indication、TS 29.281 §7.3.1、要確認) / ngap / pfcp SMF が Response の値を N2 に正しく載せているか確認
DL だけ NG(Ping Reply は UPF まで届く) DL PDR の UE IP 不一致、S/D 誤り、Source Interface 誤り、DL FAR が BUFF / DROP のまま、Outer Header Creation の gNB IP / TEID 誤り DL PDR の PDI → FAR → Outer Header Creation の順 UPF ログ pfcp / ngap / gtp N2 の DL QoS Flow per TNL Information と FAR の値を一致させる
特定アプリだけ意図した QoS / 課金にならない Precedence の逆転(Catch-all の値が Specific より小さい)、SDF Filter の向き・ポート誤り 同一 Session 内の全 PDR の Precedence と SDF Filter SMF ログ pfcp Specific PDR の Precedence を小さくする、Filter を修正
追加した QoS Flow の UL だけ流れない その QFI 用の UL PDR が無い、PDI の QFI と gNB が付ける QFI が不一致 Modification Request の Create PDR(QFI)、UL G-PDU の PDU Session Container の QFI gNB / UPF ログ pfcp / gtp QFI ごとの UL PDR を確認
IPv6 だけ DL が届かない DL PDR の UE IP Address が IPv4 のみ、IPv6 Prefix 長の誤り UE IP Address IE の V4 / V6 フラグと Prefix SMF ログ pfcp Prefix を含めて設定
Session Establishment が Reject される F-TEID の CH=1 を UPF が未サポート(FTUP 無し)、Network Instance を UPF が知らない、必須 IE 不足 Response の Cause と Offending IE、Association Setup の UP Function Features UPF ログ pfcp SMF の F-TEID 割当て方式を UPF 能力に合わせる、Network Instance 設定を揃える(Cause 名は TS 29.244 §8.2.1、要確認)

DL だけ NG のときの順序

DL PDR
 ├─ Source Interface = Core?
 ├─ UE IP Address = 割り当てた UE IP? S/D = Destination?
 └─ Precedence と SDF Filter で、意図した PDR に当たっている?
      ↓
DL FAR(前章)
 ├─ Apply Action = FORW?
 └─ Destination Interface = Access?
      ↓
Outer Header Creation
 ├─ gNB IP = N2 の DL QoS Flow per TNL Information?
 └─ TEID  = 同上?

3GPP仕様とVendor実装の境界

3GPPが定義するもの Vendor / 運用が決めるもの
PDR / PDI の IE 構成(Source Interface、F-TEID、UE IP Address、SDF Filter、Application ID、QFI 等) PDR の検索方式(Hash table、TCAM、DPDK flow、SmartNIC / ASIC への Offload)
Match の意味(種類の違う field は AND、同じ種類は OR、無い field は全一致) UPF の TEID 払い出しアルゴリズム・範囲
Precedence の意味(小さい値が優先、最初に Match した1つを選択) PDR ID・Precedence の番号の振り方、Catch-all PDR の置き方(SMF 実装)
F-TEID の CHOOSE / CHOOSE ID、Created PDR による通知 Network Instance と VRF / ポートの対応付け
Outer Header Removal / Creation の種類 Application ID の検出方式(DPI の深さ)、show pdr / show session 等の CLI

3GPP は「どのようなルールを UPF に与えるか」を定めますが、「UPF の内部でそのルールをどう高速に検索するか」は定めません。


EPC(4G)との比較

項目 4G EPC(CUPS) 5GC
ルール設定 PFCP(Sxa / Sxb、TS 29.244) PFCP(N4、TS 29.244、同一仕様)
UL の判定キー S1-U / S5-U の Bearer ごとの F-TEID N3 の PDU Session ごとの F-TEID + QFI
Traffic の細分類 PCC Rule(PCRF / Gx、TS 23.203 §6.3、要確認)の SDF template → PDR の SDF Filter。UE 側には Bearer 単位の TFT PCC Rule(PCF / N7)の SDF template → PDR の SDF Filter。UE 側には QoS Rule の Packet Filter(TS 24.501 §9.11.4.13、要確認)
QoS の単位 EPS Bearer(Bearer ごとに別トンネル) QoS Flow(1 トンネル内を QFI で区別)
同じ F-TEID を複数 PDR で共有 あり(PGW-U では 1 Bearer の F-TEID に SDF・課金単位ごとの複数 PDR が付く) あり。さらに PDI の QFI で QoS Flow まで分ける(CHOOSE ID で同じ F-TEID を割り当てさせる)

4G では「トンネル = Bearer = QoS」だったため TEID だけで QoS まで決まりましたが、5G では TEID で Session を、QFI で QoS Flow を 見分ける二段構えになりました。UL PDR の PDI に QFI が入るのはそのためです。


3GPP Specification

仕様 節 内容
TS 29.244 §5.2.1 Packet Forwarding Model、PDR の照合規則と Precedence による選択(要確認)
TS 29.244 §6.2.5 / §7.4.3 PFD Management(Application ID 用の PFD 配布。要確認)
TS 29.551 — Nnef_PFDManagement(NEF から SMF への PFD 提供。節番号は要確認)
TS 29.244 §7.3 PFCP メッセージ種別(要確認)
TS 29.244 §7.5.2.2 Create PDR / PDI(Table 7.5.2.2-1 / 7.5.2.2-2、表番号は要確認)
TS 29.244 §7.5.3.2 Created PDR(UPF が割り当てた Local F-TEID 等。要確認)
TS 29.244 §8.2.1 Cause
TS 29.244 §8.2.2 / §8.2.3 / §8.2.4 / §8.2.5 / §8.2.6 Source Interface / F-TEID / Network Instance / SDF Filter / Application ID
TS 29.244 §8.2.11 Precedence
TS 29.244 §8.2.25 / §8.2.36 / §8.2.56 / §8.2.62 / §8.2.64 / §8.2.89 / §8.2.118 UP Function Features / PDR ID / Outer Header Creation / UE IP Address / Outer Header Removal / QFI / 3GPP Interface Type(要確認)
TS 29.281 §5.1 / §5.2.2.7 / §7.3.1 TEID の意味 / PDU Session Container / Error Indication(要確認)
TS 38.415 §5.5.2.2 PDU Session Container(UL の QFI。要確認)
TS 23.501 §5.6.12 Network Instance の使い方(要確認)
TS 23.501 §5.7.1.1 QoS Flow / QFI(要確認)
TS 23.501 §5.8.2.3 CN Tunnel Info の割当て(SMF / UPF。要確認)
TS 23.501 §5.8.2.11.3 PDR の属性(5GS 視点。枝番は要確認)
TS 23.203 §6.3 PCC Rule(EPC比較用。要確認)
TS 23.503 §6.3.1 PCC Rule(SDF template、Precedence。要確認)
TS 29.212 §5.4.2 Flow-Description AVP(Flow Description の形式。要確認)
TS 38.413 §9.3.4.1 / §9.3.4.2 PDU Session Resource Setup Request Transfer(UL NG-U UP TNL Information)/ Response Transfer(DL QoS Flow per TNL Information)(要確認)
TS 24.501 §8.3.2 / §9.11.4.10 / §9.11.4.13 PDU SESSION ESTABLISHMENT ACCEPT / PDU address / QoS rules(要確認)
RFC 6733 §4.3.1 IPFilterRule 形式(要確認)

Summary

  • PDR = Match 条件(PDI)+ Match 後の参照先。PDI は Source Interface(必須)と、F-TEID・UE IP・Network Instance・SDF Filter・Application ID・QFI 等の Match field の束
  • 種類の違う Match field は AND、同じ種類の複数 IE は OR、PDI に無い field は 全一致
  • UL は Access + Local F-TEID(+ QFI)、DL は Core + UE IP Address(Destination)+ SDF Filter。IP 型 PDU Session の PSA では、DL は N6 に届いた時点で TEID が無いから
  • TEID は 受信側が割り当てる。UL の TEID は UPF 側、DL の TEID は gNB が割り当てた値で、両者は別物
  • CH=1 なら Request に TEID は無く、Created PDR で初めて値が分かる。CHOOSE ID で QoS Flow ごとの UL PDR が同じ F-TEID を共有する
  • Precedence は小さい値が優先。Specific な PDR ほど小さい値にしないと、Catch-all に吸われる
  • PDR ID ≠ TEID ≠ QFI。N2・N4・N3 で値を横断的に突き合わせる

理解度チェック

Q1. UPF に PDR ID = 10、PDI = { Source Interface = Access, F-TEID: TEID = 0x00000101 } が設定されており、N3 から TEID = 0x00000101 の GTP-U Packet を受信しました。このPDRの説明として最も適切なのはどれか。A. Core側から到着するDownlink PacketをUE IP Addressで識別するPDRである / B. Access側から到着するUplink GTP-U PacketをF-TEIDによって識別するPDRである / C. AMFがNAS Service Requestを識別するためのRuleである / D. gNBがNGAP Pagingを送信するためのRuleである

正解: B。Source Interface = Access と Local F-TEID の組み合わせは、N3 から GTP-U で届く UL Packet を識別する典型的な UL PDR です(TS 29.244 §8.2.2 / §8.2.3)。A は DL PDR(Source Interface = Core、UE IP Address)の説明です。C・D は NAS / NGAP の話で、PFCP の PDR とは無関係です。

Q2. PFCP Session Establishment Request の Create PDR を見ると、Local F-TEID に TEID が入っておらず CH=1 になっていました。gNB が使うべき UL の TEID はどこで確認しますか。

UPF が割り当てた値は PFCP Session Establishment Response の Created PDR に入っています(TS 29.244 §7.5.3.2、要確認)。その値が N2 SM 情報(PDU Session Resource Setup Request Transfer、TS 38.413 §9.3.4.1、要確認)内の UL NG-U UP TNL Information として gNB へ渡り、N3 の UL G-PDU の宛先 TEID として現れるはずです。3か所の値が一致しているかを確認します。

Q3. ある UE の DL で、PDR #2(Precedence 100、UE IP のみ)と PDR #4(Precedence 200、UE IP + SDF Filter TCP 443)が設定されています。HTTPS の DL を PDR #4 で別 QoS にしたいのに、効いていません。原因と対策は何ですか。

Precedence は値が小さいほど優先され、UPF は最初に Match した PDR だけを選びます(TS 29.244 §8.2.11 / §5.2.1)。HTTPS の Packet は PDR #2 の条件(UE IP のみ)にも当てはまるため、値の小さい PDR #2 が先に Match し、PDR #4 には到達しません。Specific な PDR #4 の Precedence を PDR #2 より小さくする必要があります。

Q4. 「PFCP の Create PDR で PDR ID = 1 だったので、N3 の Capture を gtp.teid == 1 で絞ったが何も出ない」という相談を受けました。何が誤りですか。

PDR ID は PFCP Session 内で PDR を識別する番号で、N3 の Packet には現れません。N3 の TEID は GTP-U トンネルの受信端点を表す別の値です。UL なら PDI の Local F-TEID(CH=1 なら Response の Created PDR)に入っている TEID で絞ります。DL なら TEID は gNB が割り当てた値なので、FAR の Outer Header Creation の TEID で絞ります。


Next Step