9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

教養としての5GC(free5gc+UERANSIMで学ぶ5Gコアネットワーク)その3

Last updated at Posted at 2021-09-08

前回まではfree5gcをInstallしてコールテストを行い主にRANと5GCの間の通信を見てみました。

今回は5GC内で何が起きているのかを見てみましょう。

#1. 5GC内のプロトコル

第2回でも書きましたが5GC内ではHTTP/2が使われています。以下の図の黄色の部分です。

image.png

5GC内はSBA(Service Based Architecture)という仕様になっていて、従来のEPCとは違って全NFがフルメッシュで通信できるバス型のアーキテクチャになっています。それぞれのNF間はSBI(Service Based Interface)と呼ばれるAPIを使って通信します。テレコムのコアな世界にもようやくAPIが入って来たかと感慨深いものがあります。。

#1.1 プロトコルスタック

5GC内では以下のHTTP/2上のスタックで通信します。Applicationの部分にJSONフォーマットのメッセージを使います。

image.png

引用元:3GPP TS29.500

具体的には以下の様に各NFがProducerやCosumerという役割を担い、Cosumer側がProducer側にWebAPIの各種Requestを送信し、各NFのServiceを利用する事になります。

image.png

引用元:3GPP TS29.501

#2. 5g-trace-visualizer install

それでは各NF間の実際のやり取りを見てみましょう。Wirersharkを使ってもHTTP/2通信は見えるのですが、今回は5g-trace-visualizerという便利なpythonツールがあるので、こちらを使ってみましょう。

Install手順は以下のReadmeに書いてある通りでwireshark/tsharkのほかにplantuml.jarという別のjavaのモジュールが必要です。

image.png

tsharkのパスだけそのままInstallしただけだとうまく動作しないので以下の様にディレクトリを掘ってそこにtsharkをコピーしました。WiresharkPortableとやらをちゃんとInstallすればよいのかもしれませんが、まぁtsharkをaptで入れているんだしという事で。。

q14537@free5gc:~/free5gc/5g-trace-visualizer$ ls -lR wireshark/
wireshark/:
total 4
drwxrwxr-x 3 q14537 q14537 4096 Sep  8 15:36  WiresharkPortable_3.2.3
-rw-rw-r-- 1 q14537 q14537    0 Sep  8 15:35 'WiresharkPortable_x.y.z folders place here'

wireshark/WiresharkPortable_3.2.3:
total 4
drwxrwxr-x 3 q14537 q14537 4096 Sep  8 15:36 App

wireshark/WiresharkPortable_3.2.3/App:
total 4
drwxrwxr-x 2 q14537 q14537 4096 Sep  8 15:36 Wireshark

wireshark/WiresharkPortable_3.2.3/App/Wireshark:
total 312
-rwxr-xr-x 1 q14537 q14537 315560 Sep  8 15:36 tshark

#3. pcapファイルの読み込み

無事Installが終われば以下のコマンドで5g-trace-visualizerにキャプチャしたファイルを処理させます。5GC NF達がそれぞれ通信するので、その通信に使用するポート番号を-http2portsオプションで指定してHTTP/2としてデコードさせます。Wiresharkの”...としてデコード”のオプションでHTTP2と指定してあげてもHTTP/2としてデコード出来たりするのですが、出来ないパケットもあったりします。5g-trace-visualizerならポートをちゃんと指定してあげれば綺麗にデコードしくれます。

5g-trace-visualizer$ python3 trace_visualizer.py -wireshark "3.2.3" -http2ports "80,8080,35170,42632,40798,43088,43108,47154,27017,50818,50826,50840,54138,54852,50900,60194" -limit 200 -simple_diagrams True ../5GC_Registration.pcap

うまく動作すれば*.svgファイルが生成されます。これをChromeなどのブラウザから開いてあげると以下の様なコールフローが出てきます。

image.png

このフローの上の箱たちを見てもらえれば良いと思うのですが、それぞれのNF間で通信がずらーっと出てきます。nnrf-discとか見えているものが各NF達がAPIを通して公開しているサービス名になります。この箱の名前は5g-trace-visualizerがキャプチャファイルの中身から自動で付加してくれる様でとても便利ですね。

各NFで定義されているサービスは以下のサイトで詳細が見えます。

たとえばnnrf-discであれば以下の通りです。

全部を追っていくのはとても大変なのでお任せしますが、前回でもとりあげたPDU Session Establishmentの部分だけ少し詳しく見てみましょう。

#4. AMF<->SMF PDU Session Establisment

1.まずNGAPでPDU Session Establishment RequestをAMFが受けます。
29. AMF->NRFにNSSFはどこかを訪ねます。NRFはDNSみたいな役割なので5GC内のサービスを使いたい場合はまず問い合わせが行きます。今回はスライス情報が欲しいのでNSSFのAPIのURL情報を聞きます。
59. AMFはNRFから教えてもらったNSSFのWebAPIにAMF->NSSFにスライスに関する情報を訪ねます。
112. AMF->SMFにこんな加入者からPDU Session確立したい要求を受けたんだけどIPv4アドレスとかアサインしてくれない?とRequestを送っています。

image.png

ちなみにWiresharkだと以下の様に見えます。Wiresharkだと必要なパラメータだけ詳細展開できるので、特定の部分だけを見たい場合はWiresharkを使ったほうが見やすいと思います。

image.png

以上の様に膨大な情報がやりとりされているので全部を一度に理解する必要はないと思いますが、JSONでテキストなのでデコードしたメッセージを眺めて、このパラメータの意味はなんだろうと調べていくと理解が深まるのではと思います。

#5. 最後に

今回はHTTP/2の部分を少し細かく見てみました。3GPPのコールフローと比較しながら一通りすべてのメッセージのパラメータの展開をして見ていくとより良いと思います。

次回はUERANSIMをInstallしてUE+gNodeBとfree5gcをインテグレーションしてみます。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?