> クライアント→全銀TCP(5020)→中間サーバ→FTP(21)→顧客サーバ
こういう風に何台か繋がっていると、それぞれが関連あるように思うかもしれませんが、 TCP/IPの通信動作は別々になります。 つまり、 ・クライアント→全銀TCP(5020) ・全銀TCP(5020)→中間サーバ ・中間サーバ→FTP(21) ・FTP(21)→顧客サーバ という四つのTCP/IPの通信動作が別々に動きます。 そして、各マシンで動くプログラムがその間に入って、データを仲介するわけです。 絵にすると、
---> ソケット-プログラム-ソケット ---> ソケット-プログラム-ソケット --->
こんな感じでしょうか。 中間サーバには全銀TCPからの接続を受け付けるソケット(recipient)と FTPに接続するためのソケット(initiator)の二つが存在することになり、 それぞれが別々に相手と通信動作を実行することになるんですね。 そして、recipientのソケットには、適当に固定的な値(5020かな?)のポート番号を割り当て、 initiatorのソケットには適当に空いている値を動的に割り当てるのが普通です。
それから、ソケットにポート番号を割り当てるところの動きですが、 それはこんな感じになります。 (1)ソケットを作ると、それがソケットテーブルに新しいソケットとして追加される。 (2)ソケットにポート番号を割り当てると、それがソケットテーブルに登録される。 [(1)と(2)を一緒にすることもあります] (3)接続動作を実行する その辺は『ネットワークはなぜ...』の75ページ以後に書いてあります。 そして、ソケットテーブルに登録された時点でそのポート番号は使用済みとなり、 他で使えなくなります。 接続動作が始まっていなくても使用済みになるわけですね。 この辺の考え方はWindows系でもUnix系でも同じです。 ただ、プログラミング言語によってプログラムの作り方に若干差が出ることはあります。
More information about text formats
通信動作は別々
> クライアント→全銀TCP(5020)→中間サーバ→FTP(21)→顧客サーバ
こういう風に何台か繋がっていると、それぞれが関連あるように思うかもしれませんが、
TCP/IPの通信動作は別々になります。
つまり、
・クライアント→全銀TCP(5020)
・全銀TCP(5020)→中間サーバ
・中間サーバ→FTP(21)
・FTP(21)→顧客サーバ
という四つのTCP/IPの通信動作が別々に動きます。
そして、各マシンで動くプログラムがその間に入って、データを仲介するわけです。
絵にすると、
---> ソケット-プログラム-ソケット ---> ソケット-プログラム-ソケット --->
こんな感じでしょうか。
中間サーバには全銀TCPからの接続を受け付けるソケット(recipient)と
FTPに接続するためのソケット(initiator)の二つが存在することになり、
それぞれが別々に相手と通信動作を実行することになるんですね。
そして、recipientのソケットには、適当に固定的な値(5020かな?)のポート番号を割り当て、
initiatorのソケットには適当に空いている値を動的に割り当てるのが普通です。
それから、ソケットにポート番号を割り当てるところの動きですが、
それはこんな感じになります。
(1)ソケットを作ると、それがソケットテーブルに新しいソケットとして追加される。
(2)ソケットにポート番号を割り当てると、それがソケットテーブルに登録される。
[(1)と(2)を一緒にすることもあります]
(3)接続動作を実行する
その辺は『ネットワークはなぜ...』の75ページ以後に書いてあります。
そして、ソケットテーブルに登録された時点でそのポート番号は使用済みとなり、
他で使えなくなります。
接続動作が始まっていなくても使用済みになるわけですね。
この辺の考え方はWindows系でもUnix系でも同じです。
ただ、プログラミング言語によってプログラムの作り方に若干差が出ることはあります。