TCP vs UDP: 信頼性と効率性の議論を解明する

今日はまずTCPに焦点を当てます。階層化に関する章の冒頭で重要な点について触れました。ネットワーク層以下では、主にホスト間接続が中心となります。つまり、コンピュータは他のコンピュータに接続するために、そのコンピュータの位置を把握している必要があります。しかし、ネットワークにおける通信は、マシン間通信よりもプロセス間通信であることが多いです。そのため、TCPプロトコルではポートという概念が導入されています。1つのポートは1つのプロセスのみが占有できるため、異なるホスト上で実行されているアプリケーションプロセス間の直接通信が可能になります。

トランスポート層の役割は、異なるホスト上で実行されるアプリケーションプロセス間で直接通信サービスを提供することです。そのため、トランスポート層はエンドツーエンドプロトコルとも呼ばれます。トランスポート層はネットワークの中核となる詳細を隠蔽し、アプリケーションプロセスは2つのトランスポート層エンティティ間に論理的なエンドツーエンドの通信チャネルが存在するかのように認識できます。

TCPはTransmission Control Protocol(伝送制御プロトコル)の略で、コネクション指向プロトコルとして知られています。つまり、一方のアプリケーションがもう一方のアプリケーションにデータを送信する前に、2つのプロセス間でハンドシェイクを行う必要があります。ハンドシェイクとは、論理的に接続されたプロセスであり、信頼性の高いデータ送信と秩序あるデータ受信を保証します。ハンドシェイクでは、一連の制御パケットを交換し、データ送信を成功させるためのパラメータとルールについて合意することで、送信元ホストと宛先ホスト間で接続が確立されます。

TCPとは何ですか? (MylinkingのネットワークタップそしてネットワークパケットブローカーTCPパケットとUDPパケットの両方を処理できる)
TCP (Transmission Control Protocol) は、接続指向で信頼性の高い、バイト ストリーム ベースのトランスポート層通信プロトコルです。

接続指向: コネクション指向とは、TCP 通信が 1 対 1、つまりポイントツーポイントのエンドツーエンドの通信であることを意味します。UDP は複数のホストに同時にメッセージを送信できるため、1 対多の通信は実現できません。
信頼性のあるTCP の信頼性により、ネットワーク リンクの変更に関係なくパケットが受信者に確実に配信されることが保証されます。そのため、TCP のプロトコル パケット形式は UDP よりも複雑になります。
バイトストリームベース: TCP のバイト ストリーム ベースの性質により、任意のサイズのメッセージの送信が可能になり、メッセージの順序が保証されます。前のメッセージが完全に受信されていない場合でも、後続のバイトが受信されている場合でも、TCP はそれらを処理のためにアプリケーション層に渡さず、重複したパケットを自動的にドロップします。
ホストAとホストBが接続を確立すると、アプリケーションは仮想通信回線を使用してデータを送受信するだけで済み、データ伝送が保証されます。TCPプロトコルは、接続の確立、切断、保留といったタスクの制御を担当します。ここで仮想回線とは接続を確立することのみを意味し、TCPプロトコルの接続とは、双方がデータ伝送を開始できること、そしてデータの信頼性を確保することのみを意味することに注意してください。ルーティングノードとトランスポートノードはネットワークデバイスによって処理され、TCPプロトコル自体はこれらの詳細には関与しません。

TCP接続は全二重サービスです。つまり、ホストAとホストBはTCP接続において双方向にデータを送信できます。つまり、データはホストAとホストBの間で双方向フローで転送されます。

TCPは、接続の送信バッファにデータを一時的に保存します。この送信バッファは、3ウェイハンドシェイク中に設定されるキャッシュの1つです。その後、TCPは送信キャッシュ内のデータを適切なタイミングで宛先ホストの受信キャッシュに送信します。実際には、各ピアは送信キャッシュと受信キャッシュを持ちます(以下を参照)。

TCP-UDP

送信バッファは、送信側のTCP実装によって維持されるメモリ領域であり、送信データを一時的に保存するために使用されます。接続を確立するための3ウェイハンドシェイクが実行されると、送信キャッシュが設定され、データの保存に使用されます。送信バッファは、ネットワークの輻輳状況や受信側からのフィードバックに応じて動的に調整されます。

