詳解TCP/IP れにうむ イントロダクション TCP4種類のタイマー 再転送タイマ ○ 今回 持続タイマ ○ 次章で解説 キープアライブタイマ(相手通信可能?) ○ 次の次の章で解説 2MSLタイマ ○ すでに解説(18章6節) 再転送タイマー シンプルなタイムアウト・再転送 ACKが帰ってこない時、再転送間隔は四捨 五入すると、たとえば ○ 1s 3s 6s 1s 24s 48s 64s 64s … ○ 64sを最大値にして指数関数的に増えていっ ている このように増加することを指数バックオフという 往復時間の測定 往復時間(RTT)測定の必要性 往復時間を測定することによりTCPはタイ ムアウトを適正な時間に補正する RTT評価値 オリジナルのTCP仕様で使用される、往復 時間を評価する値 ○ 以下、往復時間をM,RTT評価値をRとする 往復時間の測定 RTT評価値 R ← αR + ( 1 – α )M で、更新されていく ○ ←は代入 ○ 右辺のRは更新前のR ○ αは「 新しい測定値がどのくらい評価値に影 響をあたえるか 」という係数(0<α<1) デフォルトは0.9 往復時間の測定 再転送タイムアウト値(RTO) 転送したデータが、届かなかったと判定し、 再送するまでの時間 RTO=Rβ で計算される ○ 往復時間評価値のβ(遅延分散系数)倍 βのデフォルトは2 往復時間の測定 前ページの再送の欠点 必要でない再転送により生じるRTTの変動 に対応できない Jacobsonが新しい計算式を提案 往復時間の測定 Jacobsonの計算式 Err = M – A ○ M(RTT測定値) A(RTT評価値) A ← A + g Err ○ gは係数デフォルトが0.125 D ← D + h ( | Err | - D ) ○ D(平滑化された平均偏差) h(偏差の変数0.25) RTO = A + 4D ○ RTO(再転送タイムアウト値) コラム Karnのアルゴリズム 再転送をした場合帰ってきたACKがど れに対するものかわからない 正確な往復時間を知ることができない ○ 再送された通信ではRTOを更新しない 実際の計算 初期のRTO RTO=A + 2D ○ 2Dははここだけで使って以降は4D この時の初期値はA=0、D=3 ○ 初期RTO = 0 + 2 * 3 = 6 実際の計算 一回ACKが到着後A/D初期化 A = M + 0.5 D=A/2 輻輳制御 輻輳状態 あるポイントでルータの限界に達すじて、 パケットが破棄される状態 輻輳制御 前提 パケットの消失はほぼ原因は輻輳 ○ 実際、破損での消失は1%未満 輻輳制御 パケット消失の検知 タイムアウトの発生 重複ACKの受信 輻輳制御 重複ACK 予想していたパケットを飛ばしてパケット を受信した場合、そのデータをセーブして、 前回と同じ番号のACKを送る。 ○ 飛ばされたものが送られるまで繰り返す。 ○ 同じACKの受信でデータの消失を探知する 輻輳制御 輻輳回避とスロースタート スロースタート ○ データ送信開始時に徐々に送信セグメントを 増やす 輻輳回避 ○ スロースタートで増やした結果輻輳がおもっ たら輻輳回避 輻輳回避 輻輳ウィンドウとスロースタート閾値 輻輳ウィンドウ(以下 cwnd) ○ 確認応答を待たずに送っていいセグメント数 スロースタート閾値(以下 ssthresh) ○ スロースタートをする基準値 輻輳回避 実際の動作 1 コネクション初期化時 ○ cwnd 1セグメント ○ ssthresh 65535バイト 輻輳回避 実際の動作 2 TCPでは、受信側が広告したウィンドウサ イズか、cwndを超えた送信をしない ○ 前者は受信者側のフロー制御 ○ 後者は送信者側のフロー制御 輻輳回避 実際の動作 3 輻輳が発生 ○ 現行ウィンドウサイズの半分をssthreshに ○ 輻輳の検知がタイムアウトの場合cwndは1 要するに、スロースタートしだす 輻輳回避 実際の動作 4 cwndがssthreshと等しい又は小さい場合 ○ スロースタートを行う 確認応答が帰ってくるたびにssthresh以下の 範囲でcwndを指数関数的に増やす ○ ssthreshは問題があったウィンドウサイズの 半分 輻輳回避 実際の動作 4 続 cwndのサイズがssthreshを越した時 ○ 輻輳回避を行う 輻輳回避 輻輳回避 輻輳回避では、確認応答が帰ってくるたび、 cwndを1/cwndごと増加させ、セグメントサ イズの断片を加算 ○ スロースタートよりゆっくりな増加 高速再転送 説明する前に… TCPでは順番の違うセグメントを受け取っ た時に遅滞なく重複ACKを送らねばならな い。 高速再転送 消失の判定 重複ACKを1-2個受け取っただけでは順序の 入れ替えが起こっただけの可能性も高い しかし、3個以上重複ACKが来る場合消失の 可能性が高い ○ 再転送タイマが切れる前に再転送する この時、スロースタートはしない 高速再転送 具体的な動作 1 3番目の重複ACKが送られてくる ○ ssthreshがcwndのサイズの半分に ○ そして、消失セグメントを再転送 ○ cwndサイズを一時的にssthreshにセグメント サイズの3倍を加えたものにする 高速再転送 具体的な動作 2 別の重複ACKが来る ○ cwndをセグメントサイズ単位で増加させてパ ケット送信 高速再転送 具体的な動作 3 新しい確認応答が到着 ○ 最初の段階で消失したデータが相手に到着し たことがわかる ○ cwndのサイズをssthreshに設定する ICMPエラー コネクションするときに返されることの 有る一般的なICMPエラー 発信元抑制 ○ ルータなどのメモリが一杯になりそうなとき ホスト到達不可、ネットワーク到達不可 ○ 相手に到達できない時 ICMPエラー 送信元抑制発生時 スロースタートに初期化する ○ cwndを1に、ssthreshは変えない ICMPエラー ホスト到達不可、ネットワーク到達不可 一時的なものとみなして無視 ○ タイムアウトまで再転送する タイムアウトするとエラーコードはタイム アウトではなくICMPのものになる 再パケット化 再転送するとき無理に同じセグメントで 送らなくてもいい 複数をまとめて効率化 ○ 確認応答が受信バイト数だから出来る技 END 終
© Copyright 2024 ExpyDoc