ネットワークの輻輳とは

ネットワークの輻輳(ふくそう)とは、ネットワークが混雑している状態です。英語では「congestion」です。ネットワークの輻輳が起こってしまう可能性があるのは、主に次のようなリンクを集約しているところや速度差があるポイントです。

図 輻輳が起こりやすいポイント
図 輻輳が起こりやすいポイント

テイルドロップ

こうしたポイントでは、パケットを出力するよりも多くパケットが到着することがあります。インタフェースからパケットを出力するときには、いったん、キューにパケットを格納します。キューからパケットを出力するよりも多くのパケットが到着すると、キューにパケットがどんどん溜まっていきます。キューのサイズは有限です。キューがいっぱいになってしまうと、新しく到着したパケットはキューに入りきらずに破棄されてしまいます。これがテイルドロップ(tail drop)です。

図 テイルドロップ
図 テイルドロップ

つまり、ネットワークの輻輳が発生すると、テイルドロップによってパケットが破棄されることになります。

グローバルシンクロナイゼーション

TCPには、ネットワークの輻輳を検出して、輻輳を回避する機能があります。TCPではパケットが失われると輻輳とみなします。輻輳が発生するとパケットがテイルドロップされるからです。そして、輻輳を回避するために、送信元で送信レートを下げます。

たくさんのアプリケーションのフローのパケットがテイルドロップされて破棄されると、その送信元のすべてのアプリケーションが同じようなタイミングで一気に送信レートを下げることになります。このような現象をグローバルシンクロナイゼーションと呼びます。多くのアプリケーションフローの送信レートが一気に下がり輻輳が解消されますが、帯域幅の利用効率がわるくなってしまいます。

図 グローバルシンクロナイゼーション
図 グローバルシンクロナイゼーション

UDPを利用しているアプリケーションのフローはこうした輻輳回避は行いません。

たくさんのアプリケーションが同時に送信レートを下げるようなグローバルシンクロナイゼーションが発生しないようにするために、WRED(Weighted Random Early Detection)を利用します。