TCPスライディングウィンドウと輻輳制御

 

ウィンドウプロトコル(スライディングウィンドウ)スライド、TCPプロトコルは、輻輳を回避するために、データ伝送ネットワークのフロー制御のために、アプリケーションに属します。このプロトコルは、複数のデータパケットを送信する前に確認のため、送信者は停止し、待機することができます。各送信側がデータ伝送プロトコルは、ネットワークのスループットを向上させること、加速することができるように、承認待ちが停止し、パケットを送信する必要はありませんので。

 

TCPフロー制御は、スライディングウィンドウの概念によって行われます。すぐに送信側でデータを送信し、受信側の場合には、そのデータが失われないトラフィック制御のための明確な必要性を確保し、両者の間のワーク通信のペースを調整するために、速度が非常に遅く、受信の速度を想像してみてください。いわゆるスライディングウィンドウ、受信側が提供できることを理解すべきバッファサイズ。TCPはそれがはるかにバッファを提供することができ、データを送信するために、送信者に伝えるためにスライディングウィンドウを使用します。窓16は、ビットによって定義されているため、TCPは、受信端のバッファー65535バイトの最大値を提供することができます。従って、ウィンドウサイズは利用することができ、シーケンス番号のデータが受信データ・シーケンスの最大数を計算します。 

 

スライディングウィンドウは、基本的に自分のデータは、このデータに基づいて、どのくらいの時間を計算するように送信するためのTCPデータの送信者の受信者のデータバッファサイズの記述です。送信者、受信ウィンドウサイズがTCPパケット0の受信者である場合には、送信者は、データの送信を停止し、受信者がデータグラム0の到着のためのウィンドウサイズを送信しなくなるまで待ちます。 

 

ウィンドウが閉じ:右に左の窓から接近すると、データが送信され、承認されたときに、この現象が発生します。   
       オープンウィンドウ:ウィンドウの右側には、時間に沿って右方向に移動する場合、この現象は、データを受信した後、プロセスの終了時に発生します。   
        ウィンドウはシュリンク:ウィンドウの右側に沿って左に移動するとき、現象はほとんど発生しません。   
        TCPは、ゆっくりと右のデータに左から移動し、このウィンドウを使用することで、窓の外の範囲内になるようにデータを送信する(だけで送信することができ、ウィンドウ内のデータのすべてを、送信されません。)。これは、ウィンドウの意味です。ウィンドウのサイズは4096が最高のウィンドウサイズではありません、ソケットを介して開発することができ、および16384が大幅にスループットを向上させることができます。

 

A ---- C ---- B

 

AとBとの間のTCP接続を確立するために、上記のように、スライディングウィンドウを達成するために2つの機能を有します。 

 

対称性のため、ウィンドウのみを考慮し、B端子は、次の2つの関数を受信ウィンドウを送信   

 

図1に示すように、受信データ処理にBの終了時刻(異なるホスト間の同期速度の制御)、その後、端末通知ウィンドウと遅いデータ伝送を受信することによってB。   
2、が、どこかにAとBの間に受信されたデータを処理するためにBの終了時刻は、Cのように、AB乏しいこの場合の間の全体的な帯域幅性能は、加工戦略端末Aの輻輳(スロースタートに応じて増加し徐々に減少するように倍増します)は、データを送信することを決定するためにウィンドウを更新します。   

 

スライディングウィンドウ固定サイズと比較すると、TCPは、スライディングウィンドウは、より優れた性能を達成するために可変サイズを使用しています。   

 

広域ネットワークプロトコルがTCPであり、WAN環境でルータとホストは、性能の損失を引き起こす可能性があり、固定ウィンドウサイズを使用して、スライディングウィンドウ、この場合には、性能および処理能力のために異なる要件を有します。TCPウィンドウサイズは、スロースタートと輻輳回避アルゴリズムや他のメカニズムを取ることによって、最高のパフォーマンスと帯域幅を達成するために、予告の受信者が指定されています。

 

1.「ウィンドウ」とは、連続した範囲「ウィンドウ」と呼ばれて送信されることができる送信者の期間に対応するバイトのシーケンスです。

 

2.この「レンジ許可送信」を意味する「スライディング」はプロセス変化として送信される、方法がオーダーである「スライド」。

 

    1. AおよびBは、別個の送信で維持起因近い(脂肪B相反に、それぞれのバッファを受信しなければならないので、TCPプロトコルは、全二重プロトコルので、それぞれ送信者Aと受信者Bを終了しますAとBの送信は、受信した)、我々は、Bがで受信した例の場合を送ります。

    2.         ウィンドウは、送信バッファの一部である送信、TCPプロトコルの一部は、実際には、すべてのデータが送信側の送信バッファに配置されるアプリケーションレイヤを送信する必要がある、送信することができます。

    3.       送信ウィンドウは、4つの関連する概念を有する:肯定応答は送信されたデータ(送信及びバッファゾーン内には透過窓)を受信するが、(送信ウィンドウ内に位置する)、受信したデータの確認応答を送信、送信されていないれていしかし、送信データバッファと外側の送信ウィンドウ内のデータを一時的に送信することを許可されていない送信されていません

    4.        各成功したデータの送信後に、送信ウィンドウは、新しいデータがウィンドウに送信する準備ができて含む、送信バッファに順次移動します。

 

