今回は、FTPソフトの裏側を解説しようと思います。
まず、どのFTPソフトもソフト起動時に接続先を選択しますよね。(あらかじめ登録しておいて、自動的に接続してくれる機能もありますが)そこで、FTPソフトが一番最初にやること、それは「接続先に接続する」です。
普段、FTPソフトを起動して接続先に接続するのに、ボタンをクリックするだけでソフトが裏側で接続してくれます。ユーザー(私たち、ソフト利用者のことです)は、ソフトから「接続されました」のメッセージを見る または ルート(利用できるフォルダの一番上位のフォルダ)や指定したフォルダの一覧(中身)が表示されたことで接続されたかどうかを確認します。これをFTPの仕様に従って記述してみると・・・
(Networkに接続してから)
1.サーバーに 「USER」 コマンドを送信する。
2.サーバーから「USER」コマンドの 返信(RESPONSE) を受け取る。
3.サーバーに 「PASS」 コマンドを送信する。
4.サーバーから「PASS」コマンドの 返信(RESPONSE) を受け取る。
「PASS」コマンドの返信(RESPONSE)で「サーバーを使ってもいいですよ」とサーバーに言われたら、これで一応は接続完了です。しかし、ユーザーにとっては何が起こったのか全くわからない状態です。ですので、ここで「フォルダの一覧(フォルダの中身)」を取得してユーザーに見せることで、FTPソフトは『サーバーとの接続に成功したよ!』と私たちに教えてくれるのです。それでは、どうやって「フォルダの一覧(フォルダの中身)」を取得しているのかというと、
5.サーバーに 「PORT」(または「PASV」) コマンドを送信する。
6.サーバーから「PORT」(または「PASV」)コマンドの 返信(RESPONSE) を受け取る。
7.サーバーに 「LIST」 コマンドを送信する。
8.サーバーから「LIST」コマンドの 返信(RESPONSE)・結果 を受け取る。
※ここで紹介している「流れ」はほんの一部です。実際にはもっと細かな「やり取り」をしています。
「LIST」コマンドは、フォルダの一覧を取得するためのコマンドです。では、「PORT」(または「PASV」)コマンドとは何でしょう?実は、FTPでは2種類の「線(接続方法)」でサーバーとやり取りしているのです。(「線(接続方法)」を説明するとなると、ネットワークについて触れなければならないので、ここでは省略します。)
「2種類の線(接続方法)」とは、サーバーと「会話するための線(コントロールコネクション と呼びます)」と、サーバーと「データのやり取りをする線(データコネクション と呼びます)」のことです。なので、接続する際に使った「USER」「PASS」コマンドは「会話するための線(コントロールコネクション)」でやり取りしています。この線は接続しようとした時から既に存在していますが、「データのやり取りをする線(データコネクション)」は『データのやり取りをしたい。接続して!(接続させて!)』と宣言してからデータコネクションを確立します。この宣言が「PORT」(または「PASV」)コマンドなのです。このデータコネクションは、1回やり取りをしてしまうと、そこで消えてしまいます。データのやり取りをしたくなったら、その都度データコネクションを確立する必要があります。実際にファイルをアップロードする場合にも、このデータコネクションを使っています。
と、ちょっと脱線しかかったので、「線」の話はこれくらいにして・・・。ユーザーがFTPソフトを起動して接続するまではボタンクリックで済むのですが、裏側では上記に書いたような 1〜8(実際にはもっと細かいことをしていますが) までのやりとりをサーバーと行っているのです。すごいですね〜。FTPソフトって。
上に書いたような内容がホントに行われているの!?と疑う(笑)方は、こんなソフトを使ってみてはいかがでしょうか?
FTPクライアントソフト「FFFTP」
Sota's Web Page
(FFFTPページよりソフトのダウンロードが可能です。)
使い方もとても簡単ですし、実際に送信されるFTPコマンドが表示されるので勉強?参考?にいいです。私もこれを使ってますし、仕事場でもみなさんこのソフトを使われる方が多いです。
では、今回はこのくらいにして、次回は「FTP、実際にデータのやりとりを行ってみる!」について書こうと思ってます。
close it...?