TCPはトラフィックレートを調整する
ネットワーク層から輻輳のフィードバックを受け取り、ネットワークに送信するトラフィック・レートを低くするかどうかはトランスポート層次第である。インターネットにおいて、TCPは信頼性の高い転送の主な担い手であると同時に、輻輳制御においても主要な役割を果たす。TCPが特別なプロトコルであるのはそういう理由である。
サイズを輻輳ウィンドウにより管理する
TCPは輻輳ウインドウ(congestion window)を管理する。輻輳ウインドウのサイズは、送信側がネットワーク上に滞留させることができるバイト数の上限を意味する。輻輳ウインドウに対応する送信レートは、ウインドウの・サイズを各コネクションの往復時間で割ったものである。TCPはAIMDに従ってウインドウ・サイズを調節する。
フロー制御ウインドウに加えて、輻輳ウインドウがあることを思い出そう。フロー制御ウインドウは受信側がバッファできるバイト数を示している。両ウインドウは並行して片越される。送信側が許されるバイト数は二つのウインドウの小さいほうである。それゆえ実際に効果を持つウインドウ・サイズは、送信側はこれで良いと思うウインドウ(つまり輻輳ウインドウ)と、受信側がこれで良いと思うウインドウ(つまりフロー制御ウインドウ)の小さいほうである。
輻輳崩壊
輻輳崩壊(congestion collapse)と呼ばれる最初の現象が起こっていた。ネットワーク内の輻輳のため、かなり長期的の間グッとプットが急激に落ち込んだのである。(100倍以上)。
パケットロスで輻輳を判断する
パケット・ロスが輻輳信号として適切であることに気づいた。この信号は少し遅れてくる(ネットワークがすでに混雑してるため)が、それはかなり信頼できるものである。結局のところ、過負荷がかかっている時、パケットを落とさないルーターを作り上げることは困難である。この事実が変わる可能性は低い。
しかしながら、輻輳信号としてパケットロスを利用することは、送信誤りが比較的まれに発生する場合でなければうまくいかない。
再送信タイマーでネットワークにかかる負荷を知る
インターネットのあらゆるTCPアルゴリズムはパケット・ロスを輻輳に起因するとみなし、タイムアウトを監視し、トラブルの徴候を探している。パケット・ロスを正確にかつ迅速に見つけるためには良い再送タイマーが必要である。TCPの再送信タイマーが往復時間の平均や変動をどのように評価するかはすでに学んだ。
再送信タイマーの機能が良ければ、TCPの送信者は確認通知の戻ってこないパケットのバイト数を把握できる。すなわち、ネットワークにかかっている負荷がわかるということである。送信済みの順序番号と確認通知が返ってきた順序番号の違いを調べることは簡単である。