平山さん,はじめまして。
細かい部分まで読み込んでいるよう,お見受けしました。 著者として非常に嬉しいです。
>(1)connectもacceptもコネクション確立に関係するプログラムであり、そのため、UDPでは使われないと理解しました。
はい,そうです。
(2)と(4)の質問は,Socketライブラリ,TCP/IPソフト,アプリケーションの関係を もう一度整理すると理解できると思います。 SocketとTCP/IPソフトは,実体は別々のものですが, 両者は連動して一つのものとして動く,と考えた方がよいでしょう。 つまり,アプリケーションがSocketの関数を呼び出すと, SocketとTCP/IPソフトが一体となって,接続,データ送信,切断といった 動作を実行すると考えるわけです。 そう考えて,connectとacceptの動作を時系列に並べると次のようになります。
(1)まず,サーバ側でsocket,bind,listenに続いてacceptを呼び出す。 ここでサーバプログラムの実行が休止し,TCP/IPソフトの内部で, クライアントからパケット(SYN=1のパケット)が届くのを待つ状態に入る。 ここまでが,サーバ側で接続を待つ準備動作。 (2)クライアント側でsocketを実行し,続いてconnectを実行する。 すると,クライアント側のTCP/IPソフトが動き出し,そこでSYN=1のパケットをサーバに送る。 サーバのTCP/IPソフトがSYN=1のパケットに応えて,SYN=1,ACK=1のパケットを返す。 クライアントのTCP/IPソフトがそれに応えて,ACK=1のパケットをサーバに送り返す。 これが,クライアントとサーバが連携して動く,接続の動作。 (3)サーバ側でacceptからアプリケーションに制御が戻り,acceptの次のステップに進む。 (4)クライアント側もconnectからアプリケーションに制御が戻り,connectの次のステップに進む。(3)と(4)の動作はほぼ同じタイミングで実行する。 (5)これ以後,クライアントとサーバがデータをやり取りする。
『ネットワークはなぜ...』は探検形式なので, この動作の説明が,42~46ページ近辺,68~70ページ近辺,302~306ページ近辺に 分かれてしまったため,わかりにくかったかもしれません。 その辺を,その部分をもう一度読み直してみるとよいかもしれません。
それで疑問が解消できないようなら,お手数ですが,もう一度質問してください。
More information about text formats
SocketとTCP/IPソフトは一体のものとして動きます
平山さん,はじめまして。
細かい部分まで読み込んでいるよう,お見受けしました。
著者として非常に嬉しいです。
>(1)connectもacceptもコネクション確立に関係するプログラムであり、そのため、UDPでは使われないと理解しました。
はい,そうです。
(2)と(4)の質問は,Socketライブラリ,TCP/IPソフト,アプリケーションの関係を
もう一度整理すると理解できると思います。
SocketとTCP/IPソフトは,実体は別々のものですが,
両者は連動して一つのものとして動く,と考えた方がよいでしょう。
つまり,アプリケーションがSocketの関数を呼び出すと,
SocketとTCP/IPソフトが一体となって,接続,データ送信,切断といった
動作を実行すると考えるわけです。
そう考えて,connectとacceptの動作を時系列に並べると次のようになります。
(1)まず,サーバ側でsocket,bind,listenに続いてacceptを呼び出す。
ここでサーバプログラムの実行が休止し,TCP/IPソフトの内部で,
クライアントからパケット(SYN=1のパケット)が届くのを待つ状態に入る。
ここまでが,サーバ側で接続を待つ準備動作。
(2)クライアント側でsocketを実行し,続いてconnectを実行する。
すると,クライアント側のTCP/IPソフトが動き出し,そこでSYN=1のパケットをサーバに送る。
サーバのTCP/IPソフトがSYN=1のパケットに応えて,SYN=1,ACK=1のパケットを返す。
クライアントのTCP/IPソフトがそれに応えて,ACK=1のパケットをサーバに送り返す。
これが,クライアントとサーバが連携して動く,接続の動作。
(3)サーバ側でacceptからアプリケーションに制御が戻り,acceptの次のステップに進む。
(4)クライアント側もconnectからアプリケーションに制御が戻り,connectの次のステップに進む。(3)と(4)の動作はほぼ同じタイミングで実行する。
(5)これ以後,クライアントとサーバがデータをやり取りする。
『ネットワークはなぜ...』は探検形式なので,
この動作の説明が,42~46ページ近辺,68~70ページ近辺,302~306ページ近辺に
分かれてしまったため,わかりにくかったかもしれません。
その辺を,その部分をもう一度読み直してみるとよいかもしれません。
それで疑問が解消できないようなら,お手数ですが,もう一度質問してください。