Show page source of internal22-286-サーバ側処理前半 #25427

[[PageNavi(internal22-navi)]]

{{{ comment
h2w-title:サーバ側処理前半
}}}
 

== サーバ側処理前半 == #SECTION07872000000000000000

まず最初にLISTEN状態のソケットが、コネクション確立要求(SYNパケット)を受け取った時の動作を説明する。SYNパケットを受け取るとサーバはSYN_RECV状態のコネクションを生成し、クライアントにSYN+ACKパケットを返送する。

パケットはtcp_v4_rcv, tcp_v4_do_rcv関数を通して入って来る。受信ソケットがTCP_LISTEN状態である場合、まずtcp_v4_hdn_req関数が呼び出されるが、SYNパケットである場合(基本的に)何も処理をしない。その後tcp_rcv_state_process関数を呼び出す。

tcp_rcv_state_process関数は、TCP_LISTEN状態のソケットがSYNパケットを受け取った場合は、tcp_v4_conn_request関数を呼び出す。

tcp_v4_conn_request関数は、SYN要求に対応してSYN_RECV状態のopenreq構造体を生成する。(LinuxにおいてSYN_RECV状態は、ソケットではない)
  *  openreq構造体を確保(tcp_openreq_alloc関数)し、初期化する。	初期シーケンス番号はtcp_v4_init_sequence関数で求める。
  *  コネクション接続要求してきた相手にSYN+ACKパケットを返送する。	(tcp_v4_send_synack関数)
  *  SYN+ACKパケットの再送タイマを起動する	(tcp_inc_slow_timer(TCP_SLT_SYNACK)関数)
  *  生成したopenreqをソケットのsyn_wait_queueの最後にリンクする	(tcp_synq_queue関数)。

 [[Embed(internal22-images:img109.gif)]]
 

----

''(NIS)HirokazuTakahashi [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1

[[PageNavi(internal22-navi)]]