[コンピュータネットワーク]詳細なTCPの基礎

1. TCPの概念

[!NOTE]
また、伝送制御プロトコルとして知られているTCP(伝送制御プロトコル)、。
TCPプロトコルは、接続指向の、信頼性の高いバイトストリームベースのトランスポートプロトコルです。通信するときTCPに基づいて、通信当事者は、TCP接続を確立する必要があり、3ウェイハンドシェイクは4波を通過する必要性から切り離されたときに、通過への接続を確立します。

1.1 TCPヘッダ

TCPヘッダ

TCPヘッダの場合は、以下のフィールドが重要です。

  • 序列号 (シーケンス番号)、TCPシーケンス番号は、スプライシングにより、パケットが順に送信されるパケットシーケンス番号の終了を確保するため

  • 确认号 (確認応答番号)、この数は、受信端で受信されたデータのバイト数を表す所望の数であり、シリアル番号はまた、データを受信した表します

  • 窗口大小 (ウィンドウサイズ)、また、フロー制御のために、受信したデータのバイト数を示します

  • 标识符
    • = 1 ACK:このフィールドには、有効な確認応答番号フィールドがあることを示します。また、TCPは、接続がACKに設定する必要が後に送信されたすべてのセグメントを提供します。
    • = 1 SYN = 1 SYN、ACK = 0は、現在のセグメントが接続要求パケットであることを示しています。SYN = 1、ACK = 1は、現在のセグメントが応答パケット接続を確立することに同意していることを示す場合。
    • FIN = 1:フィールドは、セグメント解放要求メッセージが接続されていることを示します。
    • URG = 1:このフィールドは、データパケットを表すデータの一部であるが、優先度の高いデータパケットを、緊急情報が含まれている、緊急ポインタは、この時点で有効です。現在のパケットのデータ部の先頭に位置するいくつかの緊急データ、緊急データの末尾を示す緊急ポインタ。
    • PSH = 1:このフィールドは、受信端末が直ちにむしろバッファが送信する前にいっぱいになるまで待つよりも、アプリケーション層にデータをプッシュする必要があることを示し。
    • = 1 RST:このフィールドは、現在のTCP接続が深刻な問題であることを示し、あなたが再確立TCP接続はまた、違法なセグメントを拒否するために使用され、接続要求を拒否することができますする必要があるかもしれません。

1.2スリーウェイハンドシェイク

スリーウェイハンドシェイク

簡単に言えば:

  • 最初の握手
    • SYN = 1、SEQ(クライアント)= X
    • クライアントは、サーバセグメントへの接続要求を送信します。パケットデータ通信セグメントに初期シーケンス番号を含みます。リクエストを送信した後、クライアントは、SYN-SENT状態になります。
  • 第二のハンドシェイク
    • = 1 SYN、ACK = 1、番号= X + 1、配列(サーバ)を確認= Y
    • サーバは、接続要求メッセージのセグメントを受信した後に合意された接続は、肯定応答が送信された場合、応答はまた、SYN-RECEIVEDに送信完了状態後の初期通信シーケンス番号に自身のデータを含んでいます
  • サードハンドシェイク
    • ACK = 1、番号= Y + 1、配列(クライアント)= X + 1を確認
    • クライアントが応答接続許可書を受け取った後、だけでなく、サーバに確認メッセージを送信します。クライアントエンドは、接続が確立され、ESTABLISHED状態に入った後、サーバがESTABLISHED状態に入った後も、この応答を受信し、このセグメントを作りました。

1.3なぜ2ウェイハンドシェイクを使用していませんか?

[!NOTE]
主に、接続要求を防ぐためには、パケットが突然エラーが発生し、サーバに送信に失敗しました。

シナリオを検討して、最初のクライアントが要求を送信し、接続が失われることはありませんが、滞留時間が長すぎます。TCPクライアントは確認メッセージをもらっていないので、そのサーバーは、その後、受信サーバーにメッセージを再送信しません。
そして今、最初の要求は、要求が廃棄された、サーバーに到着したが、接続を確立します。

