3 Minutes NetWorking
No.56

3Minutes NetWorking

第56回FTP(1) 概要

■ ファイル転送

インター博士

さて、telnetは前回で一応終わり。
今回からはTCP/IPアプリケーション層の別の重要なプロトコルの説明をしよう。

ネット助手

というと、やはりHTTPですか、博士?

インター博士

ふっ

ネット助手

なんですか、その笑いは。

インター博士

ネット君。HTTPはそれほど重要なプロトコルではないよ。

ネット助手

重要ではない?
HTTPですよ、HTTPっ!! はいぱーでてきすとなとらんすふぁーかつぷろとこるですよ?

インター博士

ハイパーでテキストなトランスファーかつプロトコルって何だよ。
意味が通ってないぞ。

ネット助手

いや、それはそれとしてですよ?
Webサイトを見るためのプロトコルでしょ? ものすごくよく使われて、重要じゃないですか?

インター博士

ネット君。telnetは由緒がありかつ重要なプロトコルだったな、何故だ?

ネット助手

それは、リモートログイン、つまりネットワーク経由で他ホストを操作することができるからですよね。
他のホストのリソースを使うことのできるtelnetは基本中の基本、でしたよね。

インター博士

そうだ。つまるところネットワークサービスとは、他ホストに何かしてもらうことだからな。
他ホストとの通信を可能にし、なにかしらのコマンドを送ることのできるtelnetはそれはそれは重要なプロトコルだ、というのがわかるだろう?

ネット助手

えぇ、まぁ。それはわかります。
telnetでネットワークサービスを要求できるってことですよね。

インター博士

うむ、極論だがtelnetこそが原点なのだよ。
ただし、telnetにも限界がある。それはファイルのやりとりがしにくいということだ。

ネット助手

ファイルのやりとり?

インター博士

うむ。telnetではコマンドを送り、ファイルを表示させることができても、それをローカルホスト側に保存したり、ローカルホストにあるファイルをリモートホストに送るということがしにくいのだよ。

ネット助手

できないわけではないんですね?

インター博士

うむ、できないわけではない。telnetは原点であると同時に非常にシンプルなデータのやりとりが基本だ。なので、「ファイル」という単位でのやりとりは非常に手間がかかってしまう。ここで登場するのがFTPだ。

ネット助手

ふぁいるとらんすふぁーぷろとこる、でしたっけ。

インター博士

そうだ。RFC959で定義されている。時代は経って、いろいろと機能が追加されてはいるが、基本機能はまったく変わっていない。
ファイルの転送・共有に使われるプロトコルだ。▼ link

FTPとTelnet

[Figure56-01:FTPとTelnet]

ネット助手

RFC959、というと1985年。
telnetのように20年近くも前のプロトコルですね。

インター博士

最初の「ファイル転送」という概念自体が考え出されたのはRFC114だから1971年。30年以上も前だ。そこから色々議論を経たり、TCP/IPに対応したりでRFC959という現在の形に収まるわけだな。

ネット助手

ははぁ、それはまた由緒正しいですねぇ。

インター博士

そうだな。昔のネットワークサービスといえば、telnetとFTPしかないといっても過言ではなかったしな。
つまりtelnetでコマンドを、FTPでファイルを転送するというわけだな。

ネット助手

なるほど。

■ FTPの仕組み

インター博士

さて、ファイルを転送する、という役割だけならばかならずFTPでなければならない、というわけではない。

ネット助手

あらら、そうなんですか?

インター博士

例えば、WindowsOSならばNetBIOSがあるし、UNIXならばNFSがある。
ただし、これらはファイルマウントするタイプなので、ファイルシステムに依存する

ネット助手

ふぁいるしすてむに依存する?

インター博士

まぁ、簡単にいえば特定のOSしか使えないと解釈してもいい。
だが、FTPはクライアント・サーバ型なので、サーバソフト・クライアントソフトさえ入っていればよい

ネット助手

ははぁ、つまりOSを選ばないってことですか?

インター博士

うむ、そういうことだ。
FTPは信頼性の確保のためTCPを使用し、ポート番号は20と21を使う。

