さくらのIoT

前回のコラムでは、モデムトレース有効化設定について解説いたしました。このコラムでは、実際にセキュアモバイルコネクトでLTE接続/通信し、正常に接続できたときのモデムトレースを取得してみます。また、その際の通信対向のサーバ側でもパケットダンプを行ってモデムとの通信を確認します。
LTEの接続、用意したサーバにプライベートネットワーク経由でpingを送信、LTEの切断といった流れで行い、その様子を、モデムのトレース、ATコマンドのUARTログ、サーバ側のtcpdumpログとして残し、データが確認できるのかを検証します。

トレース取得準備手順

nRF9160DKの用意

はじめに、登録したマルチカードSIMをnanoSIMサイズに切り出します。
次に、nRF9160DKボードの電源スイッチがOFFになっているのを確認し、nRF9160DKボードに挿入します。その後、nRF9160DKボードをmicroUSBケーブルでPCに接続します。

①nRF Connect for Desktopを起動します。
Cellular Monitorを「Open」ボタンで起動します。

Trace方法のHow toが表示されますが、今回はこの方法は使わないので「close」ボタンで閉じます。

②nRF9160DKのスイッチをONにします。
正常に認識されている場合「SELECT DEVICE」をクリックすると、シリアルポートを持つデバイス一覧が表示され、その中にnRF9160DKが出てきますので、「nRF9160DK」を選択します。
(PCの持つシリアルポート次第でUnknownが表示されたりされなかったりしますが影響ありません。)

③nRF9160DKが認識され左側にメニューが出てきますので、左下の 「TRACE OPTIONS」「ADVANCED OPTIONS」を開きます。

④Cellular Monitorアプリの左欄の設定を下記の様に設定します。

  • TRACE OPTIONS → Modem trace database:Autoselect
    モデムのファームウェアバージョンごとの違いを自動検出して対応します。
  • TRACE OPTIONS → Modem trace serial port
    トレースの有効化設定で控えておいたトレース用のシリアルポートを選択します。
  • TRACE OPTIONS →Reset device on start:OFF
    Resetを頻繁に繰り返すと接続処理が不可能になるモードにnRF9160が入るため、OFFが無難です。
    ※ 参考:https://docs.nordicsemi.com/bundle/nwp_042/page/WP/nwp_042/intro.html
  • TRACE OPTIONS →Opne in Wireshark:ON
    トレースの取得開始とともにWiresharkを立ち上げて取得データを表示します。
  • TRACE OPTIONS →Save trace file to disk:ON
    基本は上記の自動で開くWiresharkに表示されるデータで十分ですが、この設定で自動で保存されるこのファイルからWireshark用データをあとから生成したりできます。
  • ADVANCED OPTIONS→Terminal serial port:Deselect
    Cellular MonitorアプリにATコマンド用ポートを使った制御は行わせません。
    (注:Deselectにしておかないと対象のシリアルポート占有されてしまいTera Termでそのシリアルポートがオープンできなくなります)

この状況で、左上の「Start」をクリックすると下図のようなダイアログがでますので閉じないでください。同時にWiresharkが自動で起動してきます。

このダイアログでは、トレース用シリアルポートにモデムから流れてくるデータを見ながら、モデムのファームウェアバージョンを自動で確認しています。
正しくトレース用シリアルポートが選択されていてファームウェアバージョンが確認できると自動でダイアログが閉じます。
この後のATコマンドでの接続操作でモデムを動作させてデータをトレース用シリアルポートにデータを流します。(ファームウェアバージョンが確認で次第自動で閉じるのでモデムを動作させる前に閉じることもあります。)

また、Wiresharkは下図のようにキャプチャ中の状態になります。
表示列やウインドウ構成は普段のWiresharkの使い方により異なることがあります。

⑤続いてTera Termを起動し「ファイル」-「新しい接続」を選択します。

シリアルを選択し、ポートからトレースの有効化設定で控えておいたシリアルポートを選択し、「OK」をクリックします。

