返信

平山さん,はじめまして。

細かい部分まで読み込んでいるよう,お見受けしました。
著者として非常に嬉しいです。

>(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ページ近辺に
分かれてしまったため,わかりにくかったかもしれません。
その辺を,その部分をもう一度読み直してみるとよいかもしれません。

それで疑問が解消できないようなら,お手数ですが,もう一度質問してください。

<code>Only

  • 使用できるHTMLタグ: <code>
  • 文字で図を描く場合に<code>と</code>で囲んでください
画像認証
機械的なスパムメッセージ送信を防止するために画像認証を設けています。ご協力ください。
Image CAPTCHA
Enter the characters shown in the image.