送信ウィンドウの31-50バイト:最初のTCPコネクションの確立は、B Aは、このような「20」として、独自の受信ウィンドウサイズを言うだろう。

 

 

解析ウィンドウ値B、自身の窓構造

 

11バイト不変のウィンドウ位置を送信し、送信した後、B・データ・パケットは、順序が狂って受信されました:

 

 

作られた11バイトのデータ

 

場合にのみ、正常に送信されたデータの後に、すなわち、データBは、送信されたスライディングウィンドウ離れ送信されたデータから移動され、確認された。最初のパケットの連続するデータパケットが回避するダウン順序が狂って受信しながらBが確認されます転送ネットワークを繰り返します。

 

 

受信した新しい確認番号は、ウィンドウが前方にスライド

 

 

送信ウィンドウ内の数字は送信されますが、未確認されたに属し

 

いわゆるフロー制御データ伝送、制御端が速すぎないように、主情報は、受信者に送信者に送信されます。サイズおよびデータ伝送の送信者の使用を制御するために、独自の受信ウィンドウサイズが含まれますACKをバックアップする主な方法:

 

 

、いくつかの時間のために余剰バッファBの出現を待って、その後、Aは私にRWNDを伝えるためにメッセージを送信し、これはBが、彼のAバッファがいっぱいになったデータを送信し、その後、停止を伝えていた場合は、状況に関し、サイズは400ですが、残念ながらメッセージが失われているので、デッドロック状態がデータを送信するために待っている|| Bの通知Bを待っていました。この問題に対処するために、TCPは、Aはゼロウィンドウ通知の他の側面を受信したとき、タイマーが有効になっている、1バイトのプローブパケットを送信する時間で、相手の意志を連続タイマー(永続タイマー)を導入しました結果が0でない場合は、この時点では、受信ウィンドウサイズへの対応は、継続的にリセットされ、タイマーは、待ち続けます。

 


 

 

 

传递效率
     一个显而易见的问题是:单个发送字节单个确认,和窗口有一个空余即通知发送方发送一个字节,无疑增加了网络中的许多不必要的报文(请想想为了一个字节数据而添加的40字节头部吧!),所以我们的原则是尽可能一次多发送几个字节,或者窗口空余较多的时候通知发送方一次发送多个字节。对于前者我们广泛使用Nagle算法,即:
*1. 若发送应用进程要把发送的数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发送出去,把后面的字节先缓存起来;
*2. 当发送方收到第一个字节的确认后(也得到了网络情况和对方的接收窗口大小),再把缓冲区的剩余字节组成合适大小的报文发送出去;
*3. 当到达的数据已达到发送窗口大小的一半或以达到报文段的最大长度时,就立即发送一个报文段;
     对于后者我们往往的做法是让接收方等待一段时间,或者接收方获得足够的空间容纳一个报文段或者等到接受缓存有一半空闲的时候,再通知发送方发送数据。

 

拥塞控制
     网络中的链路容量和交换结点中的缓存和处理机都有着工作的极限,当网络的需求超过它们的工作极限时,就出现了拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。常用的方法就是:
1. 慢开始、拥塞控制
2. 快重传、快恢复
     一切的基础还是慢开始,这种方法的思路是这样的:
-1. 发送方维持一个叫做“拥塞窗口”的变量,该变量和接收端口共同决定了发送者的发送窗口;
-2. 当主机开始发送数据时,避免一下子将大量字节注入到网络,造成或者增加拥塞,选择发送一个1字节的试探报文;
-3. 当收到第一个字节的数据的确认后,就发送2个字节的报文;
-4. 若再次收到2个字节的确认,则发送4个字节,依次递增2的指数级;
-5. 最后会达到一个提前预设的“慢开始门限”,比如24,即一次发送了24个分组,此时遵循下面的条件判定:
*1. cwnd < ssthresh, 继续使用慢开始算法;
*2. cwnd > ssthresh,停止使用慢开始算法,改用拥塞避免算法;
*3. cwnd = ssthresh,既可以使用慢开始算法,也可以使用拥塞避免算法;
-6. 所谓拥塞避免算法就是:每经过一个往返时间RTT就把发送方的拥塞窗口+1,即让拥塞窗口缓慢地增大,按照线性规律增长;
-7. 当出现网络拥塞,比如丢包时,将慢开始门限设为原先的一半,然后将cwnd设为1,执行慢开始算法(较低的起点,指数级增长);

 

 

上述方法的目的是在拥塞发生时循序减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完毕。慢开始和拥塞控制算法常常作为一个整体使用,而快重传和快恢复则是为了减少因为拥塞导致的数据包丢失带来的重传时间,从而避免传递无用的数据到网络。快重传的机制是:
-1. 接收方建立这样的机制,如果一个包丢失,则对后续的包继续发送针对该包的重传请求;
-2. 一旦发送方接收到三个一样的确认,就知道该包之后出现了错误,立刻重传该包;
-3. 此时发送方开始执行“快恢复”算法:
*1. 慢开始门限减半;
*2. cwnd设为慢开始门限减半后的数值;
*3. 执行拥塞避免算法(高起点,线性增长);

 

 

おすすめ

転載: www.cnblogs.com/liangyc/p/11628757.html