Transcript Document
自律分散協調システム論
第10回「TCPと輻輳制御」
中村 修
[email protected]
TCPと輻輳制御
• 輻輳制御の重要性
• 輻輳制御の困難さ
• TCPによる輻輳制御
輻輳制御の重要性 (1/2)
• 輻輳は悪化していく傾向がある
玉突き事故
三次災害
二次災害
輻輳発生
輻輳制御の重要性 (2/2)
• ネットワークに自律的な輻輳回復機能がない
– ネットワークはできるだけ仕事をしない
• エンドノードが輻輳を回避する必要がある
• エンドノードは故意に輻輳を起こせる
– DoSアタック
輻輳制御技術の大まかな歴史
• 初期のインターネット:輻輳制御技術なし
• 1980年初
輻輳崩壊の発生が指摘される
• 1980年後半
エンドノード主体による輻輳制御技術の出現
• 1990年後半
中継ノード主体による輻輳制御技術の出現
• 現在
広帯域・低遅延要求アプリケーションの台頭
インターネット速度記録(TCP高速化技術)
輻輳制御の困難さ (1/2)
• エンドノードはネットワークの状態が分からない
– 自分で推測してネットワークに送出するだけ
パケットを少なく出すのか?
パケットを多く出すのか?
ネットワークは教えてくれない
IPネットワーク
輻輳制御の困難さ (2/2)
なぜインターネットの状態は分かりにくい?
• IPの特徴
– 様々な通信媒体の性質を抽象化
• 上位プロトコルから通信媒体の性質が見えにくい
– 中継システムの簡素化
• ネットワークの許容量が不明
• ネットワークの混雑度が不明
アプリケーションとトラフィックパターン
• TCP
– インタラクティブデータフロー
• パケットを直ちに送出
– アプリケーション例:SSH, Telnet などコンソールアプリケーション
– バルクデータフロー
• フロー制御によってパケットを送出
– アプリケーション例:http, ftp, メール など
• UDP
– フロー制御・輻輳制御を行わない
– アプリケーション例:ストリーミング, VoIP など
それぞれが異なるトラフィックパターンを有する
アプリケーショントレンドの推移
トラフィックの推移
100%
90%
ポート番号からサービス
特定がしにくい時代
80%
70%
データ量(%)
60%
Others
Napster
SMTP
HTTP/HTTPS
FTP
P2P登場
50%
40%
WWW全盛
30%
20%
出典: WIDE報告書(1994-1999)
2000-2005はdaily sampling
10%
0%
1994
1995
1996
1997
1998
1999
2000
年
2001
2002
2003
2004
2005
15年前のアプリケーションモデル
•
サーバ・クライアントモデル
– サービスを提供する側と受ける側に役割を分担
– 情報(データ)は「提供する側」に存在
•
情報(データ)のありか
– 情報(データ)が格納されているサーバは「何らかの方法」で探し出す
• archie プログラム
– サーバ数が多くない上、有名なサーバには様々な種類の情報(データ)が大量に存在
•
情報(データ)の集まり方
– 情報(データ)が一箇所に集まるので、利用者も一箇所に集中してアクセスする
ソフトウェアファイル
サーバAから
ソフトウェアを
ダウンロードしよう
ドキュメントファイル
巨大なサーバ: A
サーバAから
ドキュメントを
ダウンロードしよう
インターネット
利用者
クライアント
クライアント
利用者
10年~5年前のアプリケーションモデル
•
サーバ・クライアントモデル
–
–
•
「置き場所」としてのサーバは変化せず
能動的なクライアントも変化せず
情報の分散化
–
情報(データ)は、「リンク」が含むようになり、分散したサーバ間で情報が有機的に結びつけられるようになった
•
•
•
情報(データ)のありか:
–
情報(データ)が格納されているサーバは「何らかの方法」で探す
•
–
•
情報提供者はリンクを意識して情報(データ)を作成
情報利用者はリンクを辿り新たな情報(データ)を取得
cf. 検索エンジン、ディレクトリサービス
サーバの数が多く、大量の情報(データ)が分散して存在
情報(データ)の集まり方
–
インターネット中に分散して存在するが、利用者の増加に伴い人気のある情報(データ)を持つサーバにアクセ
スは集中
アドレスを指定
アドレスを指定
Webサーバ
インターネット
アドレスを指定
Webサーバ
Webサーバ
アドレスを指定
Webサーバ
最近のアプリケーションモデル
•
P2Pモデル
–
–
–
•
情報(データ)単位の分散化から、分割した情報(データ)の分散化
–
•
ファイル単位のやり取りから、ファイルの分割を前提とした断片単位のやり取りへ
情報(データ)のありか
–
–
–
•
あらかじめ役割を決めない
(サーバ・クライアントの両方の役割を担う)
対等な関係
断片化した情報(データ)はネットワーク上の任意のホストに存在
情報理論を応用した検索手法(分散ハッシュ etc…)
P2Pのピアになるホストの数だけ分散する可能性がある
情報(データ)の集まり方
–
–
完全な情報(データ)は、それをリクエストした人のところに存在
ネットワーク上には、断片化されたもの、完全なもの様々な形で存在
ファイルA
ファイルA
ファイルの断片化(6分割の例)
メディア通信と遅延
• デッドライン
– 再生を行うために間
に合わせなければな
らないタイミング
– これに遅れると映像
や音声が乱れる
• バッファ
– パケットロスや遅延な
どでデッドラインオー
バーが頻繁に起こら
ないようにデータを一
時的に蓄積
TCPによる
インターネット最高速度
• Interne2 Land Speed Record
• 東京大学、WIDEプロジェクト、
JGN2(NICT)、NTTコミュニ
ケーションズ などによる
• 2006年12月30日
– 30000km(実際には32372km)
のネットワーク
– 7.67Gbpsのデータ転送速度
– 230100 terabit-meters per
second (Tb-m/s)
• 2006年12月31日
– 同一ネットワーク
– 9.08Gbpsのデータ転送速度
– 272400 terabit-meters per
second (Tb-m/s)
TCPにおけるフロー制御
フローコントロール
②
もちょっとゆっくり
送って。
受信者
送信者
もちょっとゆっくり
③ 送るか。
①
キュー(バッファ)
早すぎてバッファがあふれる
フローコントロール
②
もっとはやく
送って。
受信者
送信者
③
じゃはやくおくるか
①
キュー(バッファ)
遅いから余裕があるな
ウィンドウ制御
• ウィンドウ広告 = 受信バッファ残量
• ウィンドウ更新
– ACKセグメントによる
• ACKを待たずに、複数セグメントを転送
– 転送効率の向上
スライディングウィンドウ
8
1
7
6
直ちに
転送可能
2
広告
ウィンドウ
3
5
4
スライディングウィンドウ
8
転送されたが
1 確認応答されていない
7
2
6
広告
ウィンドウ
3
5
4
直ちに
転送可能
スライディングウィンドウ
8
7
1
転送されて
確認応答済み
2
転送されたが
確認応答されていない
6
3
5
4
直ちに
転送可能
スライディングウィンドウ
8
7
1
転送されて
確認応答済み
2
転送されたが
確認応答されていない
6
3
5
新たに広告された
ウィンドウ
4
直ちに
転送可能
TCPにおける輻輳制御
TCPの輻輳制御機能
②
もちょっとゆっくり
送ろう。
送信者
受信者
輻輳
①
受信者からしばらく応答がない
輻輳が発生してパケットが届いて
なさそうだ
輻輳制御の重要性
• 輻輳は悪化していく傾向がある
輻輳発生
二次災害
なんらかの対処をしなければ
悪化する一方 (輻輳崩壊)
玉突き事故
TCPの輻輳制御アルゴリズム
• 非常に多くのアルゴリズムが存在
• 代表的な例
– TCP Tahoe
• スロースタートアルゴリズム,輻輳回避アルゴリズム,高速再転送アルゴ
リズム
– TCP Reno (TCP NewReno)
• 高速再転送アルゴリズム
– TCP Vegas
• RTTをベースとしたウィンドウサイズの調整
• OSによって実装されているアルゴリズムがことなることも
TCPの輻輳制御アルゴリズム(時代別)
• 1988年頃
– Tahoe
• スロースタート、輻輳回避アルゴリズムの採用
• 高速再転送アルゴリズムの採用
• 1990年頃
– Reno
• 高速リカバリ・アルゴリズムの採用
• 1996年頃
– NewReno
• 高速リカバリ・アルゴリズムの修正
Linux Kernel の持つ アルゴリズム
(Kernel 2.6.18の例, /usr/src/linux/net/ipv4/tcp_*.c)
•
Binary Increase Congestion control for TCP (BICTCP)
–
•
TCP Reno / TCP NewReno
–
•
Lawrence S. Brakmo and Larry L. Peterson.
TCP Veno
–
•
Tom Kelly
TCP Vegas
–
•
C.Caini, R.Firrincieli.
TCP Low Priority (TCP-LP)
Scalable TCP
–
•
R.N.Shorten, D.J.Leith.
TCP HYBLA
–
•
•
Sally Floyd.
H-TCP
–
•
Injong Rhee, Lisong Xu.
High Speed TCP
–
•
BSD系OSのデフォルト
Binary Increase Congestion control for TCP v2.0 (TCP CUBIC)
–
•
Lison-Xu, Kahaled Harfoush, and Injong Rhee.
Linuxにおけるデフォルトアルゴリズム
(変更可能)
C. P. Fu, S. C. Liew.
TCP Westwood+: end-to-end bandwidth estimation for TCP
–
Angelo Dell'Aera.
TCPの輻輳制御アルゴリズム (1/2)
• ネットワークの状態推測機構
– ネットワークの情報は直接手に入らない
– エンド間の通信から得られる情報で推察
• 単純なアルゴリズム
– パケットが落ちない
• 転送量を上げる
– パケットが落ちた
• 転送量を落とす
TCPの輻輳制御アルゴリズム (2/2)
• ウィンドウサイズを増減させ転送制御
– 送信者の輻輳ウィンドウ
– 受信者のウィンドウサイズ広告
• 2段階の通信状態
– スロースタート
– 輻輳回避
スロー・スタート
• スロー・スタート
– エンドノード間の回線状態はわからない
– 回線の許容量以下に送信量を制御する必要がある
– ネットワークへの突発的なトラフィック流入を防止可能
• 輻輳ウインドウ(cwnd)
– 送信者が送信可能なセグメント数を決定
– 送信者が管理するウィンドウ
– (注)受信者の管理するウィンドウとは別
スロー・スタートの仕組み
• スロー・スタートのアルゴリズム
– 通信開始時
• 輻輳ウィンドウサイズを1で初期化
– Ack受信時
• 輻輳ウィンドウをAck受信毎に増加
• 輻輳ウィンドウは幾何級数的に増加
スロー・スタートの概要
初期windowサイズは1で送信
1に対してAckを返す
送信者
受信者
windowサイズを2で送信
2に対してAckを2つ返す
windowサイズを4で送信
1,2,4,8,,,,と幾何級数的にウィンドウサイズを大きくする
輻輳回避状態
1. スロースタートを開始し、輻輳ウィンドウが増加
2. 送信者は、パケットロスを検知しスロースタートを停止
–
–
•
輻輳が発生したときの輻輳ウィンドウを記憶
輻輳ウィンドウを1に戻しスロースタートを再初期化
輻輳回避状態へ移行
–
–
記憶した輻輳ウィンドウまでは通常のスロースタート
記憶した輻輳ウィンドウに達すると
•
•
Ack受信ごとに輻輳ウィンドウを上げていかない
輻輳ウィンドウ分のAckを受信して輻輳ウィンドウを開く
TCP Tahoe におけるウィンドウサイズの変化
スロースタート
輻輳回避
ネットワーク
の限界
最適な
ウィンドウサイズ
スロースタート
閾値
t
TCP Reno におけるウィンドウサイズの変化
スロースタート
輻輳回避
ネットワーク
の限界
最適な
ウィンドウサイズ
スロースタート
閾値
t
往復時間の測定
• RTTから分かること
– 輻輳の度合い
– パケットロスの指標
• RTTは非線形に変化
– 外れ値の可能性
• 平滑化することでRTTを評価(RTT評価値)
R = αR+(1-α)M
– RはRTT評価値
– Mは新しい測定値
– αは平滑化係数(推奨値は0.9)
再転送タイムアウト値の算出
• 再転送タイムアウト値(RTT)
RTO = Rβ (RFC793推奨式)
– βは遅延分散係数(推奨値は2)
• 再転送タイムアウトするごとに増加
– 指数バックオフ
– 最大値64秒
高速再転送アルゴリズム
• 受信者のTCPが順番の違うセグメントを受信
– 確認応答(重複ACK)を生成する必要
• 単に順番が入れ替わった … (a)
– 受信者はセグメントを並び替えて上位層に渡す
• パケットロスが発生した … (b)
– 送信者は該当するセグメントを再送する必要
• 高速再転送アルゴリズム
– (a)、(b)をいち早く調べる方法
• 以下の場合、パケット損失の可能性高と判断
– 重複ACKを3つ受信した場合
• 再送タイマを待たずに直ちに再送する
高速再転送アルゴリズム
• 再送タイムアウトを待たずに再送
• 迅速な再送による転送効率の向上
5
4
3
2
1
発信元
2番のパケットが
届いていない!
5
4
2番パケットを転送 Packet loss
3
1
インターネット
3が届いた時点で1番へのACK
1番へのACKが
3が届いた時、4が届いた時、5が通ったとき
の合計3回届く
宛て先
セルフクロッキング (1/3)
• 経路の一番細い部分がボトルネックとなり、パケッ
トギャップが発生する
ボトルネック
送
信
者
ルータ
帯域が広い
ルータ
帯域が狭い
パ
ケ
ッ
ト
ギ
ャ
ッ
プ
帯域が広い
受
信
者
セルフクロッキング (2/3)
• 受信者はパケットギャップの間隔でAckを返してくる
送
信
者
受
信
者
ルータ
帯域が広い
ルータ
帯域が狭い
帯域が広い
セルフクロッキング (3/3)
• Ackの受信間隔に合わせてパケットを送出する
– 通信のバースト性が抑えられる
送
信
者
受
信
者
ルータ
帯域が広い
ルータ
帯域が狭い
帯域が広い
まとめ:TCPにおける輻輳制御
•
•
•
•
•
ネットワークの状態を動的に推測
輻輳が発生すれば転送速度を落とす
輻輳が起きないギリギリまで転送速度を上げる
できるだけ早く最適なウィンドウサイズに到達する
ウィンドウサイズが安定すると通信も安定する