■ FTP転送モード
前回はデータをどのような単位で転送するか、という話だったな。
ネット君、ポイントは?
え〜っと、そうですね。
NVT-ASCIIとかファイル構造とか、そんな感じですか?
うむうむ。OSに依存しない転送方式である、ということだな。
そこらへんは重要なので覚えて置くように。
うぃ、むしゅ〜。
何故フランス語?
ともかくだ。今回はまず実際のデータ転送の話をしよう。まずFTP転送モードの話。
えふてーぴーてんそうもーど?
なんですか、それ?
うむ。簡単に言えば、データ転送の方法だな。
データ転送の方法って、前回のデータタイプとか、データ構造じゃないんですか?
それは転送する中身の話だ。転送モードはデータの転送単位の問題だ。
転送単位?
ファイルとかレコードとかじゃなくて?
うむ。つまり以下のモードがある。
- ストリームモード
- ブロックモード
- 圧縮モード
データをほとんど処理しないストリーム、ブロックという形式で送るブロック、圧縮する圧縮の3種類だ。
すとりーむ、ぶろっく。圧縮。
ストリームって前に出てきましたよね。
うむ。第44回のUDPでストリーミング配信という言葉が出てきたな。そのストリーム、「流れるように連続的に」ビットを送るモードがストリームモードだ。
流れるように連続的にビットを送る?
イメージ的には「区切り」がなく、ビットをず〜っと流していく形だな。
区切りがない、ですか。
うむ。ブロックモードはブロックという区切りを使うからな。
そのような区切りがない、というモードだ。オクテットという区切りは使うがな。
[Figure58-01:ブロックモードとストリームモード]
ストリームモードでは「ビットをストリーム(流れる)」ように転送するので、基本的にはデータそのものになんら手を加えず転送する。レコードの終了を示すEORは使うがな。
ふむふむ。
一方のブロックモードではデータをブロックという単位で転送する。
ブロックモードではヘッダを付加して転送する。
[Figure58-02:ブロックモードのヘッダ]
記述子にはそのブロックがレコードの最後ならばEORが、ファイルの最後ならばEOFが入る。
ブロック長にはそのブロックの長さが入る。
う〜ん。ストリームモードとどう違うんです?
そうだな。ストリームモードの方がより単純だな。
ブロックモードではデータを一度ブロックという単位に形式を変更する必要があるからな。
そういうもんなんですか?
そういうものだ。現在ではストリームモードしか使われないことが多い。
そして前回話したとおり、普通はファイル構造しか使わない。つまり、どういうことだね、ネット君?
つまり、データは特に何もせずに送り、ファイルの終了はTCPのFINで示すってことですよね。
そうだ。つまり通常のFTPでは制御データを付加することなどなしでデータを送るということだよ。
ははぁ、なるほど。
ちなみに圧縮モードはどうなんです?
圧縮モードはランレングス圧縮を使う方式だ。圧縮の制御データを付加して転送する。
FTPがもとから圧縮機能を持ってるんですか?
そうだが、ランレングス圧縮自体があまり効率のいい圧縮方式ではないので、それほど転送効率が上がらないのが欠点だな。
なんだ。そうなんですか。
■ 制御コネクションの動作
さてネット君。FTPの構造は次の図の形だったな。
[Figure56-02:FTPの構成]
でした。
前回と、今回の最初に話したデータタイプ、データ構造、転送モードはデータコネクションでの話だ。
ここからは、制御コネクションでの話をする。
ポート番号21番を使い、FTPコマンドをやりとりするコネクションでしたっけ。
そうだ。
まず、制御コネクションはtelnetプロトコルを使用してコマンドをやりとりする。
telnetプロトコルを使う? っていうことは、文字を1つ1つ送っていくってことですか?
文字を、NVT-ASCIIを使ってtelnetラインモードで転送するコネクション、ということだ。
telnetラインモードなんですね。1文字1文字ではない、と。
うむ。データコネクションはデータと一覧表だけを転送するので、実際のFTPの動作はすべてこの制御コネクションが行う。
「データの転送開始」「データ転送終了」などの情報も制御コネクションを使って転送されるということを間違えないように。
ははぁ。ホントにデータだけなんですね、データコネクションは。
そういうことだ。
さて、その制御コネクションでやりとりされるものはコマンドとレスポンスだ。
「命令」と「応答」ですか。
うむ。コマンド・レスポンス双方ともNVT-ASCIIによる文字データだ。
コマンドはFTPコマンド。レスポンスはレスポンスコードが使われる。例えばこんな形だ。
[Figure58-03:コマンド・レスポンス]
USERコマンドを例にしたが、このような形になる。
ふむふむ。
実際これらのコマンドやレスポンスは表にはでてこない。
確認したい場合は、例えば有名なFTPクライアントであるFFFTPでは下部に表示されている。 ▼ link
[Figure58-04:FFFTPでの表示]
赤い枠内に表示される。
そうだな、実際にどのように表示されるかを見てもらった方が早いかもな。telnetクライアントを使って例を表示してみよう。
telnetクライアントで、ですか?
うむ、telnetクライアントは万能だからな。
例えば、こんな形だ。
[Figure58-05:telnetでのFTP]
なるほど。コマンドと、それに対するレスポンスですね。
telnetクライアントでもできるんですねぇ。
うむ、TELNETでFTPを実行するのは多少面倒だ。おまけページを作っておいたから、試してみたい人はそっちを参照、だ。▼ link
■ レスポンスコード
まず、レスポンスコードを説明しよう。
先ほども話したとおり、3桁の数字で、1桁目と2桁目は意味がある。
1xx | 肯定先行 | 動作は正常であり、現在動作中なため次のレスポンスを待つ必要がある。 |
---|---|---|
2xx | 肯定完了 | 動作は正常に完了した。 |
3xx | 肯定中間 | 正常な動作であり、さらに新しいコマンドで新たな情報を送る必要がある。 |
4xx | 一時否定完了 | コマンドが受理されなかった。エラー原因は一時的なものであるため、再送が必要。 |
5xx | 否定完了 | コマンドが受理されなかった。エラー原因は恒久的なものであるので、修復してから再送する必要がある。 |
[Table58-01:レスポンスコード・100番台]
レスポンスコードの1桁目は応答の種類だな。
正常か、エラーか。次の動作をどうするかで分けられている。
x0x | 構文 | コマンドは構文エラーである。 |
---|---|---|
x1x | 情報 | 状態やヘルプなどの情報要求への応答。 |
x2x | コネクション | コネクションに関する応答。 |
x3x | 認証・アカウント | ログインとアカウントに関する応答。 |
x5x | ファイルシステム | サーバのファイルシステムに関する応答。 |
[Table58-02:レスポンスコード・10番台]
2桁目は詳細だな。どの項目についての応答なのかを表示する。
は〜。
例えば先ほどのtelnetクライアントでの3行目「331 Password Required for ユーザ名.」だと…。
[Figure58-06:レスポンスコード・331]
まず1桁目が3だから、「肯定中間応答」。2桁目も3だから「認証・アカウント」についての応答という意味になる。
肯定中間応答だから、コマンド、この場合はUSERコマンドは正常ですよ、と伝えていて…。
次に新しいコマンドを入力して新たな情報を送る必要がある、と。
パスワードを送らなければいけないってことですか。
そういうことだ。
種類が多いのですべて説明はしないが、大体はコードの1桁・2桁目でわかるという仕組みだ。 ▼ link
なるほど。
■ コマンド
一方コマンドだが。
これも数多くあるのだがサーバがサポートしているコマンドは限られている。 ▼ link
え〜っと。すべて使えるわけではない、ってことですか?
うむ。
例えば、Micorsoft IISでは以下のコマンドが使用可能だ。
[Figure58-07:IISでのコマンド一覧]
この40個だな。まぁ、大体は使えるわけだが。
なんか似たようなのが多いですね。
CWDとXCWDとか。
うむ。先頭に「X」があるのは「実験的」なコマンドだ。
あ〜、そういえば「試作」とかは「X」の番号が振られますよね。
うむ、それだ。それと同じように実験的コマンドは「X」が先頭にある。
これが正式なコマンドに昇格すると「X」が取れるわけだな。
じゃあ、CWDはXCWDが昇格した形ってことですか?
そういうことだ。
ただ、その後も互換性の問題があるので、Xがついたコマンドも対応している、というわけだ。
なるほど。
■ 認証・アカウントコマンド
ここからはよく使われるコマンドを説明していこう。
まずは、認証・アカウント関係のコマンドだ。
- USER ユーザ名
ユーザ名の入力だな。
これには必ず次のパスワードとセットで行われ、制御コネクション確立直後に行われる。
- PASS パスワード
FTPサーバを使うユーザを指定するわけですね。
で、まずはこの2つ、と。
そうだ。
残念ながらパスワードは平文で送られる。
平文って、暗号化されてないってことでしたよね。
■ 切断・中断コマンド
制御コネクションの切断、つまりFTPの終了に使われるコマンドは次のコマンドだ。
- QUIT
このコマンドは制御コネクションの切断だけでなく、もしデータコネクションが確立していたらそれも切断する。
ん〜っと。つまり、データコネクションが確立しているってことは、データを転送中ってことですよね。
中断させるわけですか?
そうだな、そういうことになる。
QUITはコネクションの切断と覚えるよりも、「FTPの終了」と覚えた方がいいな。
ふむふむ。
一方、データコネクションで転送中のデータのみを中断させたい場合は「ABOR」を使う。
- ABOR
これを送ると、データコネクションが切断される。
telnetで出てきたTCP緊急モードが使用される。
第54回で出てきたやつですね。
TCPのフロー制御を無効化させるという。
そうだ。制御コネクションはtelnetプロトコルを使用するので、telnetで出てきた「IAC IP」と「IAC DM」を使ってサーバに強制的に「ABOR」を認識させるのだ。
「IAC IP」はプロセス中止、「IAC DM」はデータマーク、同期でしたよね。
うむ。
さて、今回はこれぐらいにしておこう。
あれ? コマンドの説明はこれだけですか?
うむ、ファイル関係のコマンドはまた次回だな。
いぇっさ〜。
3分間ネットワーキングでした〜♪
- ブロック
- 一般的には入出力の単位として用いられることが多い、特定のサイズでの区切り。
- ランレングス圧縮
-
[run length]
同一の文字が続いた場合、それを圧縮する方式。主に文字データの転送で使用される。
例えば「AAABBC」の場合「A3B2C1」と圧縮する。それほど圧縮効率は高くない。
- FFFTP
-
とても有名なフリーのFTPクライアント。
参考リンクは作者の曽田 純さんのサイトのFFFTPのページ。
- telnetクライアント
-
画像ではLocal_EchoをONにしてあります。FTPサーバはEchoしないので、Local_Echoがないとコマンドは表示されません。
- 40個
- この画像は見やすいように折り返しをさせてます。実際は上から1列に並びます。
- ネット君の今日のポイント
-
- 転送単位はFTPデータ転送モードで決められている。
- ストリームモードはほとんどデータに手を加えず転送する。
- 制御コネクションはtelnetプロトコルを使用する。
- 制御コネクションではNVT-ASCIIの文字データでコマンドとレスポンスをやり取りする。
- レスポンスコードは3桁の数字で表現される。
- コマンドは3〜4文字の英語で表現される。
- 制御コネクション確立直後にUSERとPASSで認証を行う。
- 制御コネクションの切断はデータコネクションの切断も意味する。
- 転送単位はFTPデータ転送モードで決められている。
- 参考リンク
-
- Sota's Web Page -FFFTP-http://www2.biglobe.ne.jp/~sota/ffftp.html▲
- Master of IP Network FTPレスポンスコード一覧表http://www.atmarkit.co.jp/fnetwork/rensai/netpro10/ftp-responsecode.html▲
- Master of IP Network FTPコマンド一覧表http://www.atmarkit.co.jp/fnetwork/rensai/netpro11/ftp-command.html▲
- 3Minutes Network No.58 おまけhttp://www5e.biglobe.ne.jp/~aji/3min/58_1.html▲