[[PageNavi(internal22-navi)]]
{{{ comment
h2w-title:再送タイマ
}}}
== 再送タイマ == #SECTION07891000000000000000
起動間隔の短い以下の処理は再送タイマ機能を用いて管理されている。各ソケットが独自の下記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 [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1
[[PageNavi(internal22-navi)]]