⑥シリアルポートの設定を行います。
「設定」-「シリアルポート」を選択します。

下記の様にシリアルポートを設定し、「現在の接続を再設定」をクリックします。

  • スピード:115200
  • データ:8bit
  • パリティ:none
  • ストップビット:1bit
  • フロー制御:none

⑦続いて端末の設定を行います。
「設定」-「端末」を選択します。

⑧下記の様に端末を設定し、「OK」をクリックします。

  • 改行コード受信:AUTO
  • 改行コード送信:CR+LF
  • ローカルエコー:ON

⑨この状態でキーボードから、「AT」と入力を追加しEnterキーで何度かおくります。

すると、ATコマンド送受に伴うトレースデータがCellular Monitorアプリに到着し、ファームウェアバージョンが解析され自動でダイアログが閉じます。
(注:ファームウェアバージョンが確認で次第自動で閉じるのでATコマンド送信前に閉じることもあります。)

ここで念のため、Tera termのログ機能でATコマンドのやり取りも保存しておくのを推奨します。
「ファイル」-「ログ」を選択します。

Wiresharkのデータとの突合せ用に、オプションのタイムスタンプをONにしておきます。
保存フォルダ、ファイル名を指定し、「保存」でログの取得を開始します。
ここでは「nRF9160_modem_trace_ATcommand.log」として保存します。

サーバー側パケットダンプ準備

①コントロールパネルからサーバ詳細画面のNICタブから共有セグメント(インターネット)につながっている0番のNICのIPv4アドレスをコピーします。

Tera Termを追加で新たに立ち上げ、新しい接続を選択します。

②新しい接続のダイアログで以下の様に設定し、「OK」をクリックします。

  • 新しい接続のダイアログで以下を選択します
  • ホスト:サーバのIPv4アドレス
  • サービス:SSH

問題がなければ「続行」をクリックします。

SSHの認証画面に移行します。

③以下の様に設定し、問題がなければ「OK」をクリック

  • ユーザ名:ubuntu
  • パスフレーズ:公開鍵作成時に設定したパスフレーズ
  • 秘密鍵:公開鍵作成時にダウンロードしたファイルを設定

正しく入力されていればログインに成功します。

④tcpdumpコマンドで、プライベートネットワーク側のインターフェイスens4のパケットを全て取得しファイルに保存します。
下記コマンドを実行します。

ubuntu@sv-113600160225:~$ sudo tcpdump -I ens4 -w modem_trace_test.pcap

下記のように取得待機状態になっているのを確認します。

tcpdump: listening on ens4, link-type EN10MB (Ethernet), capture size 262144 bytes

以上でトレースの取得準備が整った状態になります。

ATコマンドによるnRF9160DKのLTE接続/通信

実施にnRF9160DKにATコマンドを送り込んで、LTEの接続/通信を行ってみます。
大まかな内容は以下の通りです。

  • セキュアモバイルコネクトで接続するためのモデムの設定
  • 接続に使用するキャリアの選択
  • 接続開始
  • サーバへPING送出
  • 切断

さっそく、以下手順でnRF9160DKに指示を送ります。

  • Tera TermでATコマンド用シリアルポートを開きます。
  • 下記のコマンドを1行ずつTera Termに入力します。
  • nRF9160DKへ指示します

注意点としては、一つのコマンド行を送信した後は、必ず次の行はnRF9160DKからOKの応答が返ってきてから送るようにしてください。
また、「AT+CFUN=1」、「AT#XPING=“192.168.0.2”,45,5000,5,1000」の後はOK応答後も多少処理が続きますので、ターミナル出力が少し落ち着くまで数秒時間空けるとよいと思います。

AT%HWVERSION
AT+CGMR
AT+CFUN=0
AT+CGDCONT=0,”IP”,”sakura”
AT+CEREG=5
AT%XSYSTEMMODE=1,0,0,0
AT+COPS=1,2,”44020”
AT+CFUN=1
AT+COPS?
AT+CGATT?
AT%XCBAND
AT+CESQ
AT%NBRGRSRP
AT#XPING="192.168.0.2",45,5000,5,1000
AT+CGATT=0
AT

