クライアント側処理

クライアントからのコネクション確立要求は、socketレイヤを経由しinet_stream_connect関数を呼び出す(struct proto_ops inet_stream_opsインターフェイステーブル経由)ことにより実現される。

  1. inet_stream_connect関数は、まずソケットにポート番号が 割り当てられていない場合適当なポート番号を割り当てる (inet_autobind関数)。
    • inet_autobind関数はtcp_v4_get_port関数でユニークな TCPポート番号を取得し、tcp_v4_hash関数で TCPポートキャッシュに登録する。 (tcp_protインターフェイステーブル経由)
  • inet_stream_connect関数は、次にtcp_v4_connect関数を呼び出す。 (tcp_protインターフェイステーブル経由)。
    • tcp_v4_connect関数は、まずルーティング情報を得る (ip_route_connect関数)。
    • 次にSYNパケット用のパケットを確保し(sock_wmalloc関数)、 パケットの初期化を行う。シーケンス番号初期化には secure_tcp_sequence_number関数を利用。
    • その後SYNパケットの送信(tcp_connect関数)を行う。
      • SYNパケットの初期化を行なう。
      • ソケットの状態をTCP_SYN_SENT状態にし、tcp_v4_hash関数で TCPポートキャッシュに再登録する。
      • SYNパケットをソケットのwrite_queueにリンクし、 送信要求(tcp_transmit_skb関数)を出す。
      • 再送タイマの起動も行う(tcp_reset_xmit_timer(TIME_RETRANS)関数)。
  • あとはコネクトの確立を待つ(inet_wait_for_wait)。 サーバ側からSYNに対応するSYN+ACKが戻って来たとき 起床される。

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