送信レートをどのように制御したら良いであろうか。
フロー制御と輻輳を考えて送信レートを制御する
送信レートの制御には、2つの制約要素を考える必要がある。第一は、フロー制御である。これは、受信側に十分な受信バッファがない場合に必要となる。第二は輻輳であり、ネットワークの容量が不足する場合に問題となる。
ネットワーク層からのフィードバックで制御するが、フィードバックの内容が様々
トランスポート層プロトコルが送信レートを制御する方法は、ネットワークを通して返されるフィードバック情報に依存する。ネットワーク層が違うと、フィードバックの仕方も違う。フィードバックは明示的であることも、暗示的であることもある。それはまた、正確であることも、曖昧であることもある
様々なフィードバック
明示的で正確な方法の一つは、ルーターが送信側に対してレートをシグナルとして伝えることである。XCPなどはこの方法を使う。
明示的で曖昧な方法の一つは、TCPとECNを組み合わせて使う方法である。これは、輻輳を経験したパケットの中にルーターがビットを立てて、送信側に遅くするように伝えるのがあるが、どの程度遅くするかは伝えない。
暗示的な方法はシグナルを用いない。FAST TCPは計測した往復時間を暗示的なシグナルとして用いて、輻輳回避を行う。
今日のインターネットで広く利用されている輻輳制御は、TCPwith drop-tailあるいはREDルーターと呼ばれるものである。これはパケット・ロスを推定し、それに基づいてネットワークが輻輳状態であるかどうかを判断する。この種のTCPの変形は多数ある。
制御規則によって送信レートを上げ下げする
明示的で、正確なシグナルが与えられるのであれば、トランスポート・エンティティは、それを用いて送信レートを制御することができる
。例えばXCPでは、送信者にレートが通知されると、送信者は単純にそのレートを使うだけである。しかし他の場合は、推測が必要となる。輻輳を示すシグナルがなければ、送信者は送信レートを上げる
。一方、輻輳を示すシグナルが与えられたとき、送信者は送信レートを下げる
。送信レートの上げ下げの方法は、制御規則(control law)
と呼ばれ、これが性能に大きな影響を与える
AIMD(加算増加・乗算減少)の効率性と公平性のグラフを見て段々と最適点に収束される
加算で増加、乗算で減少させる場合(AIMD)を考えよう。AIMDの動作を図6-25に示す。効率的で公平な最適動作点に向かって進むことが理解できるであろう。どのような動作点からスタートしても最適点に収束する。これがAIMDが広く使われる理由である。
上記に加えて安定性に関する議論の結果、AIMDがTCPが制御規則として用いられている(すぐに輻輳状態になったり、回復が遅いとネットワークは不安定である。したがって、安定性のためには、増加は緩やかで、減少は緩やかの方が良い)