3 Minutes NetWorking
No.59

3Minutes NetWorking

第59回FTP(4) データコネクション

■ データコネクション接続

インター博士

さてさて、FTPコマンドの続きを話そう。
まず、データコネクションの接続からだ。

ネット助手

データコネクションの接続?
データを転送するのに使う、FTPのもう1つのコネクションですよね。

インター博士

うむ。何回か説明しているが、制御コネクションとデータコネクションは別物、だな。
どうやってデータコネクションを接続するかというと…。

[Figure59-01:データコネクションの接続]

インター博士

データコネクションはサーバ側から接続される、よって、PORTコマンドで待ち受けポートを指定する。

ネット助手

ははぁ。
クライアントが待ち受けていないと、サーバから接続しようとしてもできませんからねぇ。

インター博士

そういうことだ。そのPORTコマンドは以下の形になる。

  • PORT クライアントのIPアドレス , ポート番号上位8ビット , ポート番号下位8ビット
ネット助手

ぽーと、クライアントのIPアドレス、ポート番号上位8ビット?下位8ビット?
なんです、これは?

インター博士

うむ。ネット君、ポート番号は何ビットだ?

ネット助手

え〜っと。16ビットです。

インター博士

うむうむ。その上位8ビットを10進数にしたものと、下位8ビットを10進数にしたものをPORTコマンドに入れるのだ。
つまり、こう。

PORTコマンドの計算

[Figure59-02:PORTコマンドの計算]

インター博士

2746というポート番号を2進数化して、前8ビットと後ろ8ビットにわけた、と。
右の計算式は簡単にわかるように書いたものだ。

ネット助手

ははぁ。
なんでこんな面倒な形なんですかね?

インター博士

さぁ?

ネット助手

「さぁ」って博士。

インター博士

うむ。すなおに「2746」と書いてもいい気がするしな、確かに。
なんか知らんが、この形なのだよ。

ネット助手

はぁ。そういうものなのですね。

インター博士

そういうことにしておけ。過酷な世の中を生き抜くための知恵だ。
さて、データコネクションを開く前には使用するデータタイプを指定する必要がある。

ネット助手

でーたたいぷっていうと、あれですか。ASCIIとかIMAGEとかの。

インター博士

そう。それだ。

  • TYPE データタイプ
インター博士

TYPE A でASCIITYPE I でIMAGEが設定される。

ネット助手

そのまんまですね。

インター博士

そのまんまだな。
ちなみに今回は話の流れでPORT、TYPEと説明したが、実際はTYPE、PORTの順で実行する。

ネット助手

データタイプを指定してから、ポートの指定、ですね。

■ パッシブオープン

インター博士

PORTコマンドでクライアントがポートを開き、そこへサーバが接続する。
これはこれでいいのだが、実は問題がある。

ネット助手

問題?

インター博士

うむ。内部LANを守るファイアウォールを使った場合の問題だ。

ネット助手

ふぁいあうぉーる、って。
なんですか?

インター博士

む。どっかで説明した記憶があるが…。
まぁいい。内部LANを守る壁だ。

[Figure59-03:データコネクションとファイアウォール]

ネット助手

外部からのTCP接続は不正アクセスなんですか?

インター博士

詳しくはファイアウォールの時に説明するが、普通はそう判断する。
ネット君、TCP接続が確立されるということは、データ転送が可能になるということだな?

ネット助手

TCPを使うなら、そうですよね。
スリーウェイハンドシェイクでコネクションを確立して。

インター博士

うむ。よって、外部からのSYN(TCP接続要求)を内部に送ってしまうと、外部からのデータが内部に流れ込むことになる。

ネット助手

そう、なりますね。
コネクションが確立されちゃうわけですから。

インター博士

なので、ファイアウォールは外部からのSYNを内部に送らない。それにより外部からのアクセスを遮断するわけだ。
まぁ、DMZなどの例外はあるがな。

ネット助手

なるほど。
でもこれだと、ファイアウォールがあるとFTPができないってことになっちゃいますよね。

インター博士

そうだ。
何故こんなことが起きるのだ? それを回避する方法は?

ネット助手

何故起きるって…。
ファイアウォールがあるから?

インター博士

なるほど。
それは確かに正しい

ネット助手

ですよね、えへへ。

インター博士

「交通事故は何故起こるのか?」「自動車があるから
ネット君。君の問題提起能力には非常に疑問がある

ネット助手

うぅぅ。

インター博士

もう少し違う理由を考えたまえ。
つまり、データコネクションの特徴は? どうやって確立される?

ネット助手

…。
サーバからコネクションを開始することが原因だってことですか?

インター博士

そうだ。なので、クライアントからデータコネクションを開始してやればいい。

ネット助手

クライアントから開始…、そんなんありなんですか?

インター博士

もちろん。これをパッシブオープンという。
パッシブオープンを行うためのコマンドは、以下のコマンドだ。

  • PASV
インター博士

PASVコマンドを受け取ったサーバの動作と、コネクションの確立は以下の通り。

[Figure59-04:パッシブオープン]

