再送タイマ

起動間隔の短い以下の処理は再送タイマ機能を用いて管理されている。各ソケットが独自の下記3つの再送タイマを持ち、それぞれ独立に動作する。

スロット 起動関数 説明
TIME_RETRANS tcp_retrasmit_timer 送信データパケットの再送。一定時間の間に接続先から ACKが戻って来なかったときに起動される。
TIME_DACK tcp_delack_timer 遅延ACKパケット送出。一定時間送出されるデータパケットが無かった ため、ACK情報だけでデータが空のTCPパケットを送り出す
TIME_PROBE0 tcp_probe_timer 送信データが溜っているが、全く送信を開始できない状況にある。 接続先から強制的に最新のACKおよびウィンドウサイズを 送り返してもらい、早く送信処理が再開できるようにする。 ウィンドウサイズ0の時にackがロストしたときに送受信が ロックしないための対策
  • tcp_reset_xmit_timer関数
    • 再送タイマの起動を行う。引数により起動する再送タイマの種類を指定する
  • tcp_clear_xmit_timer関数
    • 再送タイマの停止を行う。引数により起動する再送タイマの種類を指定する
  • tcp_timer_is_set関数
    • 引数に指定された再送タイマが起動されているか?をチェックする
  • tcp_write_timeout関数
    • データの再送処理がタイムアウトした。ソケットをCLOSE状態にしてしまう。
  • tcp_send_probe0関数
    • 接続先から強制的にACKを送り返させるために、一つ前の(古い) シーケンス番号でサイズが0のパケットを相手先に 送りつける(tcp_write_wakeup関数)。
  • tcp_ack_probe関数
    • tcp_ack関数から呼び出される。 送信windowサイズに空きができたら、TIME_PROBE0タイマを停止する。

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