この投稿は、私が所属するKDDIテクノロジーで行っているアドベントカレンダーの25日目(最終日)の記事となります。
モバイル通信の第5世代目の通信規格「5G」。対応エリアも広がり、5G端末を使っていれば、アンテナ横の「5G」のマークが点いていることも事も多くなりました。しかし、まだまだ5Gは進化中ですし、その機能を使ったスマートフォンのアプリの進化も継続中です。
今年の私のアトレベントカレンダーでは「5Gのアプリを作ろう」として、次の投稿行ってきました。
- 「5G対応アプリをつくろうZ!」5Gの大容量通信に対応した機能【←3日目】
- 「5G対応アプリをつくろうZ!Ⅱ」5Gの大容量通信対応のアプリの作り方【←9日目】
- 「5G対応アプリをつくろうZ!Ⅲ」5G SAの低遅延・同時多接続アプリを作る?作れる?【←今回!!!】
今回は「5GのアプリつくろうZ」シリーズの第3回目として、2022年現在ほとんど情報が出ていない「5Gの低遅延・多接続アプリの作り方」について、情報を集めてみてみたので、無謀にも紹介してみたいと思います。一部理解のしやすさのため、不確かな網羅性のない表現が使われている箇所についてはご容赦ください。
5Gの特徴と真の5Gにつにいて
5Gの真の力
5Gの特徴は次の3つがあります。
- ① 高速大容量通信(eMBB)
- ② 低遅延通信(URLLC)
- ③ 同時多接続(mMTC)
現在(2022年現在)の多くの環境で、これらのうち5Gの実力値をフルに活かせる特徴は「①高速大容量通信(eMBB)」だけです。②の低遅延通信と③同時多接続については、LTE時代に比べると改善はされているのですが、まだまだ5Gの真の実力ではないのです。むろん、改善だけでもサービス改善に5Gは役立ちますし、実際にありがたいものです。真の5Gの実力値でないにしろ、LTEに比べて改善された実力値だけで行われているサービスも多数あります。
真の5Gは「5G SA」
現在多くの場所で提供されている5G通信システムは、5G NSA方式(ノンスタンドアロン方式)といわれる5G方式であり、上記の①高速大容量通信だけを利用することができます。一方、5G SA方式(スタンドアロン方式)は、いずれの特徴も真の実力値で利用する事ができる方式であり、「真の5G」とも呼ばれます。
この5G NSAと5G SAの違いは何でしょうか?
それを理解するにはモバイルシステムを理解する必要があります。
5Gの基地局とコアネットワークの基礎
基地局
モバイルシステムは「基地局」と「コアネットワーク」の大きく二つから構成されています。
基地局は電波を送受信する設備であり、スマートフォン(移動機、携帯電話)は、電波を用いて基地局と通信を行います。この基地局がLTEの電波を扱う場合は、LTE基地局としてeNB(イーノードビー)と呼ばれます。また5Gの電波は5G-NR(New Radio)と呼ばれ、この5G-NRを扱う基地局の事をgNB(ジーノードビー)と呼ばれます。
スマートフォンを使っていて、画面上部通知領域のアンテナマーク横に表示される「5G」というピクトマークが表示されたときは、この5G-NRの電波をスマートフォンが「つかんでいる」状態となります。
なお、5G-NRで使う電波の周波数は多数ありますが、大きく分類すると「サブシックス(Sub6、日本だとサブロクと呼ばれることも多い)」と「ミリウェーブ(mmWave)」の2つに分類されます。Sub6は比較的低い周波数(6GHzの下という意味で名付けられている)を用い、mmWaveは高い周波数(主に28GHz帯)を用います。
高い周波数の方が一般的に高速通信するための帯域(通信するための周波数の広さ)を確保できるのですが、光に近い直進性の性質があるため、障害物に極端に弱い特徴があります。そのためカバレッジ(電波を受信できる場所の網羅性)を取るためには基地局を多数設置する必要が出てきてしまいます。一方、低い周波数は、少ない基地局でもカバレッジがとりやすいため、一長一短の特徴があります。
5G-NRでは双方の帯域を用いて提供されていますが、Sub6の方が先に広く利用できるようになっており、これに比べてmmWaveは選ばれた地点から順次利用できる場所が広がっています。
コアネットワーク
コアネットワークは電話会社の中の「電話システムのバックエンド」のようなものです(暴言すいません)。つまり、電波から得られた情報を、電話システムの中に取り入れて、それを事業者網というネットワークへ流すまでの役割を果たします。移動する端末のモビリティー管理や、電話会社に加入しているかの加入情報の管理なども、ここで行われています。
このコアネットワークは、基地局と同じように「LTE用」と「5G用」の二つのコアネットワークがあります。LTEのコアネットワークは「EPC」と呼ばれ、5Gのコアネットワークは「5GC」と呼ばれます。EPCも5GCも、データが要求されればそのまま基地局経由でスマートフォンへ流します。
しかし、5GCはサービスタイプとして「低遅延」「同時多接続」または「C-V2X(車両との通信)」などのような通信のサービスタイプを要求してきた場合、それらを提供することができます。5GCは電話会社の中の設備(無線やコア等)を適切なものに切り替えて(正確には、リソースを割り当てて)、その要求を満たせるネットワーク(通信経路)を構成する機能を持っているのからです。
ちなみに、データ通信にて(U-planeのUに限って言うと)この5Gのコアネットワークで用いられる装置をUPF(ユーザパケットファンクション)と呼びます。
SAとNSA
注目すべき点は、基地局とコアネットワークが独立しており、LTEと5Gのいずれに対応するかを、各々の組み合わせで構成できることです。つまり、電波は5G NRを使っているのに、コアネットワークはLTEの拡張されたEPCを使っているケースがあるのです。というか(2022年現在は)、むしろそのケースの方が多いのです。これを「5G NSA方式(ノンスタンドアロン方式)」と呼びます。
5G NSA方式の場合、スマートフォンは5G NRを掴んで「5G」マークが表示しているけど、コアネットワークはLTEのEPCを用いているため、②低遅延通信と③同時他接続の機材の、割り当てができません。そのため、これらの特徴が利用できません。
つまり真の5Gといわれる「5G SA」は、5G NRとともに、この5Gのコアネットワークである「5GC」を利用した、組み合わせ時にのみ実現できるシロモノなのです。
事業者網(DN)
「事業者網」というのは、コアネットワークとインターネットの間にある、移動体通信事業者が提供する独自ネットワークの事です。このネットワークでは、モバイルインターネットサービスが提供されており、フィーチャーフォン時代ではEZweb、iモード、J-SkyWeb(Yahoo!ケータイ)などが、スマートフォン時代ではキャリアメールのサービスなどが、5G NET、spモード、5Gモバイル通信などとして提供されています。
自宅のPCから固定網経由で接続する際に利用するISP(インターネットサービスプロバイダー)相当のネットワークを、移動体通信事業者がスマートフォン向けに提供されていると考えてもらえればよいでしょう。
5Gでは、この事業者網を「データネットワーク(DN)」と呼び、スマートフォンからそのDNへ接続する際は「データネットワーク名(DNN)」を指定します。このDNNとしては、昔から用いられている(GGSNやP-GWの指定に使われていた)APNが用いられます。
ちなにみに業者網は、一つの事業者で複数の事業者網を持つことが一般的です。モバイルインターネットサービス(接続プランや、料金体系)ごとに、各々の事業者網を設けることが多いです。
5G SAの提供状況
5G SAサービスは、法人向けサービスを中心に各社から提供されています。
端末としては5Gの無線ルータを用いて提供するケースが多いようです。個人向けサービスは、NTTドコモから2022年8月に開始されており、オプションとして提供されています(一部の場所と一部の対応スマートフォンで対応)。そのため2022年現在では、5G SA自体は利用可能ではありますが、まだ一般の多くの人が活用する状態までは至っていない状況にあります。
5G SAのアプリの作り方
はじめに
ここでの目的は、5Gの特徴である「②低遅延」と「③同時多接続」を活用したアプリの開発をすることです。しかし、ここまで話題を引っ張っておきながら大変申し訳ないことに、実はまだ開発手法については公開されていない状況です。
そのため以下の記事は、現在調査できる情報(主に下記のGoogleの情報)から、理解できる内容をまとめさせてもらいます。実際に検証した結果ではないため、相違する部分についてはご容赦ください(修正続けるつもりです)。また、標準化の状況についても直接は存じ上げないため、無邪気に書いてしまっている部分については、関係者の皆様には申し訳ありません。
さて、アプリ開発を行うためには、iOSとAndroidの情報が必要となります。
2022年現在、iOSアプリで5G SA対応アプリを開発する手法はまだ未公開です。
一方Androidアプリでは、Android12から一部対応されており、これらの機能を用いて移動体通信事業者での実証検証などが行われています。そのため、移動体通信事業者の5G環境の中で具体的に与えるべき設定値などの開発情報は、まだ一般に公開されていないようです。
Androidと5G SAの関連情報として、公式に公開されているものは次の2点となります。
・「Google、企業向け5Gネットワークスライシング機能を提供」
https://cloud.google.com/blog/ja/topics/telecommunications/5g-network-slicing-with-google-android-enterprise-and-cloud
2021年11月にGoogle Cloud BlogへGoogleにより投稿された記事です。同じGoogleでも、Androidの部門でなくクラウドの部門から公開されているのが興味深い点です。そういう意味でGCPとAndroidという、クラウドとエッヂOSを握っているGoogleだから出せている内容なのかもしれません。
・「5Gネットワークスライシング」 (*1)
https://source.android.com/devices/tech/connect/5g-slicing
こちらはAOSP で取り組んでいることの紹介であり、Androidソースコードで拡張したAPIと、そこで設定すべき値のサンプルが記載されています。ただし、環境が異なる(移動体通信事業者が異なる)と、設定すべき値も変わると想定され個所もあり、あくまでも一般的に設定値として記載されています。
ネットワークスライシング
上記URLのタイトルにも含まれている「ネットワークスライシング」とは、5G SA上で5Gの特徴である「①大容量通信」「②低遅延」と「③同時多接続」を利用するときに使う仕組みです(但し大容量通信だけはNSAでも利用できます)。5G SAだけでなく、このネットワークスライシングも利用できないと、真の5Gアプリを作ることができません。
ネットワークスライシングは、端末から通信を要求されたときに、移動体通信事業者の5Gシステム上を横断的な通信を行うための(gNBから5GCを経てDNに至る)仮想的なネットワークを作成/構成します。これによって、異なるサービス要求条件に応じた、論理的ネットワークを、複数作成することができるようになります。
ネットワークのサービス要求条件は、スライスサービスタイプ(SST)と呼ばれ、次のようなものが利用できると定義されています。まさにこれが真の5Gの特徴となります。
現在は4種ですが、今後拡張が可能となるよう標準化されています。
ネットワークスライシングで定義されているサービスタイプ |
---|
高速・大容量通信 |
多数接続・省電力・低コスト通信用 |
高信頼・低遅延通信用 |
C-V2X |
URSP(端末経路選択ポリシー)
スマートフォンのアプリから、ネットワークスライシングを利用して、目的のスライス(仮想ネットワーク)を使うには、端末経路選択ポリシーと呼ばれるURSP(UE Route Selection Policy)を利用して、通信経路を生成します。
スライスの選択は、端末(アプリ)で定義したURSPのルールを参考にして行われます。ただし、コアネットワーク側の指示(プロビジョニング)により選択されることも規格上定義されており、実際にはどのようになるのかは、移動体通信事業者の運用次第となります。
URSPルールの構成
URSPルールは、次の3つの情報から作り上げられています。
- 「トラフィック記述子(Traffic descriptor)」
- 「トラフィックが選択される優先順位の値(Precedence value of URSP rule)」
- 「トラフィックが選択されたときに適応される、ルート選択記述子(Route Selection Descriptor)」
通信を行う場合はまず、トラフック記述子(Traffic descriptor)に合致する条件かどうかを判別します。もし複数合致した場合は、優先順位の値を見て優先順位の高い方(数値の小さいほう)から、適応するトラフィック記述子(Traffic descriptor)が選ばれます。ここで選択されたトラフィックに対して、ルート選択記述子(Route Selection Descriptor)で書かれている内容を適応させます。これらの具体的な記述方法を一つずつ読み解いてみます。
Traffic descriptor
トラフィック記述子は「Traffic descriptor」を訳したものです。値としては次のように定義します。
「OS Id」+「0x0A」+「OS App Id type」
この、OS Idと、OS App Id typeの値については下記に説明します。なお、この二つの間に挟まっている0x0Aとは、OS App Id typeの長さを指定しています。
OS Id
OS Idとは、スマートフォンで使っているOSのIdです。上記Googleのドキュメントの中では、Android用のOSIdとしては、次の値が定義されています。
ID | Value | 説明 |
---|---|---|
OS Id | 97a498e3-fc92-5c94-8986-0333d06e4e47 | Android用のOSIdは、名前空間ISOOIDと名前「Android」で生成されたバージョン5のUUIDです |
*1からの引用
OS App Id type
OS App Id typeとは、スライスカテゴリーの「ENTERPRISE」といった文字列のバイト表現(16進数表記)で表現します。
スライスカテゴリ | OSAppId | 説明 |
---|---|---|
エンタープライズ | 0x454E5445525052495345 | OSAppIdは、文字列「ENTERPRISE」のバイト配列表現です。 |
エンタープライズ2 | 0x454E544552505249534532 | OSAppIdは、文字列「ENTERPRISE2」のバイト配列表現です。 |
エンタープライズ3 | 0x454E544552505249534533 | OSAppIdは、文字列「ENTERPRISE3」のバイト配列表現です。 |
エンタープライズ4 | 0x454E544552505249534534 | OSAppIdは、文字列「ENTERPRISE4」のバイト配列表現です。 |
エンタープライズ5 | 0x454E544552505249534535 | OSAppIdは、文字列「ENTERPRISE5」のバイト配列表現です。 |
CBS | 0x454E544552505249534535 | OSAppIdは、文字列「CBS」のバイト配列表現です。 |
PRIORITIZE_LATENCY | 0x5052494f524954495a455f4c4154454e4359 | OSAppIdは、文字列「PRIORITIZE_LATENCY」のバイト配列表現です。 |
PRIORITIZE_BANDWIDTH | 0x5052494f524954495a455f42414e445749445448 | OSAppIdは、文字列「PRIORITIZE_BANDWIDTH」のバイト配列表現です。 |
※ *1からの引用
Traffic descriptorの例
「ENTERPRISE」スライスは、次の値を「OS Id + 0A + OS App Id type」として与えます。
0x97A498E3FC925C9489860333D06E4E470A454E5445525052495345
Precedence value of URSP rule
「トラフィックが選択される優先順位の値」とは英語表記(というか3GPP)のPrecedence value of URSP ruleの値です。
URSPルールを選択するときに、Traffic descriptorの条件に当てはまる複数の候補のうち、どの候補から優先的に選択するのかの順番を、この「Precedence value of URSP rule」として記載します。
16進数の値として、0x01から順番に設定します。
Route Selection Descriptor
「ルート選択記述子」とは英語表記のRoute Selection Descriptorを指し、これが適応すべきURSPルールとなります。
つまり、Traffic descriptorの条件によって選択された場合、スライスに割り当てる特徴や接続方法などのURSPルールを、ここの「ルート選択記述子」の中で定義しておきます。また、一つのTraffic descriptorに対して、複数のルート選択記述子を定義することができ、かつ各々に適応する順番(優先順位)を指定できるようになっています。
ルート選択記述子は、3GPP TS24.526 で規定されているような様々な値を利用することができますが、ここでは3種(Precedence、S-NSSAI、DNN)の値だけをを紹介します。
Precedence
優先順位を定義します。値が小さい方が高い優先度で適応されます。
S-NSSAI
S-NSSAI(Single-Network Slice Selection Assistance Information)は、スライスを判別するための識別子として用いられ、5G NRや5GCにスライスを作成する際に参照され、適切なリソースを与えるために使われます。
このS-NSSAIは、前出のサービスタイプ(SST)と、スライス識別子(SD:Slice differentiator)の2つの値を連結して作られます。つまり、5G SAの特徴であるサービスタイプをSST設定すると、それに合致した5G NRと5GCの構成が選択され、目的のネットワーク要求を満たすことができるようになります。
DNN
DNN(Data Network Name)は、接続するネットワークを指定する記述子であり、多くの場合はAPNを指定します。これにより、作成したスライスを流れるデータは、DNNで指定した事業者網や、企業のネットワークと通信されます。つまり、端末としては仮想的にDNのネットワークに含まれるような利用方法が可能になります。
URSPの設定例について
https://source.android.com/docs/core/connect/5g-slicing#example-ursp-rules
こちらのURL先にURSPの設定例が紹介されていますので、こちらで引用させていただきます。
上記の説明を理解することで、ここで設定されている値を理解することができると思います。
Enterprise1
Enterprise1は、Android12以降のAndroidバージョンで利用可能です。
URSP rule #1 (enterprise1) | > | > | > |
---|---|---|---|
Precedence | 1 (0x01) | ||
Traffic descriptor #1 | OS Id + OS App Id type | 0x97A498E3FC925C9489860333D06E4E470A454E5445525052495345 | |
Route selection descriptor #1 | > | > | > |
Precedence | 1 (0x01) | ||
Component #1: | S-NSSAI | SST:XX SD:YYYYYY | |
Component #2: | DNN | enterprise | |
Route selection descriptor #2 | > | > | > |
Precedence | 2 (0x02) | ||
Component #1: | DNN | enterprise |
Enterprise2
Enterprise2は、Android13以降のAndroidバージョンで利用可能です。
URSP rule #2 (enterprise2) | > | > | > |
---|---|---|---|
Precedence | 2 (0x02) | ||
Traffic descriptor #1 | OS Id + OS App Id type | 0x97A498E3FC925C9489860333D06E4E470A454E544552505249534532 | |
Route selection descriptor #1 | > | > | > |
Precedence | 1 (0x01) | ||
Component #1: | S-NSSAI | SST:XX SD:YYYYYY | |
Component #2: | DNN | enterprise2 | |
Route selection descriptor #2 | > | > | > |
Precedence | 2 (0x02) | ||
Component #1: | DNN | enterprise2 |
Enterprise3
Enterprise3は、Android13以降のAndroidバージョンで利用可能です。
URSP rule #3 (enterprise3) | > | > | > |
---|---|---|---|
Precedence | 3 (0x03) | ||
Traffic descriptor #1 | OS Id + OS App Id type | 0x97A498E3FC925C9489860333D06E4E470A454E544552505249534533 | |
Route selection descriptor #1 | > | > | > |
Precedence | 1 (0x01) | ||
Component #1: | S-NSSAI | SST:XX SD:YYYYYY | |
Component #2: | DNN | enterprise3 | |
Route selection descriptor #2 | > | > | > |
Precedence | 2 (0x02) | ||
Component #1: | DNN | enterprise3 |
Enterprise4
Enterprise4は、Android13以降のAndroidバージョンで利用可能です。
URSP rule #4 (enterprise4) | > | > | > |
---|---|---|---|
Precedence | 4 (0x04) | ||
Traffic descriptor #1 | OS Id + OS App Id type | 0x97A498E3FC925C9489860333D06E4E470A454E544552505249534534 | |
Route selection descriptor #1 | > | > | > |
Precedence | 1 (0x01) | ||
Component #1: | S-NSSAI | SST:XX SD:YYYYYY | |
Component #2: | DNN | enterprise4 | |
Route selection descriptor #2 | > | > | > |
Precedence | 2 (0x02) | ||
Component #1: | DNN | enterprise4 |
Enterprise5
Enterprise5は、Android13以降のAndroidバージョンで利用可能です。
URSP rule #5 (enterprise5) | > | > | > |
---|---|---|---|
Precedence | 5 (0x05) | ||
Traffic descriptor #1 | OS Id + OS App Id type | 0x97A498E3FC925C9489860333D06E4E470A454E544552505249534535 | |
Route selection descriptor #1 | > | > | > |
Precedence | 1 (0x01) | ||
Component #1: | S-NSSAI | SST:XX SD:YYYYYY | |
Component #2: | DNN | enterprise5 | |
Route selection descriptor #2 | > | > | > |
Precedence | 2 (0x02) | ||
Component #1: | DNN | enterprise5 |
CBS
CBSは、Android13以降のAndroidバージョンで利用可能です。
URSP rule #6 (CBS) | > | > | > |
---|---|---|---|
Precedence | 6 (0x06) | ||
Traffic descriptor #1 | OS Id + OS App Id type | 0x97A498E3FC925C9489860333D06E4E470A434253 | |
Route selection descriptor #1 | > | > | > |
Precedence | 1 (0x01) | ||
Component #1: | S-NSSAI | SST:XX SD:YYYYYY | |
Component #2: | DNN | cbs | |
Route selection descriptor #2 | > | > | > |
Precedence | 2 (0x02) | ||
Component #1: | DNN | cbs |
Low latency(低遅延)
Low latencyは、Android13以降のAndroidバージョンで利用可能です。
URSP rule #7 (low latency) | > | > | > |
---|---|---|---|
Precedence | 7 (0x07) | ||
Traffic descriptor #1 | OS Id + OS App Id type | 0x97A498E3FC925C9489860333D06E4E470A5052494f524954495a455f4c4154454e4359 | |
Route selection descriptor #1 | > | > | > |
Precedence | 1 (0x01) | ||
Component #1: | S-NSSAI | SST:XX SD:YYYYYY | |
Component #2: | DNN | latency | |
Route selection descriptor #2 | > | > | > |
Precedence | 2 (0x02) | ||
Component #1: | DNN | latency |
High bandwidth
High bandwidthは、Android13以降のAndroidバージョンで利用可能です。
URSP rule #8 (high bandwidth) | > | > | > |
---|---|---|---|
Precedence | 8 (0x08) | ||
Traffic descriptor #1 | OS Id + OS App Id type | 97A498E3FC925C9489860333D06E4E470A5052494f524954495a455f42414e445749445448 | |
Route selection descriptor #1 | > | > | > |
Precedence | 1 (0x01) | ||
Component #1: | S-NSSAI | SST:XX SD:YYYYYY | |
Component #2: | DNN | bandwidth | |
Route selection descriptor #2 | > | > | > |
Precedence | 2 (0x02) | ||
Component #1: | DNN | bandwidth |
Default
URSP rule #9 (default) | > | > | > |
---|---|---|---|
Precedence | 9 (0x09) | ||
Traffic descriptor #1 | |||
Route selection descriptor #1 | > | > | > |
Precedence | 1 (0x01) | ||
Component #1: | S-NSSAI | SST:XX SD:YYYYYY |
低遅延アプリの開発
低遅延アプリを作成するときには、URSP rule #7 (low latency)を用いることとなります。ここではDNNとしてlatencyのネットワークを指定していますが、具体的な値は移動体通信事業者から提供されるか、設定方法が提供されるものと推測されます。
また、STTにはURLLCの値を、androidのURSPを操作するメソッドであるandroid.telephony.data.UrspRuleのAPI を用いて設定する形になるかと思われます。
このようにAndroidのAPIとしては存在しても、移動体通信事業者が提供する5Gサービス上での運用方法に従った値を設定しないと、実際には利用できないものと推測しています。
・・・ん? 同時多接続や、C-V2Xのアプリはどうしたのか?ってですか?
#6のCBSはETWSの話と推測していますし、なぜかここには出てきていません。そのため、SSTにmMTCの値を自分で定義して利用したり、移動体通信事業者が提供する専用のDNに接続して利用するのではないかと思います。どちらにしても、まだAndroid上では具体的になっていないのではないかと(勝手に)推測をしています。
おわりに
今後5G SAの利用が広がり、開発情報も順次公開されてい来るものと思われます。
やがて来る「その日」の為に、5G SAでしか提供できない必然性のあるサービスなどの企画の検討ができていると良いと思います。とはいうものの、言うは易し、正直そのような企画をまとめるのは至難の業です。
しかしながら、このような技術情報をベースに、サービス構想するのは、なによりも私にとっては楽しい時間です。そして、仲間と議論する時間は、この上ない刺激的な瞬間でもあり、モバイルサービスの未来のカケラが、ちょこっと垣間見られる瞬間でもあります。
株式会社KDDIテクノロジーでは、AndroidやiOSのアプリを中心にクラウドを用いた開発や、5G、XR、AIなどの技術を扱う仲閒を積極的に募集しています。ともに開発やPMの仕事をしてみませんか?
興味ある方は是非こちらの採用ページからご相談ください。お待ち申し上げています。
→ https://recruit.kddi-tech.com/