【4層目:トランスポート層】TCPとUDPの違いについて


TCP/IPにおける2つのプロトコル

TCP/IPには、2つのトランスポートプロトコルがある。OSI参照モデルのトランスポート層にあたる役割をこなす。
アプリケーションプログラム間の通信を実現すること。

何の略か What do these stand for?

UDP User Datagram Protocol
ユーザーとは、ここではプログラマにあたる。
Datagramとは、
A datagram is a basic transfer unit associated with a packet-switched network.(wiki引用)
つまり、パケット通信における単位のこと。

TCP Transmission Control Protocol
読んで字のごとく、転送をコントロールするプロトコル。

違いは?

違いをざっくり言えば、
TCPは転送を制御するプロトコル
UDPは複雑な制御をしないプロトコル
それぞれによって利点が異なる。なので、優劣があるわけではない。

UDP TCP
通信方式 コネクションレス型 コネクション型
信頼性 低い 高い
速度 高速 低速
データの到達 保証しない 保証する
パケットの少ない通信 ×
主な用途 ビデオ、音声のマルチメディア通信 メールの送受信
ブロード/マルチキャストの通信 ファイルの転送、共有

通信方式

コネクション(TCPにおける)とは、各種機種や回線、通信を行う2つのアプリケーションが、情報伝達のために占有して使用できる通信路を仮想的に提供するもの(バーチャルサーキットとも呼ばれる)

IPの通信自体が、コネクションレス型なので、そのような中で仮想的にコネクションを確立することで信頼性を高めている。

コネクション型とは、そのコネクションを確立してデータを送る。TCPでは、そのコネクションの確立、終了、維持といった管理を行っている。
例えるなら電話のようなもの。
電話番号を入力して、相手が出てから話す。終わったら切る。
相手が通信不可能な場合は、無駄なパケットを送らなくてすむ。
コネクションの確立・切断にパケットを使用することになるので、転送するデータの総量が少ない場合は、無駄が多くなる。

コネクションレス型とは、コネクションを確立せず送信要求のあったタイミングでデータをネットワークに流す。郵便のようなもの。一方的に送り、受け取ったかどうかは確認しない。

信頼性・到達性

TCPは、データが到達することを保証する。
・ネットワークの途中で失ったデータがあれば、再送する。
・パケットのデータが入れ替わった場合の制御を行い正しく解決する。
・パケットの到達を確認する確認応答などTCPの中で行っている。

その分、TCPは、複雑な仕組みになっており、ビデオの通信など、一定間隔での一定量のデータの通信が必要な場合向かない。(ビデオなどに使うと、データが途中で失われた場合、再送処理が行われその間音や画像が止まる、また急にパケットが届くと早送り状態になる。)

UDPは、パケットの喪失、順番が入れ替わっても複雑な制御は一切せずデータを送るだけで到達したかどうか確認はしない。パケット量の制御などもせず、トランスポート層として最低限の役割をこなす。
ビデオなどの通信中にパケットを失なっても、再送処理をせずデータを流し続けるので、一瞬ビデオが固まる程度である。そのようなパケットが失われても問題にならないような通信や、リアルタイム性が重要な時において使う。

ソケットとは(追記21/10/20)

アプリケーションからTCPやUDPを利用するときは、OSが用意しているライブラリを使う。このようなライブラリは、APIと一般的に呼ばれている。
TCP,IPなどの通信では、ソケットと呼ばれるAPI(ソケット=APIの名前)が使われている。
元は、UNIXで開発され、windowsやwinsock、組み込み機器のOSなどに移植された。
アプリケーションはソケットを利用して、通信相手のIPアドレスやポート番号を設定したり、データの送受信を行っている。

まとめ

TCPは、信頼性があるので、信頼性のある通信が必要な時に使われる。
UDPは、リアルタイム性や、高速性が必要な時に使われる。
信頼性が高いから優れているわけでなく、適材適所、適した状況が存在する。

参考

マスタリングTCP/IP