TCPUDPとの違い
TCP/IPには、TCPとUDPという2つの代表的なトランスポート層プロトコルがあります。
TCPは、コネクション指向の信頼性の高いストリーミングプロトコルです。ストリームとはデータの途切れのない構造のことで、アプリケーションがTCPを使用してメッセージを送信すると、メッセージの送信順序が保証されているにもかかわらず、受信側にはデータの途切れのないストリームのように送信されます。
- シーケンス制御
- 再送制御
- フロー制御
- 輻輳制御
- ネットワーク利用率の向上
UDPはTCPに比べて信頼性の高いデータグラム・プロトコルではありません。微妙な処理は上位レイヤのアプリケーションに任されています。UDPの場合、送信するメッセージのサイズは保証されていますが、メッセージが到着するという保証はありません。そのため、アプリケーションは自分の必要に応じてメッセージを再送することがあります。
TCPとUDPの長所と短所を単純かつ絶対的に比較することはできません。TCPはトランスポート層で信頼性の高い伝送が必要な場面で使用されるのに対し、UDPは主に高速性やリアルタイム性が重視される通信や放送で使用されます。
Think 1: 信頼性の高いストリーミング・プロトコルとは?
- 接続の信頼性確保
- データ伝送の信頼性の確保
信頼できる接続の確立-3つのハンドシェイクと4つの波
どのような接続が信頼できますか?
この接続が信頼できると判断するには、なぜ3回のハンドシェイクで十分なのですか?
なぜ4回のスイングで、このクロージャーの接続が信頼できると判断できるのでしょうか?
3回のハンドシェイク
まず、3つの握手のフローチャートを見てみましょう。
この文章を読めば、なぜ信頼できる接続を確立するのに3回のハンドシェイクが必要なのか、比較的早く理解できるでしょう。
最初の質問です。
どのような接続が信頼できますか?
クライアントとサーバーが正常にメッセージを送受信でき、応答のない応答がないことが保証されている場合にのみ、接続は信頼できると言われます。
TCPの3つのハンドシェイクの手順は、次のように単純化できます:
Aが送信し、Bが受信し、BはAが送信できることを知っています。
Bは送信し、Aは受信し、AはBが送受信できることを知っています。
Aが送信し、Bが受信し、BはAが受信できることを知っています。
握手はうまくいきました!
つ目の質問です。
この接続が信頼できると判断するには、なぜ3回のハンドシェイクで十分なのですか?
3回のハンドシェイクによって、現在のクライアントとサーバーは正常に情報を送受信できると判断できるので、信頼できる接続を確立するために必要なハンドシェイクは3回だけです。
3つの握手のフローチャートをもう一度見てください。
最初のハンドシェイクでは、クライアントはサーバにSYNとseqフラグを渡し、サーバはそれを受け取ってクライアントが情報を送信できることを知ります。
2回目のハンドシェイクでは、SYNをそのまま返し、接続の確認を表すフラグACKを1に設定し、サーバーがメッセージを送受信できるというクライアントの知識を表すackを受信したseq+1に設定します。seqはランダムなKに設定され、クライアントが戻ってくるのを待ちます。
ackには受信したseq+1、つまりK+1がセットされ、クライアントがメッセージを受信できたことをサーバーに知らせます。
つまり、サーバーとクライアントはお互いを知っており、それぞれのメッセージを正常に送受信することができます。
4回のハンドシェイク
3つ目の質問です。
なぜ4回のスイングで、このクロージャーの接続が信頼できると判断できるのでしょうか?
送信されたリクエストはすべて受信され、送信者が再びコネクションを閉じることは確実です。
つのスイングのフローチャートをご覧ください。
TCPの4つの波の手順は、次のように単純化できます:
第一波 サーバーはクライアントの完了を確認
第2波 クライアントは知っている サーバーは知っている
第三の波は、クライアントがサーバーの終了を知ることです。
第4波 サーバーはクライアントが完了したことを知っています。
成功の波!
ウェービングのプロセスを具体的に
- クライアントは切断フラグFIN=Mを送り、サーバーに切断要求の送信が終わったことを知らせます。
- サーバはack=M+1を送信し、クライアントに「送信完了しましたよ」と知らせます。
- サーバーがアクセプトを終えると、切断フラグFIN=Nを送信して、私がアクセプトを終 え、リクエストが切断されたことをクライアントに知らせます。
- クライアントは、切断要求を受け取ったことを示すackフラグ=N+1でそれを受け入れ、OKであることを示す確認フラグACKを送信します。
さようなら。
信頼できる送電のためのメカニズムの確立
信頼性の高い伝送を保証するメカニズムとはどのようなものですか?
問題は、送信時にどのような予期せぬことが起こり得るか、ということです。
- 伝送パケットはネットワークの変動により速くなったり遅くなったりするため、順序を変更する必要があります。
- 送受信のスピードは一定ではないので、流れをコントロールできる必要があります。
- 伝送パケットはネットワークの変動により失われ、補充する必要があります。
- その他
TCPには信頼性の高い伝送を確立するためのメカニズムがいくつかあります。コストについてはどうですか?UDPと比べると、メッセージははるかに大きくなり、伝送効率は比較にならないほど低下します。しかし、そのコストに見合うだけの価値があります。
シーケンス制御
シーケンス制御メカニズムとは、シーケンス番号を確立するために、各応答リクエストのTCPメッセージの先頭にackフラグを追加することです。
フロー制御
フロー制御とは何ですか?
通信の両側は、送信者の速度と受信者の速度は必ずしも等しくありません、送信者の送信速度が速すぎる場合、それは受信者が対処することはできませんにつながる、その後、受信機は、バッファに格納することはできませんデータを扱うことができます。
バッファが満杯で、送信者がまだデータを送信している場合、受信者は受信したパケットを捨てることができるだけで、失われたパケットの数が多いと、ネットワークのリソースを大幅に浪費することになります。
送信者の送信速度を制御することをフロー制御といいます。
TCPはどのようにフロー制御を行うのですか?
受信側はパケットを受信するたびに、決定メッセージを送信している間、自分のバッファがどれだけ空いているかを送信側に伝えることができます。また、受信ウィンドウのサイズを表す変数winを使って、バッファの残りのサイズを受信ウィンドウのサイズと呼ぶこともできます。
送信側はこれを受信した後、送信レートを調整、つまり送信ウィンドウのサイズを調整します。 送信側は受信ウィンドウのサイズが0になったことを受信すると、パケットロスが多発しないようにデータの送信を停止します。
送信者がデータを送信し続けるのはいつですか?
送信者は、受け入れウィンドウのwin = 0を受信したときに、送信者は、メッセージの送信を停止し、同時にタイマーをオンにし、しばらくごとに、それはデータを送信し続けることができるかどうかを受信者に尋ねるためにテストメッセージを送信するために、受信機は彼にこの時点で受け入れウィンドウのサイズを教えてくれます。
輻輳制御
簡単に言うと、輻輳制御は4つのアルゴリズムによって実現されます。
- スロースタート
- 輻輳制御
- 高速再送
- 高速リカバリー
仕組みはもう少し複雑なので、穴を掘って、次の機会を見つけて埋めてください。
ネットワーク利用率の向上
TCPは1セグメントを基本とし、セグメントを送信するたびに確認応答を処理します。この送信方法は、パケットの往復時間が長くなると通信性能が低下するという欠点があります。
この問題を解決するために、TCPはウィンドウの概念を導入しました。各セグメントに確認応答を返す代わりに、より大きな単位で確認応答が行われ、 転送時間が劇的に短縮されます。言い換えると、送信ホストはセグメントを送信した後、確認応答を待つ必要 はなく、送信を続けます。
簡単に言えば、それはあなたが応答するのを待っているのではなく、とにかく、いくつかのデータを送信する最初の脳は、ボンネットの下にタイムアウトの再送信メカニズムがありますが、再送信に応答しなかった応答を待っている無駄な時間の顔ということです。
タイムアウト再送
ウインドウズを使用することで、タイムアウト再送のメカニズムによるパケットロス再送制御を確立し、データロスを回避することができます。
まとめ
- TCPは信頼性の高いストリーミング・プロトコルです。udpは信頼性の低いデータグラム・プロトコルです。
- TCPのメッセージヘッダ長は大きく、送信効率は遅く、UDPのメッセージヘッダ長は大きく、送信効率は速い。
- 3回のハンドシェイクで確実に接続を確立します。4回のハンドシェイクで接続を確実にクローズします。
- 伝送を確実に確立するメカニズムには、逐次制御、フロー制御、輻輳制御、再送制御、さらにネットワーク利用率の向上が必要です。