TCPヘッダの宛先ポート番号

先生こんばんわ。
また質問させていただきます。
TCP コネクション確立時の宛先ポート番号には、例えばHTTPであればListenポートの80が使用されますよね。コネクション確立後、Listenプロセスは子プロセスを作成し、その後の通信は子プロセスと交わすことになると思うんですが、この子プロセスのポート番号は80以外の使用可能なポート番号が割り当てられ、送信元にそのポート番号が通知され、以後はこのポート番号を使用して通信するということを知り合いから聞きました。しかし、実際のHTTPパケットをキャプチャしてみたところ、コネクション確立後のポート番号は相変わらず80のままでした。。。
実際のところどういう仕組みなんでしょうか?宛先ポート番号が変わってしまうとルータなどのフィルタでの条件に影響が出てしまいそうな気もするのですが、同じポート番号が割り当てられたプロセスが2つ以上存在するのもありえないかと思います。
ご教授よろしくお願いいたします。

名前: 
のば
日時: 
05/08/07 22:42

コメント

のばさん,こんにちわ。
返事遅くなってゴメンナサイ。

> この子プロセスのポート番号は80以外の使用可能なポート番号が割り当てられ

これ,違いますね。
コネクション確立時には,
listenしているソケットとは別の新しいソケットを作って,
そのソケットを使って以後の通信動作を行いますが,
その際,ポート番号が変わることはありません。

> 同じポート番号が割り当てられたプロセスが2つ以上存在するのもありえない

これも違いますね。
コネクションは両端のアドレスとポート番号の組み合わせによって識別しますから,
どちらか一方だけであれば,
アドレスとポート番号が同じプロセスが複数存在してもかまいません。

『ネットワークはなぜつながるのか』の64ページ近辺と,302ページ近辺に
その辺の説明があるので,参考になると思います。

すいません、返信遅くなってしまいました...

>コネクション確立時には,
>listenしているソケットとは別の新しいソケットを作って,
>そのソケットを使って以後の通信動作を行いますが,
>その際,ポート番号が変わることはありません。

クライアント側のポート番号はある範囲の中からランダムに割り当てられるのは理解してます。
するとTCPモジュール(TDI?)にパケットが入ってきたとき、
同ポート番号を持つソケットが複数存在するとき、「この送信元ポートとアドレスのパケットはこのIDを持つソケット」なんて風にテーブルみたいなものを保持してるんですかね?

>『ネットワークはなぜつながるのか』の64ページ近辺と,302ページ近辺に
>その辺の説明があるので,参考になると思います。

必ず読みます!!

返信を見落としていました。ゴメンナサイ。

>同ポート番号を持つソケットが複数存在するとき、
>「この送信元ポートとアドレスのパケットはこのIDを持つソケット」
>なんて風にテーブルみたいなものを保持してるんですかね?

そういうことです。
送信元アドレス,送信元ポート番号,宛先アドレス,宛先ポート番号,
の四つをワンセットにして,それでコネクションを識別するように,
テーブルに登録しておきます。
それがいわゆるソケットテーブルです。

その辺の説明が
>>『ネットワークはなぜつながるのか』の64ページ近辺と,302ページ近辺に
にあります。