- シンプルなタイムアウトと再転送の例。
最初の行の送信の後、ネットワークケーブルを抜いた例。
- RTT(往復時間, Round Trip Time)の測定
オリジナルなTCPの仕様
R ← α R + (1 - α) M
R: 平滑化されたRTT評価値
α: 平滑化係数 (推奨値 0.9)
M: 測定された RTT値
RTO = R β
RTO: 再転送タイムアウト値
β: 遅延分散係数 (推奨値 2)
Jacobson 1988 (往復時間の分散を取り入れる)
Err = M - A
A ← A + g Err
D ← D + h (|Err| - D)
RTO = A + 4 D
A: 平滑化されたRTT(平均の評価値)
D: 平滑化された平均偏差
Err: 実際の測定値と現行RTT評価値の差分
g = 1/8 = 0.125
h = 1/4 = 0.25
Karnのアルゴリズム
タイムアウトと再転送が発生したとき再転送されたデータの
確認応答(Ack)が返ってきてもRTT評価値を更新しない
(どの転送へのAckかわからないので)。
- 往復時間の測定 (Fig.21.2, Fig.21.3)
500ミリ秒単位、コンクションあたり1つのRTT値しか計算しない
- RTT評価値の計算 (Fig.21.5)
初期値
A=0, D=0;
RTO = A + 2D = 0 + 2*3 = 6 (秒) ←初期値の計算だけDの係数は2となる
最初のSYNの転送の5.802秒後に失敗しタイムアウトする
RTO = A + 4D = 0 + 4*3 = 12 (秒) ←以降Dの係数は4となる
指数バックオフ(最初の失敗なので2)をかけて 12*2=24(秒)が次のRTO
もしその次があると 12*4=48 (秒)がその次のRTO
再転送後 ACK が 467 ミリ秒で到着
AとDの値は更新されない (Karnのアルゴリズムによる)
最初のデータセグメントのAckが到着すると(Fig.21.2のセグメント2)、
3クロック周期(M=0.5*3=1.5)がカウントされ、評価値は次のように初期化される
A = M + 0.5 = 1.5 + 0.5 = 2
D = A/2 = 1
RTO = A + 4D = 2 + 4*1 = 6 秒
2番目のデータセグメントの Ackが到着すると(Fig.1.2のセグメント5)、
1クロック周期(M=0.5*1=0.5)がカウントされ、評価値は以下のように変わる。
Err = M - A = 0.5 - 2 = -1.5
A = A + g Err = 2 - 0.125 * 1.5 1.8125
D = D + h (|Err| - D) = 1 + 0.25 *(1.5-1) = 1.125
RTO = A + 4D = 1.8125 + 4 * 1.125 = 6.3125