TCP Retransmission Control
TCPが持つcore mechanismの一つ.TCPはE2Eの通信に対して信頼性を担保することを目標としているため,通信経路の途中でpacket loss等が発生して,connectionの対向まで届かなかったりすることを考慮しなければならない.
TCP Connectionにおいて,すべてのsegmentはそれに対する確認応答( ACK flagがついたsegment)が返される.これをもってdata streamの送信側は"自身が送信したdataが対向のhostに届いたことを確認するが,以下どちらかの条件に合致した場合,相手に対するsegmentの送信が正常に完了しなかったとみなして,segmentを 再送/Retransmission する.
RETRANSMISSION TIMEOUTが発生する
それぞれのsegmentを送信したtimingで,retransmission timerを起動する
timerが経過しても確認応答が得られなかった場合を指す
timerの値は RTO(Retransmission TIMEOUT)と呼ばれ,RTTなどの値から動的に算出される
有名な計算手法に"Jacobson's Algorithm"がある
networkが輻輳していなければ"待ちすぎ"が効率低下に寄与し,輻輳していれば"待たなすぎ"が効率低下に寄与する
Fast Retransmissionの条件にmatchする
RTOが高すぎて"待ちすぎる"状態に陥るのを回避する仕組み
Segmentが消失したとき,それぞれ以下のように動作する
受信側は消失したSegmentを要求するようにacknowlegdementを設定して送ってくる
送信側は上記segmentを受け取り続ける(window sizeによっては,消失したSegmentの"次"を送ることすらできない)
このとき,一定以上同じsegmentを要求されたらretransmission timeoutを待たずに再送する
このような機能を実現するため,大抵のTCP実装はRetransmission Queue というqueueを用意しておき,それぞれのsegmentを送信する際にこのretransmission queueにenqueueしておく.確認応答を受信すると,対応するsegmentをqueueから取り除く.
Links
... RETRANSMISSION TIMEOUT が参考になる ... Fast Retransmission が参考になる ... Jacobson's Algorithmの出典 References