TCPスライディングウィンドウメカニズムの原理と機能の直感的な概要

A.原則

  TCPは、全二重通信であり、スライディングウィンドウの各側は、ウィンドウ+送信ウィンドウを受信する、受信ウィンドウは、データを処理する責任を負うことに送られることを含むように、送信ウィンドウが独自に送信するデータを処理する責任があります。スリップ実際には、ダイナミックなウィンドウの本質は、いくつかの変数を維持することであるこれらの変数の維持に何らかの処理を行うためのメッセージを受信し、メッセージを送信しているときに、TCPデータ処理により、これらの変数は、いくつかのカテゴリに分かれて

 

 

  上記のウィンドウを送信する図: 

(1)Nと言うことである送信ウィンドウの開始バイトである:バイトシーケンス番号<Nバイトが送信され、ACK、確認が受信されています。

(2)nextSeqは、次の送信パケットヘッダフィールドの配列(ここで話さないシリアル番号の配列即ち、第1バイト)は、バイトシーケンス番号〔N、nextSeq)セクションに使用されてきたが、表す、伝送アウト、しかし、ACK確認を受けません。

(3)N +サイズのシーケンス番号が最後の利用可能なバイトのウィンドウで、サイズが勝つが、実際には、他のフィールド勝利のサイズは、受信ウィンドウ、受信パケット内の各フィールドの値であり、送信ウィンドウのサイズです。

 どのようにこれらの値は、それを維持するために作るには?

(1)以下のことを行うために、各パケットの受信:受信したメッセージは、Nが設定され、ACK、すなわち、前方のACK値を移動は、ACKチェック、ウィンは、パケットフィールド値、すなわちを読み取り、他方の側これにより、サイズ+ Nの値を更新し、最新の受信ウィンドウサイズ、

(2)nextSeqの値を変更するために、各メッセージを送信するために、バイト数がnextSeqがはるかに前進送信置くが、N +のサイズを超えません。

 

受信ウィンドウの下に参照してください

 

また、バイト数のいくつかの変数のメンテナンスは、送信ウィンドウは、受信ウィンドウは、バイトのバイト数を受信したことを除いて同様です。次のようにいくつかの変数の意味:

(1)J1が表す:バイトシーケンス番号<J1バイトが受信された、すなわち、ACK確認発行された、プログラムを使用すると言うことができます。

(2)J2が表す:[のJl、J2)は順序が確認するために、読書のための準備ができて、プログラムを受けているが、唯一のACKまだ発行されていない、完全なバイトの間隔を持っています

(3)J3は、受信ウィンドウ、J3を介して送信されるバイトの最後のバイトが透過窓のサイズが受信不可能背面上にウィンドウであるため(一般に、受信していない受け入れることを拒否することである受信することができます)。

 どのようにそれを維持するには?

(1)メッセージ送信する場合:以下のバイト数よりもJ2は、私が受け取ったことを、正しく使用メッセージヘッダーのJ2フィルACKフィールドの値を、そしてあなたが送信されたことを伝え、J2にJ1を移動しています;(J3-J2)の違いヘッダウィンフィールドに、私が受信できるどのくらいのスペースお互いを伝える必要があります。

エラー・メッセージ・シーケンスは、モバイルJ2は、どのように多くのバイトが移動を受信して​​いない場合(2)パケットが受信されます。パケットが順不同で到着した場合等しくない次のACKメッセージがAで送信されてきたように、中間のパケットが、失われ、J2を移動しないことを示す場合、受信したパケットは、配列値は、J2に等しくなければなりません:確認するために繰り返されるJ2は、対応する高速再送は、(詳細には説明しない、引き離す)があります。

3.スライドウィンドウ原理の概要

     ウィンドウの開始値がゆっくりと開始後に増加しますので、これはスライディングウィンドウの名前の由来があるので、それは、権利です。実際には、メッセージを受信し、ACK、バイトのシーケンス番号、SEQ(バイトパケット数を開始)上のいくつかの変数の値を維持するために、メッセージを送信します。次のようにACK、配列について、WinSizeをまとめると:

