TCP、UDP

ここでは、トランスポート層プロトコルとして最も一般的なTCP(Transmission Control Protocol)とUDP(User Datagram Protocol)の説明を行ないます。

トランスポートプロトコル:TCPとUDP

TCPとUDPはIPの上の層に存在するプロトコルです。 IP層は目的地(宛先)ホストまでパケットを運ぶ役目を負っています。 しかし、実際に通信をするにはそれでは不十分です。 TCPやUDPはその不十分なところを補完するものです。

TCPとUDPには、それぞれ特徴があります。 TCPはデータを正しく全部届けたい場合に有効で、UDPは途中でデータが無くなってでも早く届けたい場合に有効です。 TCPは1対1の通信しかできませんが、UDPは一度に大量の受信者宛にデータを送信することができます。

インターネット上を流れるトラフィックの9割以上はTCPによるものであると言われています。 例えば、WWW、メール、FTPなどは全部TCPです。 「インターネット」という単語から思いつく通信の多くがTCPを使っていると言っても過言ではないかも知れません。

一方、音声通話、映像配信などではUDPが多く利用されています。 例えば、音声通話では時間がかかってでも正しく音が全部伝わることよりも、多少途切れてでもすぐに相手に伝わる事の方が重要な場合が多いです。 また、UDPでは一度に複数の相手にデータを遅れるため(マルチキャストやブロードキャスト)、放送型の映像配信や音声配信に利用されます。

TCP

TCPは、コネクション型プロトコルです。

コネクション型プロトコルは、通信をする前に「コネクション」を確立します。 コネクションのイメージとしては、お互いに通信を行いたい相手同士がプラグを持ってきて「カチャ」という感じでプラグを繋げるような感じです。 コネクション型の通信では、通信を行なう端末同士は仮想的な通信回線を作り上げます。 その仮想的な通信回線は「バーチャルサーキット(Virtual Circuit)」と呼ばれます。

バーチャルサーキットでは、通信の信頼性が保証されます。 通信の信頼性とは、「送ったデータが必ず届くこと」と「送ったデータが順番通りに届くこと」です。 これらの信頼性は、両端で何を送り何が届いたかを問い合わせ続ける事により実現しています。 インターネットでは、パケットがどこかでいきなりなくなる事があリます。 両端で何が届いたかを把握しているため、足りないものを再度送りなおす事が可能です。 このように再度送り直すことを再送と呼びます。 この再送により、バーチャルサーキットの信頼性を実現しています。

バーチャルサーキットによる信頼性は、アプリケーションプログラマにとっては非常にありがたいものです。 普通にプログラムを書く人は「ネットワークでパケットがなくなったらどうするか」や「ネットワークの途中でデータの内容が変わったらどうしよう」というのは考えたくありません。 TCPを使うことにより、プログラマはそのようなわずらわしさから解放されます。 メール、WWW、FTPなどでは、データがそのまま伝わることが要求されます。 そのため、それらのプロトコルはTCPを使った通信を行っています。

TCPは、再送だけでなく輻輳制御も行います。 輻輳制御とは「混雑回避」を行うことです。 簡単に言うと、ネットワークが混んでいたら送るデータ量を減らす、混んでいなかったら送るデータ量を増やすという事をします。

UDP

UDPは、コネクションレス型プロトコルです。

コネクションレス型の通信は、非常に単純です。 簡単に言うと、コネクションレス型の通信は「送りっぱなし」です。 コネクションレス型の通信では、コネクション型のようなバーチャルサーキットを構築したりしません。 再送は行なわれず、送ったデータが相手に届く事は保証されません。 また、受信側でパケットが送られた順番通りに届く事も保証されません。

TCPの再送や輻輳制御は非常に便利なものです。 しかし、送りなおしたり送る量を調節したりするため、データの転送に時間がかかってしまうことがあります。 UDPでは、何も考えずひたすら投げつけるだけなのでTCPと比較して即時性があります。 そのため、音声通話や映像配信などに利用されます。

前(OSI 7層モデル) インターネット入門TOP 次(IPアドレス)

IPv6基礎検定

YouTubeチャンネルやってます!