TCPプロトコルの役割は信頼できる通信を実現する

TCP(Transmission Control Protocol)とはアプリケーション間のデータ転送の信頼性を確保するトランスポート層のプロトコルです。TCPを利用することで上位のアプリケーション層で信頼性を確保する仕組みの導入を考慮する必要がなくなります。

TCPによるデータ通信

TCPの特徴は通信に先立ってTCPコネクションという論理的な通信路を確保して通信が可能か確認を行うことにより信頼性の高い通信を提供する点です。

TCPコネクションの確立は3ウェイハンドシェイクというプロセスによって行われます。

3ウェイハンドシェイク
  1. クライアント(私たちのコンピュータ)がサーバに対して通信可能かを確認する(SYNパケットを送信)。
  2. サーバは通信が可能であると応答ともにクライアントが通信可能か確認する(SYN+ACKパケットを送信)。
  3. クライアントは通信が可能であると応答する(ACKパケットを送信)。

アプリケーションのデータをTCPで送信するためには送信データに対してアプリケーション層のプロトコルのヘッダとTCPのヘッダを付与する必要があります。TCPヘッダが付与されたデータはTCPセグメントと呼ばれます。

送信データが大きい場合は複数のTCPセグメントに分割して転送されます。分割方法はTCPヘッダに記述されていて、送信先で元のデータに組みなおされるようにしています。

このときデータの受け取り先ではACKによって受信確認を行っていて、シーケンス番号や確認応答番号を管理することで欠落したデータがないか管理することで信頼性の高い通信を実現しています。

TCPヘッダの中身

TCPで送信したいデータにはTCPヘッダを付加することでTCPセグメントとします。TCPヘッダのフォーマットは下の通りです。

TCPヘッダ

最も重要なのは最上部の送信元と宛先のポート番号です。ポート番号とはアプリケーションを識別する番号で、これを指定することでデータを適切なアプリケーションに振り分けることが可能となります。

その下にくるシーケンス番号確認応答番号は先ほど説明したように信頼できる通信を確立するために必要なものです。

シーケンス番号は送信したセグメントの順序を表し、分割したセグメントに抜けがないかのチェックなどに使われます。確認応答番号は受信側が次に期待するセグメントのシーケンス番号が格納されています。通常確認応答番号には受信したセグメントのシーケンス番号に1足した数値をセットしてACKパケットとして返送しています。

シーケンス番号と確認応答番号

UDPプロトコル

これまではTCPプロトコルについて紹介してきましたが、同じトランスポート層のプロトコルとしてUDP(User Datagram Protocol)というプロトコルも存在します。

TCPとの大きな違いはヘッダが非常にシンプルで高速な通信が可能な反面、信頼性を確保する機能がないという点です

UDPヘッダは下のようにTCPヘッダと比べて非常にシンプルです。ただしシーケンス番号や確認応答番号などが存在しないのでデータが相手にきちんと届いたかどうかはわからないため信頼性という点では劣ります。

UDPヘッダ

UDPは高速通信が可能であることから音声や映像などリアルタイム性が求められる通信において使われています。

コメント

タイトルとURLをコピーしました