ネット助手

レスポンスコード227、ですか。

インター博士

うむ。レスポンスコード2xxは「肯定的完了」。x2xは「コネクション」に関する応答。
「パッシブオープンしますよ」というレスポンスだな。

ネット助手

なるほど。

インター博士

サーバによってはパッシブオープンしか駄目だったり、そういうこともある。
ちなみにパッシブオープンを使わなくても大丈夫なファイアウォールもある。

ネット助手

へぇ、どういうファイアウォールですか?

インター博士

どういう、と言われても特に名前はないのだが。
FTPが非常に標準的なプロトコルなので、FTPのデータコネクションに関してはOKとしてしまう、という話だ。

ファイアウォールとFTP

[Figure59-05:ファイアウォールとFTP]

インター博士

FTPはよく使われるプロトコルだからな。
いちいちパッシブオープンにしなくてもよいように設定を変えてくれるわけだ。

ネット助手

ははぁ、こっちの方が便利ですね、クライアントで設定変更する必要がないですから。

■ ファイル転送

インター博士

無事にデータコネクションが確立されたのなら、ファイルの転送だ。
サーバからファイルを受け取るコマンドがRETR

  • RETR ファイル名
インター博士

サーバにファイルを送るコマンドがSTOR

  • STOR ファイル名
ネット助手

受けとるのがRETR、送るのがSTOR。
なんか紛らわしいですね。

インター博士

つまり、サーバから受け取る[Retrieve]、サーバに保管する[Store]だな。

ネット助手

[Retrieve]と[Store]なんですか。
てっきり[Recive]と[Send]かな〜と思ってましたよ。

インター博士

[Recive]だとRECVになってしまうな。
ともかく、動作はこのような形になる。

[Figure59-06:ファイル転送]

ネット助手

聞いてた通り、データコネクションでファイルを。制御コネクションでファイルのやり取りの内容を転送するんですね。
なんか納得です。

インター博士

うむ。さて、このファイル転送の仕組みのポイントは2つ。
1つ目は、ファイルそのものを送るわけではないということだ。

ネット助手

はい? ファイルを送るんですよね。どういうことです?

インター博士

実際のところの話、だ。つまりファイルの中身だけを送り、それを受け取った受信側は受信側のファイル形式に合った形で、その中身を持つファイルを作成するのだよ。

ネット助手

ファイルを…作成する?

インター博士

そうだ。
その際、RETR・STORコマンドで送られたファイル名で作成することになる。

ネット助手

送られた中身を、自分の形で、ファイルを作成する。

インター博士

まぁ、見た目上はファイルをそのまま送った形になるがな。

ネット助手

ははぁ。
本当は「送って保存」、ではなく「送ったのを作成して保存」になるわけですね。

インター博士

そういうことだ。
ホストそれぞれのファイル形式の違いを忘れるな。

ネット助手

了解です。

インター博士

もう1つのポイントは、データコネクションの切断のタイミングと、レスポンスコード226を送る順番だな。

ネット助手

え〜っと。
切断してから、226が届くって感じですか?

インター博士

うむ。
ファイル構造のストリームモード、ということだな。

ネット助手

ファイル構造のストリームモード?

インター博士

前回やっただろう?
ファイル構造のストリームモードでは、データコネクション切断のFINがEOFになると。

ネット助手

ファイル構造の場合は、特にEOFのデータを付加しないんでしたっけ。

インター博士

うむ。データコネクションの切断が全データの終了を意味する。
よってレスポンスコード226は、データコネクションの切断後に「すべて完了」という意味で送られる、ということだ。

ネット助手

は〜。なるほど。

インター博士

うむ。
さて、今回はこれぐらいにしておこう。

ネット助手

あ、はい。

インター博士

次回は、残りの主要なFTPコマンドの説明をする。

ネット助手

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

ファイアウォール
[Fire Wall]
内部LANを守るために設置される「防火壁」。
不正アクセスなどをLAN内部に送らないよう制御する機器。
DMZ
[DeMilitarized Zone]
「非武装地帯」の意味。
ファイアウォールで守られてはいるものの、外部からのアクセスを許可するネットワーク。
外部に公開するサーバなどを置く。詳しくはファイアウォールの説明の際に。
パッシブオープン
[Passive Open]
パッシブモードとも言う。
通常データコネクションの開始元であるサーバが受け手[Passive]になるため、この名がある。
パッシブオープンに対して、通常のオープンはアクティブオープン[Active Open]と呼ぶ。
ネット助手ネット君の今日のポイント
  • データコネクションはサーバ側から開かれる。
    • PORTコマンドで待ち受けるポート番号を通達する。
  • パッシブオープンはクライアント側からデータコネクションを開く。
    • サーバ側から通達されたポート番号に、クライアントからコネクションを開く。
  • ファイル転送はダウンロードががRETR、アップロードがSTORを使う。
  • 制御コネクションで転送の開始や完了を送受信する。
  • ファイルを送るわけではなく、中身だけ送り、その中身をもつファイルを作成している。

3 Minutes NetWorking No.59

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