TCPスロータイマ

起動間隔の長い以下の処理はTCPスロータイマ機能を用いて一元的に管理されている。TCPスロータイマはTCPプロトコル内に一つだけ存在する。TCPスロータイマハンドラ(tcp_slttimer_handler関数)は、スロータイマテーブル(tcp_slt_array)に登録されている下記項目の関数を呼び出す。

スロット 起動関数 説明
TCP_SLT_SYNACK tcp_syn_recv_timer コネクション確立時のSYN+ACKパケットの再送
TCP_SLT_KEEPALIVE tcp_keep_alive キープアライブパケットの送出。
TCP_SLT_TWKILL tcp_twkill TIME_WAITソケットの削除
  • tcp_inc_slow_timer関数
    • TCPスロータイマの起動要求回数を1増やす
    • 登録されているもののうち最も起動時刻が近いものを選び、 その時刻にtcp_sltimer_handler関数が起動されるように 登録する(mod_timer関数, add_timer関数)。
  • tcp_dec_slow_timer関数
    • TCPスロータイマの起動要求回数を1減らす
  • tcp_sltimer_handler関数
    • スロータイマテーブル(tcp_slt_array)に登録されているもののうち、 起動要求時間に達した項目の関数を呼び出す。
    • 登録されているもののうち最も起動時刻が近いものを選び、 その時刻にtcp_sltimer_handler関数が起動されるように 再登録する(mod_timer関数)。
  • tcp_keep_alive関数
    • 接続先から強制的にACKを送り返させるために、一つ前の(古い) シーケンス番号でサイズが0のパケットを相手先に 送りつける(tcp_write_wakeup関数)。
    • 一定回数tcp_keep_alive関数が起動される間、接続先から ACKが戻って来なければソケットの状態をTCP_CLOSEにする。

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