FTPのことでお聞きいたします。

お久しぶりです、今日資格試験を受けてきた紘明です。試験中このことがずっと気になって集中できなかったんですがそのことについて教えてください。

例:ネットワークはルータにPC二台とWANにつながっている状態です。
FTP ではコネクションを確立するのにアクティブモードとパッシブモードとあると思うんですが。アクティブモードの場合まず1.[サーバのポート21番][クライアントのPCで適当に作られたポート番号]で確立させるのはいいんですけど、2.次にデータをもらうときに相手から[サーバのポート20番][クライアントのポート番号をサーバーが勝手に決める?]でSYNパケットを送るみたいなんですけど。 ここで疑問に思うのはルータのアドレステーブルには2の情報はかかれていないハズなのにルータはクライアントを特定して送信してくるのか?というのか送信可能なのか?というのと勝手にクライアントのポート番号を決めるのかというのが疑問というか、自分ではありえないです。

あとパッシブモードの場合も21番ポートの時はいいんですけど、データを転送する方のポートが20番以外のを使うのにサーバはどうやってそのポート番号を知るのかという仕組みが分からないです。
もしよろしければ教えていただけるとうれしいです。ヨロシクお願いします。

名前: 
紘明
日時: 
04/07/04 21:12

コメント

紘明さん,お久しぶりです。
試験は良い結果だといいですね。

さて,FTPの件ですが,
Activeモードの場合,
データの転送に使うクライアント側のアドレスとポート番号は,
クライアントからサーバにコマンドを送るときに,コマンドと一緒に送ります。
FTPサーバはその情報に基づいてデータ転送のコネクションを張ってきます。
FTPサーバが勝手に決めるわけではありません。

それから,ルータでアドレス変換するときは,コマンドのやり取りに含まれる
コネクションの情報を監視して,それをアドレス変換テーブルに登録します。
そうしないと,FTPサーバからクライアントに張ってきたコネクションのパケットを
クライアントに届けることができません。

Passiveモードの場合は,
サーバ側のアドレスとポート番号をサーバからクライアントに通知し,
クライアントはその情報に基づいてFTPサーバにコネクションを張ります。

『新人SEのための基礎からわかるネットワーク入門』(戸根勤著,日経BP社)の
282ページ以後にその辺の解説があります。
参考になるかもしれません。

いつもありがとうございます。

自分のコネクション待ちをサーバに知らせるパケットはEhterealでみあたら
ないと思ってたんですが。下のパケットがそうだったんですね。
【PORT 192,168,0,2,4,200】 (4*256+200)を計算してポート番号を導きだしてるんですね。
(自分はこれではないと思い相手が勝手に作ってるものだと勘違いしてしまっていた)
これで相手に自分のポート番号を教える方法が分かりました。

次にルータなんですけどこれはルータはパケットのやりとり(データ部分)もちゃんと見てるわけですね。それでルータがFTP対応機能をもっている場合
ウェルノウンポートで決まってるから20番とPORT 192,168,0,2,4,200で見た
ポート番号とサーバ、クライアントのIPアドレスを組み合わせてルーティング
テーブルを作っているという考え方でよろしいでしょうか?

今日早速本屋に見に行ってみようと思います

>ルータはパケットのやりとり(データ部分)もちゃんと見てるわけですね。

原則としてルータはパケットのデータ部分は見ません。
というか,本来のルーティングの機能はデータ部分を見ないということです。
ルータに付随するアドレス変換機能がデータ部分を見ると思えばよいでしょう。

>それでルータがFTP対応機能をもっている場合
>ウェルノウンポートで決まってるから20番とPORT 192,168,0,2,4,200で見た
>ポート番号とサーバ、クライアントのIPアドレスを組み合わせてルーティング
>テーブルを作っているという考え方でよろしいでしょうか?

この話は,ルータのアドレス変換機能に関するものです。
つまり,ルータでアドレス変換する場合に,
アドレス変換用のテーブル,
つまり,グローバルアドレスとプライベートアドレスの対応表に
PORT 192,168,0,2,4,200から情報を拾って登録するということです。
パケット中継先を判断するために使う
ルーティングテーブルの方に登録するわけではありません。

なお,アドレス変換機能はすべてのルータが持っているわけではありませんし,
アドレス変換機能を持っていてもFTPに対応していないものもあります。

この辺,ちょっとややこしいですね。

勘違いしていたところもあったんですが。わかるようになってきました
ありがとうございます