AN HTTPD ゲストブック/コメント集(2000年8月9日13:45)


中田昭雄 nakata@st.rim.or.jp 2000/08/10 21:52

ぴゅあさん、
まだポート番号についてはっきりしていないようなので、もう少し丁寧に説明しましょう。

TCP/IPの接続では、接続の両端をIPアドレス:ポート番号の組みで考えます。

たとえば、ブラウザでファイルをダウンロードしようとすると保存先をどうするかのダイアログが出ます。
その状態のまま、DOSプロンプトで、netstat -an とすると、

  Proto  Local Address          Foreign Address        State  
TCP 210.165.213.173:1073 199.60.48.51:80 ESTABLISHED
という行が出ます。他にもたくさん出ますが、Foreign Address のポートが 80 のものはその時点では(たぶん)ひとつだけでしょう。
これは、つまり、そのクライアントPC(IPアドレス210.165.213.173)のポート 1073 から、サーバ 199.60.48.51 の ポート80 への接続が確立している(ESTABLISHED)ことを示します。
クライアントのポート(この場合は 1073)は、そのつど 1024 以降の空いているポートをOSが割り当てます。

次に ftp:// で適当なところからFTPダウンロードしてみます。
この場合も保存先ダイアログが出た状態で止めておき、 netstat -an とします。すると、
  TCP    210.165.213.173:1191   202.224.54.4:21        ESTABLISHED  
TCP 210.165.213.173:1192 202.224.54.4:20 ESTABLISHED
というような行が出ます。
サーバ側のポート 21 はFTPの制御コネクションポート、20 はFTPのデータコネクションポートです。
それぞれ、クライアント側に割り当てられたポートは 1191, 1192 になっています。

ついでに、FFFTPなどのFTPクライアントソフトで、どこかに接続してみます。
接続した状態で、netstat -an の出力には、
  TCP    210.165.213.173:1231   202.247.191.103:21     ESTABLISHED  
という行があります。
これはまだデータ転送にはいっていないので、サーバポートは 21 しかありません。

次に telnet で、どこかのホストに接続します。 netstat -an では、
  TCP    210.165.213.173:1224   202.247.191.98:23      ESTABLISHED  
というわけで、もちろんサーバの23番ポートに接続しています。
クライアントのポートはこの場合は 1224 です。

ICQのデータ転送を受けている時に netstat -an としてやれば、むこうとこちらがそれぞれ何番のポートをつかっているかがわかるわけですから、ぜひやってみてください。
FTPクライアントは関係ありません。昔お話ししたのは FTPサーバとぶつかるよ、という話です。

最初になにもしない状態で netstat -an の出力をとっておいた方がわかりやすいかもしれません。
netstat -an は、netstat -a -n でも同じです。
-n はホスト名:サービス名のかわりに IPアドレス:ポート番号 を表示するためのオプションです。
サービス名は hosts と同じところに services という名前のファイルに はいっています。
netstat -an 10 とすると 10秒ごとに netstat -an を実行するので、ずっとファイルに書き出しておけばあとでゆっくり調べることもできます。


ぴゅあ pure@GalaxyCorp.com 2000/08/10 08:07

P.S.中田さん
 ここで話することでもないですがついでに。
 古い話でがICQのファイル転送がポート23を使っているわけがないという話。
 つい先日相手からファイルを貰う時丁度同じマシン上でFTPクライアントによるダウンロード中でした。ICQはファイル転送の受信に関して無反応。FTPクライアントを落としてもだめでICQを立ち上げ直して受信成功。ただICQを24時間立ち上げっぱなしなので動作異常を起こしていた可能性もないとは言えず確認は不完全ですが。
 σ(-_-;)の昔から思うところはどんな立派な人が考えたものであっても(あったら?)必ずしも教科書通りであるとは言えないということ。。。。