インターネット通信で標準的に使われるプロトコルとして挙げられる「TCP」と「UDP」。これらのプロトコルは、通信をおこなうコンピューター間で、どのようにデータの送受信をおこなうかを取り決めているものです。
この記事ではTCPとUDPについて、その特徴や利用シーンによる使い分けを詳しく解説します。
目次
TCP/IPとは?

TCP/IPは、インターネット上で標準的に利用されているプロトコルの一つです。TCP(Transmission Control Protocol)とIP(Internet Protocol)という2種類のプロトコルによって構成されています。
IPは、IPアドレスを元に通信先を指定し、データをIPパケットにして届けるためのプロトコルです。基本的にTCPとセットで使われています。
そしてTCPは、IPアドレスの上位で動くプロトコルです。IPアドレスを利用した通信の中で、通信相手のコンピューターとデータを送り出すタイミングの調整をしたり、届けられたデータを順番通りに復元したりするなど、通信をおこなう工程を制御しています。
UDPとは?

UDP(User Datagram Protocol)は、TCPと同じくインターネットで標準的に利用されているプロトコルの一つです。IPネットワーク上の通信において、コンピューターやアプリケーション同士が、必要最低限の通信量でデータを送受信できることを目的として考案されました。
大きな特徴として、送信先のコンピューターに対してデータを一方的に送り続ける点が挙げられます。そのためデータを送信する側のコンピューターは、通信相手に送ったデータが無事に届いているかを知る方法がありません。
そしてデータを受け取った側のコンピューターは、IPパケットのヘッダー情報を参照しながらデータを元通りに復元します。データはインターネット回線が不安定になるなどのトラブルで壊れたり失われたりすることがありますが、データを受信したコンピューターはそれらの欠損も気にせず復元し続けます。
UDPの詳細については「初心者でもよくわかる「UDP」とは?」の記事をご覧ください。
TCPとUDPの仕組み

TCPとUDPは、どちらもOSI参照モデルにおけるトランスポート層(データ転送の信頼性を確保する規定)の仕組みを提供するプロトコルです。ただしTCPとUDPには、動作の仕組みにそれぞれ大きな特徴があります。
ここでは、TCPとUDPの仕組みについて紹介しましょう。
TCP/IP
TCPの通信は、データを正しく届けるための仕組みを数多く備えている、信頼性が高い通信プロトコルです。
TCPでは通信を開始する際、最初に通信相手とのコネクションを確立します。コネクションとは、通信相手への声掛けのようなものです。通信をおこなうコンピューター間で、次のようなやり取りが交わされます。

このような処理をおこない、コンピューター同士でお互いにデータを送受信するための準備を整えるのです。
またTCPの通信では、コネクションを確立した後も、データが正しく届けられたことを確認する通信を頻繁におこなっています。その中には次のようなデータが含まれます。
- IPパケットの通し番号
- IPパケットのデータの長さ
- チェックサム
チェックサムは、ファイルの内容に誤りがないかを確認する「誤り検出」と呼ばれる処理で使われる仕組みの一種です。TCPでは通信をおこなうコンピューター同士が、送受信をおこなうすべてのデータに対してチェックサムを使用し、正しいデータであることをお互いに確認しています。
UDP
UDPの通信では通信速度を優先するため、TCPのようにコネクションを確立しません。またデータが正しく届けられたことを確認するための通信もおこないません。
データを送信するコンピューターAは、送信相手であるコンピューターBの状態を意識することなく、データの送信を開始します。データを受信したコンピューターBも、受け取ったデータが正しいことを前提にして処理を進めます。

このようにコンピューターAはデータを送信しつづけ、コンピューターBも特に返信せず、そのとき受け取れたデータのみ処理を進めるのです。
TCPとUDPの違いを比較