受信バッファは、受信側のTCP実装によって維持されるメモリ領域であり、受信したデータを一時的に保存するために使用されます。TCPは受信したデータを受信キャッシュに保存し、上位アプリケーションがそれを読み取るのを待ちます。

送信キャッシュと受信キャッシュのサイズには制限があり、キャッシュがいっぱいになると、TCP は輻輳制御、フロー制御などのいくつかの戦略を採用して、信頼性の高いデータ転送とネットワークの安定性を確保することに注意してください。

コンピュータネットワークでは、ホスト間のデータ転送はセグメントを介して行われます。では、パケットセグメントとは何でしょうか?

TCPは、入力ストリームをチャンクに分割し、各チャンクにTCPヘッダーを付加することで、TCPセグメント(パケットセグメント)を作成します。各セグメントは限られた時間のみ送信可能で、最大セグメントサイズ(MSS)を超えることはできません。パケットセグメントは、リンク層を通過します。リンク層には最大転送単位(MTU)があり、これはデータリンク層を通過できる最大パケットサイズです。MTUは通常、通信インターフェースに関連付けられています。

では、MSS と MTU の違いは何でしょうか?

コンピュータネットワークにおいて、階層構造は非常に重要です。なぜなら、階層構造は異なるレベル間の違いを考慮に入れているからです。各層には異なる名称が付けられており、トランスポート層ではデータはセグメント、ネットワーク層ではデータはIPパケットと呼ばれます。したがって、最大転送単位(MTU)はネットワーク層で転送できるIPパケットの最大サイズと考えることができます。一方、最大セグメントサイズ(MSS)はトランスポート層の概念であり、TCPパケットで一度に転送できるデータの最大量を指します。

最大セグメントサイズ(MSS)が最大転送単位(MTU)よりも大きい場合、ネットワーク層でIPフラグメンテーションが実行され、TCPは大きなデータをMTUサイズに適したセグメントに分割しないことに注意してください。ネットワーク層にはIP層専用のセクションが設けられます。

TCPパケットセグメント構造
TCP ヘッダーの形式と内容を調べてみましょう。

TCPセグメント

シーケンス番号: TCP接続が確立された際にコンピュータが初期値として生成する乱数。SYNパケットを通して受信側に送信されます。データ送信中、送信側は送信データ量に応じてシーケンス番号をインクリメントします。受信側は受信したシーケンス番号に基づいてデータの順序を判断します。データが順序どおりでない場合、受信側はデータの順序を揃えるためにデータの順序を並べ替えます。

確認番号: これはTCPにおいてデータの受信確認に使用されるシーケンス番号です。送信側が次に受信すると予想されるデータのシーケンス番号を示します。TCP接続において、受信側は受信したデータパケットセグメントのシーケンス番号に基づいて、どのデータが正常に受信されたかを判断します。受信側がデータを正常に受信すると、ACKパケットを送信側に送信します。このパケットには、確認応答番号が含まれています。送信側はACKパケットを受信することで、応答番号を確認する前のデータが正常に受信されたことを確認できます。

TCP セグメントの制御ビットには次のものが含まれます。

ACKビットこのビットが1の場合、確認応答フィールドが有効であることを意味します。TCPでは、接続が最初に確立される際にSYNパケットを除き、このビットを1に設定する必要があると規定されています。
RSTビット: このビットが 1 の場合、TCP 接続に例外があり、接続を強制的に切断する必要があることを示します。
SYNビット: このビットが 1 に設定されている場合、接続が確立され、シーケンス番号フィールドにシーケンス番号の初期値が設定されることを意味します。
FINビット: このビットが 1 の場合、今後はこれ以上のデータは送信されず、接続が要求されていることを意味します。
TCP のさまざまな機能と特性は、TCP パケット セグメントの構造によって具体化されます。

UDPとは何ですか?(MylinkingのネットワークタップそしてネットワークパケットブローカーTCP パケットと UDP パケットの両方を処理できます)
ユーザーデータグラムプロトコル(UDP)は、コネクションレス型の通信プロトコルです。TCPと比較すると、UDPは複雑な制御メカニズムを提供しません。UDPプロトコルを使用すると、アプリケーションは接続を確立することなく、カプセル化されたIPパケットを直接送信できます。開発者がTCPではなくUDPを選択した場合、アプリケーションはIPと直接通信します。

