今日はまずTCPに焦点を当てて説明します。レイヤリングに関する章の前半で、重要な点に触れました。ネットワーク層以下では、ホスト間の接続が中心となります。つまり、接続するには、コンピュータが他のコンピュータの場所を知っている必要があります。しかし、ネットワークにおける通信は、マシン間通信というよりもプロセス間通信であることが多いのです。そのため、TCPプロトコルではポートという概念が導入されています。ポートは1つのプロセスのみが占有でき、異なるホスト上で実行されているアプリケーションプロセス間の直接通信を可能にします。
トランスポート層の役割は、異なるホスト上で実行されているアプリケーションプロセス間で直接通信サービスを提供する方法を確立することであり、エンドツーエンドプロトコルとも呼ばれます。トランスポート層はネットワークのコアとなる詳細を隠蔽し、アプリケーションプロセスからは、2つのトランスポート層エンティティ間に論理的なエンドツーエンドの通信チャネルが存在するかのように見えるようにします。
TCPはTransmission Control Protocolの略で、コネクション指向プロトコルとして知られています。つまり、一方のアプリケーションが他方のアプリケーションにデータの送信を開始する前に、両プロセスはハンドシェイクを行う必要があります。ハンドシェイクは論理的に接続されたプロセスであり、データの確実な送信と秩序だった受信を保証します。ハンドシェイク中、一連の制御パケットを交換し、データ送信の成功を確実にするためのパラメータとルールについて合意することで、送信元ホストと宛先ホスト間の接続が確立されます。
TCPとは何ですか? (マイリンキングのネットワークタップそしてネットワークパケットブローカー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実装によって管理されるメモリ領域であり、送信するデータを一時的に保存するために使用されます。接続を確立するための3ウェイハンドシェイクが行われると、送信キャッシュが設定され、データの保存に使用されます。送信バッファは、ネットワークの混雑状況や受信側からのフィードバックに応じて動的に調整されます。
受信バッファとは、受信側のTCP実装によって管理されるメモリ領域であり、受信データを一時的に保存するために使用されます。TCPは受信データを受信キャッシュに保存し、上位アプリケーションがそれを読み取るのを待ちます。
送信キャッシュと受信キャッシュのサイズには制限があることに注意してください。キャッシュがいっぱいになると、TCPは輻輳制御やフロー制御などの戦略を採用して、信頼性の高いデータ伝送とネットワークの安定性を確保する場合があります。
コンピュータネットワークでは、ホスト間のデータ伝送はセグメントによって行われます。では、パケットセグメントとは何でしょうか?
TCPは、受信ストリームをチャンクに分割し、各チャンクにTCPヘッダーを追加することで、TCPセグメント(パケットセグメント)を作成します。各セグメントは限られた時間しか送信できず、最大セグメントサイズ(MSS)を超えることはできません。パケットセグメントは、送信時にリンク層を通過します。リンク層には最大伝送単位(MTU)があり、これはデータリンク層を通過できる最大パケットサイズです。最大伝送単位は通常、通信インターフェースに関連しています。
MSSとMTUの違いは何でしょうか?
コンピュータネットワークにおいて、階層型アーキテクチャは、異なるレベル間の違いを考慮に入れるため、非常に重要です。各層にはそれぞれ異なる名称があり、トランスポート層ではデータはセグメントと呼ばれ、ネットワーク層ではIPパケットと呼ばれます。したがって、最大伝送単位(MTU)はネットワーク層で送信できる最大IPパケットサイズと考えることができ、最大セグメントサイズ(MSS)はトランスポート層の概念であり、TCPパケットが一度に送信できる最大データ量を指します。
最大セグメントサイズ(MSS)が最大伝送単位(MTU)よりも大きい場合、IPフラグメンテーションはネットワーク層で実行され、TCPは大きなデータをMTUサイズに適したセグメントに分割しないことに注意してください。ネットワーク層にはIP層専用のセクションがあります。
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 パケットの送信中にエラーや破損が発生したかどうかを検出し、データの完全性を保証することです。
Mylinkingにおける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バイトと固定されているため、ヘッダーのオーバーヘッドが少なくなります。

TCPおよびUDPの適用シナリオ:
TCPとUDPは2つの異なるトランスポート層プロトコルであり、アプリケーションのシナリオにおいていくつかの違いがあります。
TCPはコネクション指向プロトコルであるため、信頼性の高いデータ配信が求められる場面で主に利用されます。一般的な使用例としては、以下のようなものがあります。
FTPファイル転送TCPは、転送中にファイルが失われたり破損したりしないことを保証できます。
HTTP/HTTPSTCPは、ウェブコンテンツの完全性と正確性を保証します。
UDPはコネクションレスプロトコルであるため、信頼性は保証されませんが、効率性とリアルタイム性という特徴があります。UDPは次のようなシナリオに適しています。
DNS(ドメインネームシステム)などの低パケットトラフィックDNSクエリは通常短いパケットであり、UDPの方が高速に処理を完了できる。
動画や音声などのマルチメディア通信: 高いリアルタイム性が求められるマルチメディア伝送において、UDPは低遅延を実現し、データのタイムリーな伝送を保証することができます。
放送通信UDPは1対多および多対多の通信をサポートし、ブロードキャストメッセージの送信に使用できます。
まとめ
今日はTCPについて学びました。TCPは、コネクション指向で信頼性の高い、バイトストリームベースのトランスポート層通信プロトコルです。接続、ハンドシェイク、確認応答を確立することで、データの確実な送信と順序通りの受信を保証します。TCPプロトコルはポートを使用してプロセス間の通信を実現し、異なるホストで実行されているアプリケーションプロセスに直接通信サービスを提供します。TCP接続は全二重であり、双方向のデータ転送を同時に行うことができます。一方、UDPはコネクションレス型の通信プロトコルであり、信頼性の保証は提供せず、高いリアルタイム性が求められるシナリオに適しています。TCPとUDPは、接続モード、サービスオブジェクト、信頼性、輻輳制御、フロー制御などの点で異なり、適用シナリオも異なります。
投稿日時:2024年12月3日



