■ ファイル転送
さて、telnetは前回で一応終わり。
今回からはTCP/IPアプリケーション層の別の重要なプロトコルの説明をしよう。
というと、やはりHTTPですか、博士?
ふっ。
なんですか、その笑いは。
ネット君。HTTPはそれほど重要なプロトコルではないよ。
重要ではない?
HTTPですよ、HTTPっ!! はいぱーでてきすとなとらんすふぁーかつぷろとこるですよ?
ハイパーでテキストなトランスファーかつプロトコルって何だよ。
意味が通ってないぞ。
いや、それはそれとしてですよ?
Webサイトを見るためのプロトコルでしょ? ものすごくよく使われて、重要じゃないですか?
ネット君。telnetは由緒がありかつ重要なプロトコルだったな、何故だ?
それは、リモートログイン、つまりネットワーク経由で他ホストを操作することができるからですよね。
他のホストのリソースを使うことのできるtelnetは基本中の基本、でしたよね。
そうだ。つまるところネットワークサービスとは、他ホストに何かしてもらうことだからな。
他ホストとの通信を可能にし、なにかしらのコマンドを送ることのできるtelnetはそれはそれは重要なプロトコルだ、というのがわかるだろう?
えぇ、まぁ。それはわかります。
telnetでネットワークサービスを要求できるってことですよね。
うむ、極論だがtelnetこそが原点なのだよ。
ただし、telnetにも限界がある。それはファイルのやりとりがしにくいということだ。
ファイルのやりとり?
うむ。telnetではコマンドを送り、ファイルを表示させることができても、それをローカルホスト側に保存したり、ローカルホストにあるファイルをリモートホストに送るということがしにくいのだよ。
できないわけではないんですね?
うむ、できないわけではない。telnetは原点であると同時に非常にシンプルなデータのやりとりが基本だ。なので、「ファイル」という単位でのやりとりは非常に手間がかかってしまう。ここで登場するのがFTPだ。
ふぁいるとらんすふぁーぷろとこる、でしたっけ。
そうだ。RFC959で定義されている。時代は経って、いろいろと機能が追加されてはいるが、基本機能はまったく変わっていない。
ファイルの転送・共有に使われるプロトコルだ。▼ link
[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クライアントは以下のような構成になっている。
[Figure56-02:FTPの構成]
ゆーざPI? ゆーざDTP? でーたこねくしょん?
それについては後で話す。
上の図を見て気づいて欲しいのは、ファイルシステムとFTPは独立している、ということだ。
あぁ、そういえばそうですね。
ユーザ、もしくはサーバのDTPがローカルのファイルシステムに応じて作られており、受け取ったデータをローカルのファイルシステムに合わせてくれる。サーバ・クライアント間の差異を吸収してくれることとなる。
あ〜、さっきのOSを選ばないってところですね。
■ PI
さて、ネット君がFTPクライアントを使って、FTPサーバに接続しようとする場合、実際にネット君が触るのはFTPクライアントのユーザインタフェース部分だ。
一番上にある部分ですね。
さて、ネット君が触っているFTPソフトがCUIかGUIなのかはともかくとして、まぁ、操作するわけだな。
例えば、Windows標準のFTPはコマンドプロンプト上からCUIで操作する。
あ〜う〜。CUIは苦手です。
苦手なのはCUIだけか?
ともかく、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が担当するファイルやファイル一覧などを送るデータコネクションだ。
[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全体の制御を行う。
- データコネクションはファイルの転送を行う。
- データコネクションはサーバ側から確立される。
- 制御コネクションは確立されたまま、データコネクションはデータ転送のたびに確立される。