UDPプロトコルの正式名称はUser Datagram Protocol(ユーザーデータグラムプロトコル)で、ヘッダーはわずか8バイト(64ビット)と非常に簡潔です。UDPヘッダーの形式は以下のとおりです。

UDPセグメント

宛先ポートと送信元ポート: その主な目的は、UDP がどのプロセスにパケットを送信するかを示すことです。
パケットサイズ: パケットサイズフィールドにはUDPヘッダーのサイズとデータのサイズが格納されます。
チェックサム: UDP ヘッダーとデータの信頼性の高い配信を保証するために設計されています。チェックサムの役割は、UDP パケットの送信中にエラーまたは破損が発生したかどうかを検出し、データの整合性を保証することです。

MylinkingのTCPとUDPの違いネットワークタップそしてネットワークパケットブローカーTCPパケットとUDPパケットの両方を処理できる
TCP と UDP は次の点で異なります。

TCPとUDP

繋がりTCPはコネクション指向のトランスポートプロトコルであり、データを転送する前に接続を確立する必要があります。一方、UDPは接続を必要とせず、データを即座に転送できます。

サービスオブジェクトTCPは1対1の2点間サービスです。つまり、接続には2つのエンドポイントのみが通信します。一方、UDPは1対1、1対多、多対多のインタラクティブ通信をサポートし、複数のホストと同時に通信できます。

信頼性TCPは、データを確実に配信するサービスを提供します。これにより、データのエラー、損失、重複がなく、要求に応じて確実に配信されます。一方、UDPは最善を尽くしますが、信頼性の高い配信を保証するものではありません。UDPは、伝送中にデータ損失などの問題が発生する可能性があります。

輻輳制御、フロー制御TCPには輻輳制御とフロー制御のメカニズムがあり、ネットワーク状況に応じてデータ転送速度を調整することで、データ転送の安全性と安定性を確保できます。UDPには輻輳制御とフロー制御のメカニズムがないため、ネットワークが非常に混雑している場合でも、UDPの送信速度は調整されません。

ヘッダーオーバーヘッドTCPのヘッダー長は通常20バイトと長く、オプションフィールドが使用されると長くなります。一方、UDPのヘッダーは8バイトと固定されているため、UDPのヘッダーオーバーヘッドは低くなります。

TCPとUDP

TCP および UDP アプリケーション シナリオ:
TCP と UDP は 2 つの異なるトランスポート層プロトコルであり、アプリケーション シナリオにはいくつかの違いがあります。

TCPはコネクション指向プロトコルであるため、信頼性の高いデータ配信が求められるシナリオで主に使用されます。一般的なユースケースとしては、以下のようなものがあります。

FTPファイル転送: TCP を使用すると、転送中にファイルが失われたり破損したりすることがなくなります。
HTTP/HTTPS: TCP は Web コンテンツの整合性と正確性を保証します。
UDPはコネクションレス型プロトコルであるため、信頼性の保証はありませんが、効率性とリアルタイム性という特徴があります。UDPは次のよ​​うなシナリオに適しています。

DNS(ドメインネームシステム)などの低パケットトラフィック: DNS クエリは通常は短いパケットであり、UDP はそれをより速く完了できます。
ビデオや音声などのマルチメディア通信: リアルタイム性が求められるマルチメディア伝送の場合、UDP は待ち時間を短縮し、タイムリーなデータ伝送を実現します。
放送通信UDP は 1 対多および多対多の通信をサポートし、ブロードキャスト メッセージの送信に使用できます。

まとめ
今日はTCPについて学びました。TCPは、コネクション指向で信頼性の高い、バイトストリームベースのトランスポート層通信プロトコルです。コネクションの確立、ハンドシェイク、確認応答によって、信頼性の高いデータ送信と秩序ある受信を保証します。TCPプロトコルはポートを用いてプロセス間通信を実現し、異なるホスト上で実行されるアプリケーションプロセスに直接通信サービスを提供します。TCP接続は全二重で、双方向のデータ転送を同時に行うことができます。一方、UDPはコネクションレス指向の通信プロトコルであり、信頼性の保証はなく、高いリアルタイム性が求められる一部のシナリオに適しています。TCPとUDPは、接続モード、サービスオブジェクト、信頼性、輻輳制御、フロー制御などの点で異なり、適用シナリオも異なります。


投稿日時: 2024年12月3日