ATコマンド用シリアルポートを開いたTera Termへはこのような感じになります。

AT
 
OK
AT%HWVERSION
 
%HWVERSION: nRF9160 SICA B1A
 
OK
AT+CGMR
 
mfw_nrf9160_1.3.5
 
OK
AT+CFUN=0
 
OK
AT+CGDCONT=0,”IP”,”sakura”
 
OK
AT+CEREG=5
 
OK
AT%XSYSTEMMODE=1,0,0,0
 
OK
AT+COPS=1,2,”44020”
 
OK
AT+CFUN=1
 
OK
 
+CEREG: 0
 
+CEREG: 2,"1810","01835B02",7
 
+CEREG: 5,"1810","01835B02",7,,,"11100000","11100000"
AT+COPS?
 
+COPS: 1,2,"44020",7
 
OK
AT+CGATT?
 
+CGATT: 1
 
OK
AT%XCBAND
 
%XCBAND: 1
 
OK
AT+CESQ
 
+CESQ: 99,99,255,255,14,44
 
OK
AT%NBRGRSRP
 
%NBRGRSRP: 174,475,49,325,475,49,113,475,37
 
OK
AT#XPING="192.168.0.2",45,5000,5,1000
 
OK
#XPING: 0.236 seconds
#XPING: 0.145 seconds
#XPING: 0.173 seconds
#XPING: 0.172 seconds
#XPING: 0.120 seconds
#XPING: average 0.169 seconds
AT+CGATT=0
 
OK
 
+CEREG: 0
AT
 
OK

Wiresharkにモデムトレースが生成され行が追加されていきます。

最後までコマンド送り終わりましたら続いてトレース等のデータの取得停止、保存を行います。

トレース等のデータの取得停止、保存

モデムトレースの停止と保存

①Cellular Monitorアプリの左上の「Stop」をクリックします。

取得動作が停止します。

②続いてWiresharkの「ファイル」-「保存」でデータをファイルに保存します。

ここでは、「nRF9160_modem_trace_test.pcapng」として保存します。

これでモデムのトレースデータは確保できました。

ATコマンドでの操作ログの停止、保存

ATコマンド用シリアルポートを開いたTera Termの「ファイル」-「ログを終了」でログ機能を停止します。

ログ開始時に指定したファイルができていることを確認します。

サーバー側パケットダンプ停止、保存

①サーバに接続したTera Termで、パケットダンプを停止します。

②「Ctrl+c」のキー操作でtcpdumpを停止させます。

③続いてこの取得データをPC側のWiresharkで確認できるようにPCに持ってきます。
Tera Termの「ファイル」-「ディレクトリ変更」を選択します。

④ファイル保存
保存したい先のフォルダを選択します。

注:デフォルトの現在フォルダは、受信データの書き込みができないようなので違う場所へ変更を推奨します。

⑤続いてszコマンドを用いてデータをzmodemで送信を行います。
下記の様にコマンドを入力し、待機状態になったらTera Term側での操作を行います。

ubuntu@sv-113600160225:~$ sz modem_trace_test.pcap
**B00000000000000

Tera termの「ファイル」-「転送」-「ZMODEM」-「受信」を選択します。
時間を空けすぎると待機がタイムアウトしますので手早く行います。

ZMODEM受信ダイアログが出てきて、しばらく待つと転送が完了し、ダイアログが自動で閉じます。

「ディレクトリ変更」で指定したフォルダにファイルが転送されていることを確認します。

取得できたデータ一覧

今回の作業で、下記の3つのデータが取得できたかと思います。

  1. nRF9160_modem_trace_test.pcapng
    Celluer Monitor + Wiresharkで取得したモデムのトレースデータ
  2. modem_trace_test.pcap
    サーバで取得したパケットダンプデータ
  3. nRF9160_modem_trace_ATcommand.log
    ATコマンドでのモデムの操作ログ

取得データの簡単な確認

モデムトレースの確認