ネット助手

20と21? 2つもポート番号を使うんですか?
なんか2倍必要とか?

インター博士

2倍必要と言うわけではないが、2本のコネクションが必要なのだ。
それは、FTPがちょっと複雑な機能をもっているためだ。

ネット助手

複雑なんですか?

インター博士

ちょっとだけだがな。telnetやHTTPに比べてな。
ともかくFTPサーバとFTPクライアントは以下のような構成になっている。

FTPの構成

[Figure56-02:FTPの構成]

ネット助手

ゆーざPI? ゆーざDTP? でーたこねくしょん?

インター博士

それについては後で話す。
上の図を見て気づいて欲しいのは、ファイルシステムとFTPは独立している、ということだ。

ネット助手

あぁ、そういえばそうですね。

インター博士

ユーザ、もしくはサーバのDTPがローカルのファイルシステムに応じて作られており、受け取ったデータをローカルのファイルシステムに合わせてくれる。サーバ・クライアント間の差異を吸収してくれることとなる。

ネット助手

あ〜、さっきのOSを選ばないってところですね。

■ PI

インター博士

さて、ネット君がFTPクライアントを使って、FTPサーバに接続しようとする場合、実際にネット君が触るのはFTPクライアントのユーザインタフェース部分だ。

ネット助手

一番上にある部分ですね。

インター博士

さて、ネット君が触っているFTPソフトがCUIGUIなのかはともかくとして、まぁ、操作するわけだな。
例えば、Windows標準のFTPはコマンドプロンプト上からCUIで操作する。

ネット助手

あ〜う〜。CUIは苦手です。

インター博士

苦手なのはCUIだけか?
ともかく、Windows標準FTPならば以下のようなコマンドが使用可能だ。

Windows FTPのコマンド

[Figure56-03:Windows FTPのコマンド]

インター博士

ネット君はこのコマンドを打ち込んでFTPソフトに命令するわけだ。
それをPIが受け取る。

ネット助手

ぷろとこるいんたーぷりたー。
インタプリタってあれですよね、プログラム言語をコンピュータがわかる言葉に翻訳するソフトですよね。

インター博士

そう、それだ。FTPではネット君が入力したコマンドをFTPコマンドに翻訳する。

ネット助手

FTPコマンドって、え?
さっきのWindows標準FTPのコマンドは、FTPコマンドではないんですか?

インター博士

うむむ、ややこしいのだが、PIが使用するFTPコマンドと、ユーザインタフェースが持つFTPコマンドは一致しない。もちろん、同じものもある。

ネット助手

インター博士

例えば、ファイル名を変更する「rename」コマンドは、実際のFTPで「rename」と送られるわけではなく、「RNFR」「RNTO」という2つのコマンドが実際には送られる。

ネット助手

え、え〜っと。
ファイル名変更するためには「RNFR」と「RNTO」という2つのコマンドがFTPでは必要で、それをユーザインタフェースでは「rename」というコマンドにしている、ってことですか?

インター博士

そういうことだ。
入力されたコマンドは、PIでFTPコマンドに翻訳されてサーバに送られる、ということだな。

ネット助手

う〜。なんかややこしいッスね。

■ 2つのコネクション

インター博士

FTPは2つのコネクションを使う、PI同士が使うポート21の制御コネクションと…。

ネット助手

DTP同士が使うポート20のデータコネクション、ですね。
なんで2つも必要なんですか?

インター博士

基本的なTCP/IPアプリケーションプロトコルで2つのコネクションが必要なのは実はこのFTPだけだ。
FTPでは2つのコネクションに違う役割を持たせている。

ネット助手

違う役割?

インター博士

PIによって解釈されたFTPコマンドを運ぶ制御コネクションDTPが担当するファイルやファイル一覧などを送るデータコネクションだ。

2つのコネクション

[Figure56-04:2つのコネクション]

ネット助手

なんでわざわざ2つにわけたりしたんです?

インター博士

それはデータの転送を容易に行うためだ。
データ転送のコネクションとは別に、制御用のコネクションを持っていれば、データ転送中でも制御が行えるだろう?