3ウェイハンドシェイクた場合、それは失敗メッセージであっても、メッセージと応答確認メッセージの一部の故障により、サービス終了を介して送信さが、クライアントはもう一度確認を送信しません。サーバが確認を受信しないので、私たちは、クライアントが接続を要求しなかったことを知っています。

接続を確立するために、3ウェイハンドシェイクをなぜ1.3は、それが4倍にすることはできません

最初のハンドシェイク:

Client什么都不能确认   
Server确认了对方发送正常

第二のハンドシェイク:

Client确认:自己发送/接收正常,对方发送/接收正常
Server确认:自己接收正常 ,对方发送正常

サードハンドシェイク:

Client确认:自己发送/接收正常, 对方发送/接收正常
Server确认:自己发送/接收正常,对方发送/接收正常

だから、送信者と受信者の機能は3ウェイハンドシェイクを通じて正常で確認するだけでなく、4回は、より余計に見えたことができます

フォー1.4を振っ

手を振っ四

TCPは、全二重で、両端を切断しながら、FIN ACKを送信する必要があります。

  • 最初の波
    • データ送信が完了したことをクライアントAは、それがサーバーBに接続解除要求を送信する必要がある場合
  • 第二波
    • Bが接続解除要求を受信した後、それは、TCP接続を解放するために、アプリケーション層を教えてくれます。次に、ACKパケットを送信し、入射CLOSE_WAIT状態を、BにAはAがデータて送信を受信しない、接続が解除された表します。しかし、両方向にTCPコネクション、それはまだA.に対してデータBを送信することができます。
  • 第三の波
    • Bはこの時点で終了していない場合には、終了後入りますAに、その後、Bを接続解放要求を送信し、データを送信するために存在し続けますLAST-ACKの状態。
    • PS:第二及び第三のハンドシェイクが送信ACKパケットを遅延するために組み合わせることができる、(通常、時間制限、またはそれが誤っニーズが再送されると信じているであろう)技術の確認を遅らせることによって。
  • 第四の波
    • 解放要求がAに、トランスポンダBに今回確認応答を送信した後に受信されるTIME-WAITの状態。時間はBの再送を要求しない場合に状態が2MSL(最大セグメント寿命、時間がタイムアウトが放棄され、ネットワーク内のライブセグメントを指す)時間を継続する、それが入るCLOSED状態。Bは、確認応答を受信すると、それはCLOSED状態になります。

なぜA 1.5は2MSL CLOSED状態に入るまでの時間を待って、TIME-WAIT状態を入力するには?

BはAの確認応答を受信することができることを確実にするために。CLOSED状態に直接アクセスネットワークの問題に達していない場合、Bが適切に閉じることができない原因になりますので、Aは、確認応答を確認し終えた場合。

Aが応答した後、CLOSED状態に直接ACKを送信している、そしてネットワークが遅延した場合の応答がBに達していない紛失または2MSLにされている場合は、以下のB待ちタイムアウトは、FINパケットを再送信しますが、この時間Aは閉鎖されました、およびBで、その結果、応答aを取得することはありません適切に閉じられたことがありません

1.6なぜTIME_WAIT状態

この全二重TCP接続の信頼性の放出を達成するためには、1.6.1

これは、本の別の結果は、TCP接続時2MSLを待つことである待機ソケット(顧客IP接続を定義2MSL TCPは(タイムアウトのもう一方の端を、最終FINを再送)この損失を防ぐため、最終的なACK ACKを送信することができアドレスとポート番号、サーバーとポート番号のIPアドレス)が使用できなくなります。この接続は2MSLの終了後に再使用することができます。

期限切れにネットワーク内の古いパケットを作成し、消え1.6.2