まず、モデムのトレースデータ、nRF9160_modem_trace_test.pcapngをWiresharkで開きます。

沢山の行があり、全部は説明しきれませんが、
代表的になところをピックアップしてどのように動作が確認できるか見ていきます。

■16行目
モデムがATコマンド「AT+CFUN=1」を受け取っているのが確認できます。このコマンドは無線の機能を有効にしてLTEで接続を開始を指示しています。
この行以降で、モデムが動き出し、Protocol列にLTEやNASといったLTE通信にかかわる記録が発生しているのが確認できるかと思います。

■23行目
Attach requestという要求をモデムが出していることが確認できます。
こちらの要求の概要としては、モデムがキャリアの基地局経由でさくらインターネットのモバイル設備に対してLTE接続の許可を要求している、というメッセージになります。
この行以降で、認証情報などをキャリアの基地局経由でさくらインターネットのモバイル設備としばらくやり取りしているのが確認できます。

■46行目
Attach acceptというメッセージが確認できます。
モデムのAttach requestという要求に対して、最終的にキャリアの基地局経由でさくらインターネットのモバイル設備からの接続許可のメッセージが届いたものになります。
LTEとしては、これで接続が確立されており、以降モデムはIP通信を行うことができます。

■77行目
モデムがIP通信としてPINGをサーバに向けて送信

■78行目
サーバからPINGの応答が届いているのを確認できます。

■92行目
モデムがATコマンド「AT+CGATT=0」を受け取っているのが確認できます。
このコマンドはLTE接続の切断を指示しています。

■93行目
LTE接続の切断指示により、モデムがDetach requestという要求をモデムが出していることが確認できます。
この要求の概要としては、モデムがキャリアの基地局経由でさくらインターネットのモバイル設備に対してLTE接続の切断の許可を要求している、というメッセージになります。

■99行目
Detach acceptというメッセージが確認できます。
モデムのDetach requestという要求に対して、最終的にキャリアの基地局経由でさくらインターネットのモバイル設備から切断の許可のメッセージが届いたものになります。
LTEとしては、これで接続が切断されます。

サーバのキャプチャデータの確認

サーバのキャプチャデータ、modem_trace_test.pcapをWiresharkで開きます。

モデムからのPINGが到着し、それに対して応答を返しているのが確認できます。

モデムの操作ログの確認

ATコマンド用シリアルポートのログ、nRF9160_modem_trace_ATcommand.logをテキストエディタで開きます。

送信したATコマンドや、それに対する応答などが確認できます。
タイムスタンプも確認できますので、モデムやサーバのデータと突き合わせて、どのコマンド発行時になにがおきたか、を追うことができます。

おわりに

今回のコラムでは、正常に起動した場合の検証なので、役に立たないように見受けられると思いますが、発生している問題の原因の特定するためのヒントが得られることが多いのです。
また、別のコラムで、もう少し詳しくトレースの説明や、異常時の時にどうなるかをいくつか実例用意して説明していこうかと思っております。
また今回の内容は、どちらというと、モデムデバイス側の設定や操作によるもので、さくら側で個別にサポートはできない範囲であることが多いですが、トレースによる問題解析を専門で行っている業者さんもおられますので、難解な問題の場合は調査発注等検討されるのをお勧めいたします。
また、今回はnRF9160で説明しましたが、これ以外のモデムの場合でも、ほとんどの場合トレースの取得が可能です。(NDAの締結が必要な場合があります)
大きな問題にぶつかった際にはこのようなトレースの取得ができないかモデムベンダーに相談してみてください。
最後に、参考としてこちらで取得したデータを添付しておきます。今回の資料が皆様のIoTシステムの開発の参考になればと思います。次のコラムではこの添付データを使ってもう少し詳細な読み方を案内できればと考えています。

構成・執筆・編集
DX事業部

IoTコラムでは、さくらのIoTに関係するビジネス向けの内容や身近な例、通信技術の説明や当社エンジニアが取り組んだ開発サンプルなどを掲載しています。

2024年3月公開