TCP と UDP はどちらもトランスポート層プロトコルであり、どちらも (クライアントからサーバーへ) 配信を処理するためのプロセスを提供しますが、サービスを提供する方法は互いに大きく異なります。UDP と TCP の主な違いは次のとおりです。UDP はコネクションレス サービスを提供しますが、TCP はコネクション型サービスを提供します。
それが TCP が信頼できる理由です。TCP をストリーム指向プロトコルと呼んだ理由は何ですか?
TCP プロトコルが送信または受信されるセグメントを追跡していることは周知のとおりです。これが信頼できる理由ですが、それでも TCP セグメント ヘッダーが表示された場合、セグメント ヘッダーにセグメント番号値のフィールドはありません。代わりに、シーケンス番号と確認番号と呼ばれる 2 つのフィールドがあります。これら 2 つのフィールドは、セグメント番号ではなく、バイト番号を参照します。
バイト番号: TCP は、接続で送信されるすべてのデータ バイト (オクテット) に番号を付けます。番号付けは各方向で独立しています。TCP がプロセスからデータのバイトを受信すると、TCP はそれらを送信バッファに格納し、番号を付けます。番号付けは必ずしも 0 から始まるとは限りません。代わりに、TCP は最初のバイトの番号として 0 から ((2)**32)−1 の間の任意の番号を選択します。たとえば、数値がたまたま 1,057 であり、送信されるデータの合計が 6,000 バイトである場合、バイトには 1,057 から 7,056 までの番号が付けられます。
シーケンス番号: バイトに番号が付けられた後、TCP は送信される各セグメントにシーケンス番号を割り当てます。各セグメントのシーケンス番号は、そのセグメントで運ばれるデータの最初のバイトの番号です。
TCP 接続が 5,000 バイトのファイルを転送しているとします。最初のバイトの番号は 10,001 です。データが 5 つのセグメントで送信され、それぞれが 1,000 バイトを運ぶ場合、各セグメントのシーケンス番号は何ですか?
セグメント 1 → シーケンス番号: 10,001 範囲: 10,001 から 11,000 セグメント 2 → シーケンス番号: 11,001 範囲: 11,001 から 12,000 セグメント 3 → シーケンス番号: 12,001 範囲: 12,001 から 13,000 セグメント 4 → シーケンス番号: 13,001 範囲: 13,001 から 14,000 セグメント 5 → シーケンス番号: 14,001 範囲: 14,001 ~ 15,000
これが、送受信されたすべてのバイトを追跡し、すべてのセグメントを確認するため、TCP をストリーム制御プロトコルと呼んだ理由です。
一方、なぜ UDP をメッセージ指向プロトコルと呼んだのでしょうか?
UDP はコネクションレス サービスを提供します。これは、各ユーザー データグラム (UDP パケット) が独立していて、送信元が同じで同じ宛先に送信されている場合でも、相互に関係がないことを意味します。コネクションレスであることの影響の 1 つは、UDP を使用するプロセスがデータのストリームを UDP に送信できず、UDP がそれらを (TCP のように) 関連するさまざまなユーザー データグラムに分割することを期待できないことです。代わりに、各リクエストは、1 つのユーザー データグラムに収まるほど小さくなければなりません。したがって、各データグラムには境界があり、メッセージは自己完結型であり、意味を持つことができます。そのため、UDP はメッセージ指向プロトコルとも呼ばれます。
詳細については、Behrouz A. Forouzan の TCP/IP プロトコル スイートの第 14 章と第 15 章をお読みください。
お役に立てれば!