• 検索結果がありません。

コネクション分割管理方式のアルゴリズムの意図

ドキュメント内 ( ) (ページ 50-54)

Time vs. Cwnd

4. 提案するコネクション分割管理方式

4.5 コネクション分割管理方式のアルゴリズムの意図

4.5.2 サブコネクション数の動的増減

送信開始時および,再送タイムアウト後において,サブコネクション数を1に しする理由は,ネットワークの状態が未知であるときにいきなり多くのデータを 送信してしまうのは他のネットワーク利用者に有害である可能性が高いからであ る.上記の n 本のTCPコネクションによる同時転送では slowstart開始時のウ インドウサイズが n 倍となる.slowstart 開始時のウインドウサイズの拡大に対 する研究 [17] によると,拡大するウインド ウサイズの最適値は4MSS程度と報 告されている.しかし,現在のところ標準になっているわけではない.本研究に おいては,輻輳制御及び再送制御の改善に主眼をおいているので,他の部分では できるだけ conservativeな振る舞いを示すようにした.

4.5.3 送信リストについて

サブコネクションが送信したセグ メントをACK 受信時まで記憶しておかなけ ればならないため,送信リストは必須である.ACK 受信時には送信リストを線 型にたどっていかなければならないため,ネットワークの負荷が極めて高くなる とこの部分がボトルネックになる可能性がある.しかし,典型的なデータ送信に おいては,ACKされるセグメント数は1または2であるため,ACK 受信処理時 にリストをたどることによるオーバーヘッドは少ないと考えられる.

送信リストを用いずにコネクション分割管理方式を実現するためには,TCPオ プションを定義して送信側,受信側双方が対応しなければならない.WWW 等 を想定すると,多数のユーザが利用するアプリケーションを考えると受信側も対 応する必要があるものは普及しにくいと考えられる.本研究では,送信側のみの 対応で済むという点を重視し,送信リストを保持することにした.

4.5.4 再送対象の決定について

本研究では,再送を行うべき対象を決定するにあたり,NACK カウントの閾 値を3と定義した.したがって NACKカウントが 3になったセグメントはセグ メントロスに遭遇したものと判断し,再送される可能性を持たせるということで ある.

閾値の定義は,ネットワーク中でのセグメントの入れ替わりが発生する可能性 があり,従来の TCPにおいても,重複ACK3つ受信した時にセグメントロ ス発生の判断していることから,3が適切だと判断したためである.

4.5.5 再送について

再送したセグメントが再びセグメントロスに遭遇することもあり得る.従来の

TCP では一度fast retransmitまたは fastrecoveryにおいて再送したセグメント は再送タイムアウトが起こらない限り再び再送することはない.

本研究においては再送タイムアウトをできるだけ減らすため,再送タイムアウ トを待たずに再送済みのセグメントを必要に応じて何度でも fastretransmitまた

fastrecoveryにおいて再送できる機構を設けた.これは,初めてそのセグメン

トを送信する場合はそのセグ メントの末端シーケンスナンバー,fast retransmit または fastrecoveryにおいて再送を行うときは TCPコネクションで送信済みの 最大のシーケンスナンバーを送信リスト項目の再送処理用シーケンスナンバーの 部分に記録することで統一的に実現している.

以後,新しくSACKされたセグメントのシーケンスナンバーと再送処理用シー ケンスナンバーを比較し,後者の方が大きければ NACK カウントをインクリメ ントする.この操作の意味を以下に述べる.

まず,再送されていないセグメントの場合を述べる.対象とするセグメントを セグメント A とする.セグ メント A より大きいシーケンスナンバーをもつセグ メントが SACK された場合,セグ メント ASACK された部分のセグ メント に追い越されたことがわかる.追い越された理由が,ネットワーク中でのセグメ ントの入れ替わりによるものなのか,もしくはセグ メント A がロスしたからな のかはわからない.これが3回繰り返された場合,すなわちセグ メント A より 後に送信されたセグ メント A より大きいシーケンスナンバーをもつセグ メント が 3SACK された場合は,セグ メント A は 自身より後に送信されたセグ メ ント3つに追い抜かされたか,セグ メント Aがロスしたかのどちらかであるが,

前者である確率はかなり低い.したがってこの場合はセグ メント A がロスした と判断しても問題ない.

B

Sender Receiver

A

time

B+1 B+2

B+3

retransmitted segment trigger segment

10 セグ メント A 再送時の状況

次に,再送済みのセグメントの場合を述べる.対象とするセグメントをセグメ ント A,セグメント Aが再送された時点でTCPコネクションで送信済みの最大 のセグメントをセグ メント B とする.上で述べた操作により,セグメント Aの 送信リスト項目の再送処理用セグ メントナンバー記録部分にはセグ メント B の 末端シーケンスナンバーが記録されている.セグメント A はセグメント B の直 後に送信されている.図10に,この場合の送信されているセグ メントの状況を 示す.セグ メント B より大きいシーケンスナンバーをもつセグ メントが SACK された場合,再送された セグメント ASACKされた部分のセグメントに追い 越されたことがわかる.追い越された理由が,ネットワーク中でのセグメントの 入れ替わりによるものなのか,もしくはセグ メント A がロスしたからなのかは わからない.これが3回繰り返された場合,すなわち3回セグ メント A より後 に送信されたセグ メント B より大きいシーケンスナンバーをもつセグ メントが

3回 SACKされた場合は,セグメント Aは 自身より後に送信されたセグメント

3つに追い抜かされたか,セグメント Aがロスしたかのどちらかであるが,前者 である確率はかなり低い.したがってこの場合はセグ メント A がロスしたと判 断しても問題ない.

4.5.6 Fast Recovery 時の振る舞いについて

従来の TCP では,アウトスタンディングウインド ウの値を明示的に保持して いなかったため,fastrecovery 時には,cwndssthresh(ロス発生時の cwnd

2分の1)+ 重複ACK2 MSSに設定し,重複ACKを受信するたびに cwnd

の値を1MSS 増加するという例外的な操作を行っていた.この操作をcwndのイ ンフレーションと呼んでいる.また,NewRenoにおいては partialACKが返っ てくると,新たにACK された分だけ cwndを減少させていた,これを cwnd の デフレーションと呼ぶ.

この処理で実現したいことは,再送したセグメントがACKされるまで,NewReno においては partialACKへの対応があるため再送した時点で送信済みのセグメン トが全て ACKされるまでアウトスタンディングウインド ウをロス発生時の2分 の1に保つということである.

コネクション分割管理方式においては,アウトスタンディングウインド ウの値 を明示的に保持しているため,fast recovery 時にはcwnd のインフレーションや デフレーションを起こさずとも owndの値を操作するだけで等価な処理を実現で きる.

4.5.7 FACK 的アルゴリズムについて

コネクション分割管理方式においては,重複ACK受信時においても SACK情 報の利用により,SACKされたセグメントについてはアウトスタンディングウイ ンド ウから除外する.厳密には FACK と同一ではないが,コネクション分割管 理方式におけるこのアルゴ リズムを FACK 的アルゴリズムと呼ぶ.

また,コネクション分割管理方式においては,SACK情報の利用により,NewReno 的な処理,すなわちfastrecovery中にでも,NACKカウントが閾値を超えて再送 が必要であると判断されたセグメントについては送信する.厳密にはNewRenoと 同一ではないが,コネクション分割管理方式におけるこのアルゴリズムは,FACK 的アルゴ リズムに包含されるものである.

ドキュメント内 ( ) (ページ 50-54)