(1)送信メッセージACKが受信されたメッセージを使用する方法をACKである場合、来る方法です。

   受信ウィンドウからパケットを送信するときJ2の値がACKパケットヘッダ充填されている取る、パケットの開始値Nを受け取った後にACKを取得するための送信ウィンドウがACKに更新されます。

(2)配列にパケットを送信するためにどのように受信されたメッセージは、配列を使用する方法である場合、です。

           送信メッセージは充填値nextSeq SEQパケットヘッダフィールドのウィンドウから送信された取得するときに、受信したメッセージがメッセージ・フィールドを表示する場合であるパケット長に応じて、ウィンドウの配列のJ2を受け、連続右J2であります。

(3)送信パケットが勝つ、勝つために受信したメッセージを使用する方法である場合どのようになります。

          この差勝利ヘッダフィールドを埋めるために、受信ウィンドウ(J3-J2)から取得するパケットを送信するとき、メッセージを受信したときの値を獲得ヘッダフィールドを取得し、サイズの終わりを仮定すると、送信ウィンドウの更新を位置N +サイズ

 

ROLE

    私たちは知っている、実際には、ネットワーク層データグラムネットワーク自体が接続指向ではありませんし、信頼性と秩序の完全なサービスを提供していません。それだけでサービスの提供を実現しようとしているので、直接データグラムネットワークをUDPパケットが送信中に失われる可能性があります。なぜ同じTCPデータグラムのネットワークを使用しているので、我々は信頼性の高い接続指向の輸送サービスを実現することができましたか?実際には、基盤となるネットワーク層が完成さに頼って、完全にソフトウェアのレベルで終了し、トランスポート層、で、確認の具体的な症状がありますされて信頼性の高いTCPトランスポートの代わりのためには、TCPプロトコル、そこ再送タイムアウト、重複確認に収容されています - 高速再送および他の追加の手順。

    それは正確にUDP送信ためであり、多くの制約ので、より多くのに比べてデータグラムを受信するので、信頼性の高い輸送サービス、また、多くの問題をもたらし、これらの追加のステップを達成することができました:完全に多くのヘッダフィールド内のフィールドの多くよりも設定する必要がこれらのステップは、ステップは、時間、資源およびその他の費用を持っています。これらのヘッダーフィールドで最も重要なことは、失われたパケットベースの再送信の権利を保証されたバイトシーケンス番号、配列、ACKです。

    しかし、これらにのみこれを行うことができます。確認のためのメッセージ、送信待ち、確認を受けた後、次のパケットを送信し続け、効率が非常に低いです。そして、スライディングウィンドウで、通信相手がメッセージを送信し、次のと、このメッセージの確認領収書に、メッセージを送信する必要はありませんが、連続して複数のメッセージを送信することができ、ちょうど窓のサイズ制限を超えていない。そこそれは次のとおりです。大きなUDPよりTCPのオーバーヘッド、ネットワークの輻輳やパケット損失が再送が輻輳を増加したパケットの再送を引き起こすだろうと、TCPは、厳密にネットワークの輻輳を防止するための伝送速度を制御することだった、スライディングウィンドウの受信者によると勝利は、送信者の優れた伝送速度の大きさを制限します。

結論である:(1)連続したスライディングウィンドウは、輻輳を防止するために、送信者が送信者の受信ウィンドウサイズを対向伝送レート上限に従ってパケット(2)の複数を送信することを可能にします

(注:輻輳制御の全く考慮同様に、送信ウィンドウサイズCWNDを決定し、最終的にMIN(CWNDを取って、)送信RWNDが存在しないため、実際には互いにRWNDに限らないウィンドウサイズを受信し、伝送速度、ネットワークの輻輳を決定します。)

 

III。方法の例

  本の例:

 

B发送的的rwnd就是报文头部Win字段的值。解释个小问题:为什么前面说发送窗口的结束位置是N+size,而不是nextSeq+size?因为[N,nextSeq)这些字节是发送出去但未收到确认的,是随时有可能重发的,因此结束位置要从N算起,到N+size。

おすすめ

転載: www.cnblogs.com/shen-qian/p/12111666.html