各特定のTCP実装は、最大セグメント寿命MSLを選択する必要があります。任意のセグメントがネットワーク内で破棄される前に、最長の時間です。

1.7なぜ近い接続が実際にそれを振って4倍で、接続を確立するための3ウェイハンドシェイクのですか?

  1. 接続が確立された後、中にサーバーが接続要求を確立するために、SYNパケットを受信し、状態をLISTENし、SYN ACKパケットがクライアントに送信されました。

  2. 接続が閉じられたとき、彼はすべてのデータが相手に送信されていないかもしれないがと、サーバは、ただ、相手はもはや送信データを意味だけでなく、データを受信することを、お互いのFINメッセージを受信し、

2. ARQ(再送タイムアウト)プロトコル

[!NOTE]
謝辞とタイムアウトメカニズムによっては、ARQプロトコルが含まれ、データの正しい配信を保証停止等待 ARQし、连续 ARQ

2.1 ARQ停止待機

通常の転送プロセス

Bにメッセージを送信するのに長い期間、送信を停止し、応答の終わりのためのタイマーと待機を開始し、タイマーをキャンセルするために、受信ピア・レスポンスと時間タイマーの期間内に次のパケットを送信しなければなりません。

場合は、パケットロスやエラー:

パケットの伝送損失の過程では:バックアップ再びデータを毎回送信する必要があるので、データのタイマー設定時間のロスに対するこの時間は、応答の最後まで送信されます。

送信中にエラーメッセージ:端はA側の再送信のためのメッセージを待つを放棄します。

PS:一般的なタイマー設定時間はRTTの平均時間よりも大きくなります。

ACKタイムアウトまたは不足しています:

送信の終了に応答しても、損失またはタイムアウトが発生した場合であってもよいです。だから、タイムオーバーAタイマー終了は、まだパケットを再送します。このとき、端末Bは、同じパケットの数と、次のシーケンス番号Aまでの応答パケットを送信するパケットの廃棄を再送信を受けました。

このプロトコルの欠点は、伝送効率が良好なネットワーク環境で、低いエンドACKに送信される各メッセージを待機する必要がされています。

2.2連続ARQ

連続ARQでは、送信端は、透過窓を有し、データを連続的に、応答が受信されない場合には、ウィンドウ内で送信することができるので、停止及び待機ARQプロトコルと比較して待機時間を短縮し、効率を向上させることができます。

確認2.2.1累積

連続ARQ、受信側は、連続したメッセージを受信します。あなたがメッセージを受信するARQを停止して待つ場合は返信として送信され、それは資源の無駄です。累積によって回答が複数のメッセージを受信した後、応答パケットを統一することができることを確認しました。ACKパケットは、すべてのシーケンス番号が受信される前に、次の送信データシーケンス番号+ 1のデータ送信の終了を指示するために使用されてもよいです。

しかし、確認した欠点の合計があります。連続的なメッセージを受け取るで、パケットシーケンス番号5を受信した後に発生する可能性があり、パケットシーケンス番号6が、メッセージが受信された後の第7号を受信して​​いません。これが発生した場合、ACKはこれだけでは、送信者が袋によって解決することができ、この場合には、重複したデータを送信するようになります、6返信することができます。

2.2.2スライディングウィンドウ

上記透過窓。TCPでは、窓は、両端を保持:それぞれサイドウィンドウと受信ウィンドウを送信します。

データを含む送信者ウィンドウが送られたが、応答を受信して​​送信することができますが、データが送信されませんされませんでした。

スライディングウィンドウ

送信側は、残りの受信ウィンドウのウィンドウサイズによって決定されます。現在のネットワーク輻輳の値とサイズに応じて配置されたウィンドウを送信した後、応答を受信する受信機は、現在の残りの書き込み応答パケットの送信元のウィンドウサイズを受信する、透過窓のサイズは、絶えず変化しています。

送信者が返信メッセージを受信すると、スライディングウィンドウに従います