ここではTCPとUDPの違いについて、代表的な特徴を比較してみましょう。
|
TCP
|
UDP
|
通信方法
|
コネクション型
|
コネクションレス型
(データグラム型)
|
長所と短所
|
・データの信頼性が高い
・通信量が多く低速になりやすい
|
・データ転送が高速
・データの信頼性が低い
|
ヘッダー形式
|
複雑
|
シンプル
|
通信方式
TCPは、最初に通信をおこなうコンピューター同士がコネクションを確立してからデータの送受信を開始する「コネクション型」の通信方式を採用しています。
これに対しUDPは、データを送信するコンピューターが一方的にデータの送信を開始する、コネクションレス型の通信方式を採用しています。
またUDPの通信方式は「データグラム型通信」とも呼ばれます。グラムは「書き留めたもの」という意味で、送信するデータを小さなIPパケットに分割して一方的に通信する様子を、データを書き留めたもの(データグラム)を送る様子に例えてそう呼ばれています。
長所と短所
TCPは通信相手とのコネクションを確立してからデータの転送を開始するため、データを通信相手に確実に届けられることが保証されています。その反面、データが正確に届けられたことを確認するための通信量も増えるため、通信速度はUDPに比べて低速になる傾向があります。
一方でUDPは通信速度を重視しているため、高速にデータ転送をおこなうことができます。しかしデータの転送元となるコンピューターは一方的にデータを送り続けるため、データが欠損したり紛失したりしても気づくことができず、信頼性はTCPよりも低くなるのです。
ヘッダー形式
TCPとUDPは、IPパケットに付与するヘッダーの形式にも大きな違いがあります。
UDPのヘッダーは、「送信元ポート」「宛先ポート」「データ長」「チェックサム」という4つの要素のみが含まれている非常にシンプルな構造です。データを受け取ったコンピューターは、「送信元ポート」と「宛先ポート」から、データを処理するために利用するアプリケーションに引き渡します。
これに対し、TCPのヘッダーにはさまざまな要素が含まれています。その中から例として、通信の信頼性を高める主な要素についてご紹介します。
シーケンス番号
複数に分割されたIPパケットに付与される通し番号のような項目です。シーケンス番号の情報から、分割されたデータをどこまで読み込んだかを理解することができます。
確認応答番号
次に読み込む予定のシーケンス番号が保管されています。データを受け取ったコンピューターは、確認応答番号からデータを復元するための順番を知ることができるようになっています。
TCPとUDPはどう使い分けられている?

TCPとUDPは、その特徴の違いから、向き・不向きがはっきりしているプロトコルです。それぞれのプロトコルの特徴から、どのように使い分けをするのかを解説します。
|
TCP
|
UDP
|
利用例
|
Webサイトの閲覧
メールの送受信
ファイル転送
など
|
VoIPなどによる音声通話
多拠点でのWeb会議
動画配信
DNS
NTP
など
|
TCPは信頼性を重視した通信
TCPの大きな特徴は、通信相手とのコネクションを確立し、データを送信するたびに、データが正しく届けられたことを確認している点です。そのため通信相手に確実にデータを届ける必要がある通信に利用されます。
またTCPの通信では、基本的に送信元と送信相手となるコンピューターが一対一で通信をおこないます。
主な利用例としては、Webサイトの表示やメールの送受信、ファイル転送などが挙げられます。これらの通信でデータが欠損すると、一部の表示が崩れたり、届いたデータを開くことができなかったりする可能性があります。
UDPは速度を重視した通信
UDPの通信では高速なデータ転送ができるため、データを送受信するコンピューター同士がリアルタイムにデータ通信をおこなうケースに向いています。
たとえばVoIPを活用した音声通話や、多拠点でのWeb会議、動画配信などです。これらの用途では、音声や動画などの大容量のデータを送信し、リアルタイムに再生をおこなう必要があります。そのため一部のデータが欠損していても、音声や動画が乱れるだけで、再生は継続されるのです。
またUDPの通信は、インターネット上で数多く処理され、即応性を求められる簡易通信にも向いています。例としてはインターネット上の名前解決をおこなうDNSや、コンピューターの時刻同期をおこなうNTPなどが挙げられます。
コミュニケーションAPI「Twilio」のご紹介
「Twilio(トゥイリオ)」は世の中にあるさまざまなコミュニケーションチャネルを、WEB・モバイルアプリケーションと繋ぐクラウドコミュニケーションAPIです。
電話機能やビデオ機能を自社で一から開発するのには多大な工数がかかります。通信の暗号化といったセキュリティ対策など、考慮せねばならない点も多く、そのために実装を諦めてしまう企業も少なくありません。
しかしTwilioと連携すれば、それらの工数をすべてTwilio側が担ってくれます。開発者はただ数行のコードを自社プログラムに書き加えるだけで、さまざまなコミュニケーション機能を簡単に実装できるのです。