したがって、普遍的な合意により、TCPはこの非常に賢いプロトコルであり、「スロースタート」と呼ばれる処理を行います。通常、確認応答なしにいくつかのパケットを送信する許可が与えられます。つまり、アイデアをここに移動させましょう。通常、その数は2です。TCPが開始すると、2つのパケットを次々に送信できます。最初の1つが確認されることなく、2番目が送信されます。しかし、それは待ちます。そして、スロットルのルールは、受信した確認ごとに未確認のパケットの数を1つずつ増やすことです。
それについて考えてみましょう。受信した確認応答ごとに、未確認パケットの数を1つ増やすことができます。したがって、合意した開始として、最初に2つのパケットを送信します。彼らは認められます。最初の謝辞です。私たちは自分自身に2つ送信することを許可していました。この最初の確認を受け取ったので、これを1から3増やします。そのため、これ以上の確認応答なしで、さらに3つのパケットを送信できます。以前に送信したものに対する確認が返ってきたら、それを4に増やします。これは「輻輳ウィンドウ」と呼ばれます。これは、回線上で送信されるウィンドウではありません。つまり、受信ウィンドウとは異なります。これは、先に送信できるデータ量を示すTCPヘッダーの16ビットです。これは窓です。それ'
確認応答を受信するたびに送信を許可される未確認パケットの数を増やし続けると、ある時点で制限に達します。このシステムの優れている点は、ルーター間で文字通りリンクする最も弱いリンクよりも速くパケットを送信しようとすると、ある時点で最も弱いリンクが壊れるポイントが見つかるということです。送信しようとしているパケットが速すぎるため、送信しようとしているパケットがドロップされます。そのため、もう一方の端からの確認は、データが送信されなくなったために停止します。
そして、TCPが行うのは、それが受信に失敗した場合です-これは戦略によって異なります。時間の経過とともに、戦略、実際の輻輳回避戦略は大きく異なります。TahoeやRenoのような名前があります。また、動作が何であるかを特定しているグーグルやWikipediaを実行すると、他にもたくさんの名前が表示されます。しかし、アイディアは、送信者が確認が欠落しているためにデータが送信されなくなったことに気づくと、送信レートを素早く削減するというものです。通常、それはそれを半分に分割します。したがって、それは劇的に縮小し、それから増加に戻ります。
つまり、本質的にこれが意味することは、パケットを失うことは「データをこれ以上速く送信することはできません」のシグナリング機能であり、インターネットのすべての接続の両端にあるTCP送信者は常に一種であるということです。 2つのエンドポイント間で利用可能な最大速度、つまり、どこにいても最も弱いリンクよりも速くなるように試み、それらは常にそれを限界まで押し上げています。したがって、パケットを送信する能力よりも弱い場所がどこかにあるとすると、彼らはパケットを送り出すのでそれを見つけるでしょう。送信するデータがあり、高帯域幅の接続が確立されている限り、送信者は送信レート、つまり未処理のパケットの数、確認としてオンザフライで送信できるパケットの数を増やします。戻って、それが押し過ぎるまで積極的にその数を上に動かし続けます。その後、それはかなり後退し、その後再び前進します。
つまり、これはTCP接続間で実際に起こっていることです。たとえば、おそらく何パーセントかはわかりませんが、インターネット上のトラフィックの非常に大きな割合はTCP接続を介しています。カーネル内のすべてのオペレーティングシステム、いわゆるTCPスタックには、これらのカウンターがあります。また、ファイルを送信するとき、大きなファイルをアップロードするとき、またはWebページを受信するときも、反対側のサーバーが同じことを行います。これは、個々の接続ベースで、まだ確認されていないパケットをできるだけ多く押して、失敗または途切れ始めるポイントに到達するまでパケットレートを上げています。その後、それは後退し、物事が回復できるようにしてから、再び動作を再開します。
そして、それは結局のところ、制約を考えると、一種の自己抑制的なシステムになってしまうのです。