ウィンドウフロー制御をスライディング実現しましたメッセージを介して受信機も受信機が時間内にデータを受信できることを保証するために、送信することができますどのくらいのデータを送信者に通知します。

フロー制御の例

ゼロウィンドウ

メッセージを送信するプロセスでは、あなたが最後に表示されるゼロウィンドウが発生することがあります。この場合、送信側はデータの送信を停止し、永続的なタイマーを開始します。ピアはウィンドウサイズを通知するようにタイマーを定期的にピアに要求を送信します。再試行の一定数以上の後、TCPは、リンクを破損する可能性があります。

3.輻輳処理

[!NOTE]
渋滞とデータを受け入れることを保証するために、受信側の後者の演技、受信機に十分な時間から制御処理異なるフロー。前者は過負荷状態を避けるために、過度の渋滞データネットワークを防ぐために、ネットワークの役割、である一方。

スロースタート、輻輳回避、高速再送と高速リカバリ:輻輳プロセスは4つのアルゴリズム、すなわちが含まれています。

TCPの輻輳制御

3.1スロースタートアルゴリズム

[!NOTE]
スロースタートアルゴリズムは、定義により、ネットワークの輻輳へのデータの最初のリードの大量の回避伝送するためには、指数関数的に1から始まる拡大送信ウィンドウの開始時に送信されます。

次のようにスロースタートアルゴリズムは、手順

  1. 輻輳ウィンドウ(輻輳ウィンドウ)を設定初期接続が1つのMSS(一つのセグメント内のデータの最大量)であります
  2. それぞれのRTT(ラウンドトリップ遅延)意志のウィンドウサイズの2倍を持っていました
  3. 指数関数的成長は、制限なしで、確かではないので、ウィンドウサイズが輻輳回避アルゴリズムを開始しますしきい値よりも大きい場合、しきい値限界があり、

3.2輻輳回避アルゴリズム

[!NOTE]
ごとに渡すRTTプラスだけのウィンドウサイズとシンプルなポイント、ので、ゆっくり最適な値にサイズを調整し、ネットワークの輻輳の指数関数的な成長を回避するために比べて輻輳回避アルゴリズム。

輻輳回避

トランスミッションケースかもしれないタイマーが満了した時には、TCPは今回、ネットワークの輻輳が、すぐに次のステップを実行することを思うだろう:

  • しきい値は、現在の輻輳ウィンドウの半分に設定されています
  • 1つのMSSに輻輳ウィンドウ
  • スタート輻輳回避アルゴリズム

3.3高速再転送

高速再送信および高速リカバリは、通常一緒に表示されます。受信機の場合は、メッセージが受信のみ(袋なし)最後のパケットシーケンス番号の正しい順序に対応させていただきます、順不同で表示されます受け取ることができます。あなたは3つの重複ACKを受信した場合、再送タイマを待たずに再び期限切れになるが、高速の再送信を開始します。アルゴリズムは、二つのタイプに分けられます。

4. TCPの概要

その複雑4.1 TCPなぜ?

[!NOTE]
また、可能な限りのパフォーマンスを向上させながら、信頼性を確保する必要があるので、

4.1.1機構の信頼性を確保

  • チェックサム
  • シーケンス番号(シーケンシャル到着)
  • 承認
  • 再送タイムアウト
  • 接続管理
  • 流量制御
  • 輻輳制御

4.1.2メカニズムのパフォーマンスを向上させます

  • スライディングウィンドウ
  • 高速再送信
  • 遅くなった回答
  • ピギーバック

4.2タイマー

  • タイムアウト、再送信タイマー
  • キープアライブタイマー
  • TIME_WAITタイマー

4.3 TCPベースのアプリケーション層プロトコル

  • HTTP
  • HTTPS
  • SSH
  • Telnetの
  • FTP
  • SMTP

おすすめ

転載: www.cnblogs.com/fecommunity/p/11908872.html