ネット助手

コネクションが1つだと考えると。
データ転送中に、制御コマンドを送ると、データの中にコマンドが紛れ込むわけですよね。

インター博士

そうだ。細かいファイルならともかく、サイズの大きいファイルを転送している場合、そのファイルの転送が終わるまでは、制御コマンドは相手に届かないことになる。だが、コネクションが別ならば?

ネット助手

別ならば…。
違う道を通る形になるから、届く?

インター博士

そういうことだ。

ネット助手

ははぁ、上手く考えられてますねぇ。

インター博士

うむ。古いプロトコルだが、なかなか見事に考えられているよな。
さて、実際のFTPの基本動作はこのようになる。

[Figure56-05:FTPの基本動作]

ネット助手

ははぁ。まず先に制御コネクションを確立するんですね。

インター博士

そうだ。すべてのFTPコマンドは制御コネクションで転送されるからな。

ネット助手

で、サーバ側からデータコネクションを開く、と。

インター博士

うむ、これは非常に重要なポイントなので覚えておいてくれ。
詳しくは後のパッシブオープンで説明する。

ネット助手

ははぁ。サーバ側からってのがポイントなんですね?

インター博士

そうだ。
さて、今回はここまでにしておこう。

ネット助手

はい。

インター博士

最初でも話したが、FTPはファイルというリソースの共有を行うプロトコルだ。
このプロトコルはWebブラウズというものが発達した現在でもまったく役割は変わらず存在している。

ネット助手

そうですねぇ。WebサイトのアップロードといえばFTPが定番ですし、重要なファイルやプログラムはFTPで配布してる所は多いですよね。

インター博士

うむ。確かにHTTPは非常に便利になってきたが、ファイルというリソースの共有という点ではやはりFTPが原点なのだよ。

ネット助手

20年以上も前からあるプロトコルですものねぇ。

インター博士

うむ。最初にFTPが重要なプロトコルである、と説明した理由はわかってくれたか?

ネット助手

まぁ、なんとなく。

インター博士

よろしい。
非常にネット君らしい返答だ。

ネット助手

うぅぅ。それって褒めてもらってるんですか?

インター博士

受け取り方は自由だ
ともかく、それではまた次回。

ネット助手

いぇっさ〜。
3分間ネットワーキングでした〜♪

できないわけではない
かなり無理をしますが。
それと、バイナリデータの転送は難しいかも。
NetBIOS
[Network Basic Input/Output System]
MS-DOSやWindowsで使用されるネットワークサービスのためのインタフェース。
下位にNetBEUIやIPを使用する。
NFS
[Network File System]
ネットワークを介してファイルを共有するためのプロトコル。
ファイルマウント
ファイルをそのファイルシステムに対して使用可能にすること。
今回の例でいえばネットワーク経由なので、とあるホストのファイル(フォルダ)を、ローカルのファイルシステムに仮想的に置くこと。
DTP
[Data Transfer Process]
データ転送プロセス。
CUI
[Character User Interface]
文字で操作するインタフェース。主にキーボードの文字とカーソルを使って操作する。
例えばMS-DOSなどがこれにあてはまる。
GUI
[Graphical User Interface]
画像(アイコンなど)で操作するインタフェース。主にマウスなどのポインティングデバイスを使って操作する。
WindowsやX-Windowなどがこれ。
PI
[Protocol Interpreter]
パッシブオープン
[Passive Open]
FTPでファイアウォールやNATをすり抜ける時に使用する。
ネット助手ネット君の今日のポイント
  • FTPはファイルの転送・共有を行うプロトコルである。
  • FTPは純粋なクライアント・サーバ型なので、OSに依存しない。
  • FTPはTCPを使い、2本のコネクションによって動作する。
    • 制御コネクションはFTPコマンドを転送し、FTP全体の制御を行う。
    • データコネクションはファイルの転送を行う。
    • データコネクションはサーバ側から確立される。
    • 制御コネクションは確立されたまま、データコネクションはデータ転送のたびに確立される。

3 Minutes NetWorking No.56

管理人:aji-ssz(at)selene.is.dream.jp