前回はうさちゃんRabbit4000上のftpクライアントとラズパイ4上のftpサーバ間でファイルの転送ができるようになりました。今回は前回のftp接続の様子をラズパイ4上のwiresharkで観察してみたいと思います。前々回のDNSのようにUSPのパケット一発というわけにはいきませぬ。裏じゃいろいろやってるftp?
※「うさちゃんと一緒」投稿順 Index はこちら
※Rabbitシリーズのマニュアルは、販売元のDigi社のページからダウンロードできます。
※実験にはRabbit4000搭載のRCM4010モジュールを使用しています。ソフトウエアはDynamic C 10.72でコンパイルしています。
※うさちゃんに対向するFTPサーバには、Raspberry Pi 4 model B(Raspberry Pi OS 64bit bullseye)にインストールしたvsftpdを使用しています。
ftpプロトコル
昔はブラウザでもftpサーバを開くことができ、ファイルの一覧を見ることもファイルをダウンロードすることもできた記憶があります。そういえば、この頃は開けないかも、と思っていたら、ブラウザ側でftpのサポートをやめていたのね。知らんけど。
ftpは古い古いプロトコルで年寄的にはいまだに「代表的な」ファイル転送プロトコルです。しかし、セキュリティ的には問題大ありなので代替プロトコルに置き換わってるみたいです。まあ、いまだにうさちゃん相手に ftp で練習しているんだけれども。
Wiresharkのフローグラフ機能を使ってみる
さて、前々回あたりのDNSクエリのようにUDPで1パケットを投げつけあえば完了のような単純な通信とくらべると ftp はTCPなので多数のパケットが行きかいます。今回は前回に引き続き、たった8バイトのテキストファイル1つを転送しているのですが、行きかうパケットを数えてみたら合計40パケットありました。
毎度おなじみのwiresharkの以下の画面で丁寧にパケットを拾っていけばその全貌が明らかになる、とはいうものの、忘却力の年寄は数個前のパケットの内容も忘れてしまうっと。
そこで今回使ってみたのが、Wiresharkのフローグラフ機能です。以下のように「統計」メニューから「フローグラフ」を開けば使えます。
FTPのパケットはTCPに載っているので、まずTCPで3ウエイ・ハンドシェイクして通信を確立せにゃならず、TCPの通信が確立したならば、FTPサーバ(この場合はvsFTPd)が「リクエストを受け付けます」とメッセージを送り、うさちゃん側からユーザ名やらパスワードやらを提示して確認をとり、転送したいファイル名を提示してなどとやり取りが続くようです。その様子が以下に。
ここでftpの制御用コネクションは以下の間のやりとりです。
-
- うさちゃん、192.168.2.59 ポート6278
- ラズパイ4(vsFTPd)、 192.168.2.126 ポート21
しかし、ftpの場合、制御用のコネクション以外に、データ転送用のコネクションは別に張られます。上記のやりとりの後に、以下のフローグラフではオレンジ色になっている部分が、データ転送用コネクションです。
-
- うさちゃん、192.168.2.59 ポート6279
- ラズパイ4(vsFTPd)、 192.168.2.126 ポート22551
主要なパケットの中身を覗いてみる
上のフローグラフで、ずいぶん沢山やりとりしているのね、ということは分かりました。どの辺で何をやっているのかもなんとなく雰囲気つかめてきたので、主要なパケットの中身を覗いてみることにします。
まずは肝心要のファイル本体が転送されているパケットに迫ります。以下のようです。
上記のように abcdefg\n とたった8バイトが転送の中身です。これだけのことに大変だな~
さて皆さんご存じのとおり、ftp にはアクティブモードとパッシブモードがあります。アクティブモードだとクライアント側が待ち受けているポートにサーバ側から接続します。このモードはNATとかファイアウオールとかいろいろあり。うさちゃんはというと、パッシブモードでお願いするようです。ま、これが普通のモードですかね。そのパケットが以下に。
うさちゃんからのリクエストに応えてラズパイ4機側から、データ転送用のポート番号を教えてくれているパケットが以下に。データ転送には上の方のポート番号を使うのね。
なお、ftpデータ転送にも複数モードあり、今回転送対象のファイルはアスキーテキストファイルです。でも ASCIIモードは使わず、バイナリだと。ここでも、やっぱりバイナリモードが普通でしょうかね。勝手にいろいろ変換とかされたくないし。
40パケットの主要なやつだけだけれども、「だいたい」分かった?ホントか?