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

コネクション分割管理方式の動作

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

Time vs. Cwnd

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

4.4 コネクション分割管理方式の動作

のバッファが割り当てられる形になる.例えばバッファサイズ 128kバイトの場 合,多重度32では 1サブコネクションあたり 4k バイトとなり,MTU1500 バイトの場合,2.7パケット分しかなくなり,各サブコネクションが輻輳制御や 再送制御を行うのは難しいと考えられる.

送信セグメントの先頭シーケンスナンバーおよび,末端シーケンスナンバー を送信リストに記録する.

sc ownd 及び,ownd の増加分を計算.

他に送信可能なサブコネクションがあれば切り替えてアクティブにする.

4.4.4 ACK 受信時の処理

ACKを受信した際に処理すべき事柄について述べる.

送信リストを検索し,ACK された送出済みセグメントとその送信を行った サブコネクションを探し出す.

当該セグ メントが ACK されたことにより,当該セグ メントを送信したサ ブコネクションが fastrecovery 中であれば,fastrecoveryが終了できるか ど うかをチェックして終了処理をおこなう.

サブコネクションの sc cwndは,サブコネクションが fastrecovery中でな ければ, 1MSS ACK されたことにより,sc cwndsc ssthresh 以下であ る slowstart 時には 1MSSsc cwndsc ssthresh より大きいcongestion

avoidance時には (MSS2)=sc cwnd 分だけ増加する.サブコネクションが

fast recovery中およびセグ メントロス発生時であれば sc cwndの値は変化 させない.

全ての場合において sc owndACK された分だけ値を減少する.

4.4.5 SACK 受信時の処理

SACK を受信した際に処理すべき事柄について述べる.SACK を受信すると いうことは同時に ACKを受け取る事でもあるため,SACKの処理を行う前にま ず ACK の処理を行う.

受信した SACK 情報と,送信側で保持している SACKedブロックを照合 し ,新たに SACK された部分に対して,sc ownd の計算を行う.

全ての場合において sc owndSACKされた分だけ値を減少する.

SACKedブロックと送信リストを照合し,新たに SACKされたセグメント

の送信リスト項目に SACK されたという情報を記録する.

当該セグメントが SACKされたことにより,当該セグメントを送信したサ ブコネクションが fastrecovery 中であれば,fastrecoveryが終了できるか ど うかをチェックする.

SACK ホールに該当するセグ メントの送信リスト項目の NACK カウント をインクリメントする.

送信リスト項目に記録されている再送処理用シーケンス番号を参照し,新 しくSACKされたセグメントのシーケンスナンバーが送信リスト項目に記 録されている再送処理用シーケンスナンバーより大きい場合,当該送信リ スト項目のNACK カウントをインクリメントする.これにより,再送した セグ メントの再送の判定を行うことができる.

4.4.6 Fast Retransmit

コネクション分割管理方式におけるfastretransmitの動作について述べる.fast

retransmit の処理を行う場合は,ACK処理,及び SACK 処理を済ませた送信リ ストを参照する.参照するタイミングは,ACK 受信処理時,またはセグ メント 送信処理時のどちらでも良い.本研究においては,FreeBSDの実装上,ACK 受 信時に参照する方法を選択した.

全てのサブコネクションに対して,各々送信リストを参照していき,NACK カウントが閾値以上になっている送信リスト項目が存在するかど うかを確 認する.

NACKカウントが閾値以上になっているセグメントは ,そのセグメントを 送信したサブコネクションが fastretransmit を行う.

fastretransmitしたセグメントの該当する送信リスト項目の再送処理用シー ケンスナンバーの部分に,サブコネクションがその時点で送信済みの最大 のシーケンスナンバーを記録しておく.また,NACKカウントを0にする.

1回の処理においては,1サブコネクションでは1度しか fastretransmitし ない.

sc cwnd を 2分の1の値にする.また,ssthreshにも同じ値を設定する.

fast recovery 終了判定に用いるため,サブコネクションがその時点で送信

済みの最大のシーケンスナンバーを記録する.

fast recovery 状態に移行する.

4.4.7 Fast Recovery

fast recovery 時の処理について述べる.fast recoveryfast retransmit発生 の後に行われる処理であり,fastretransmitしていないサブコネクションがfast

recoveryを行うことはない.fastrecoveryの処理を行う場合は,ACK処理,およ び SACK 処理を済ませた送信リストを参照する.参照するタイミングは,ACK 受信処理時,またはセグメント送信処理時のどちらでも良い.本研究においては,

FreeBSDの実装上,ACK 受信時に参照する方法を選択した.

全てのサブコネクションに対して,各々送信リストを参照していき,NACK カウントが閾値以上になっている送信リスト項目が存在するかど うかを確 認する.

NACKカウントが閾値以上になっているセグメントは ,そのセグメントを 送信したサブコネクションが再送する.

NACKカウントが閾値以上になっているセグメントが存在しなければ,未 送信の新しいデータを送信する.

fast recoveryしたセグ メントの該当する送信リスト項目の再送処理用シー ケンスナンバーの部分に,サブコネクションがその時点で送信済みの最大 のシーケンスナンバーを記録する.

1回の処理においては,1サブコネクションでは1度しかセグメントの送信 は行わない.

fast recovery 終了判定に用いるため,サブコネクションがその時点で送信

済みの最大のシーケンスナンバーを記録する.

fast recovery 状態を継続する.

4.4.8 Fast Recovery の終了判定と終了処理

fastrecoveryは以下の条件が満たされた場合終了する.fastrecovery中のサブ コネクションにおいて,fastretransmit時および,fastrecovery時に,セグメン トの再送を行った際にfastrecovery終了判定用に記録しておいたセグメントまで の全ての送信済みセグメントが ACK もしくは SACK された場合である.

fastrecoveryが終了したサブコネクションは,sc cwnd=sc ssthreshに設定さ れ,congentionavoidanceに移行する.

4.4.9 再送タイムアウト 時

再送タイムアウト発生時は,ACKが再送タイマの値を超えても返ってこない 場合であり,全てのサブコネクションに影響を与える.したがって,以下の対策 をとる.

全ての送信リストを破棄する.

全てのサブコネクションを初期化する.

サブコネクション数を 1にする.

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