広告




「TCP」「UDP」「IP」?

「TDR」と「USJ」の違いならわかるのだが……



ネットワーク


──「TCP・UDP・IP」のこともわかってやってください……



IT用語ですね。

私の激・苦手な複雑奇怪分野なのですが、これは知ってしまえばそれほど難しい違いではありません。

むしろ毎日文句も言わずに(機械だから)指示に従ってハキハキ動いてくれているパソコンが、ちょっと健気に思えてくるかも……


パソコンとの友好な関係を続けていくためにも、ここは軽く抑えておいてしまいましょう。


    「TCP」「UDP」「IP」とは何か?
    その違いは?


等についてわかりやすく解説いたします。


皆さまの「スッキリした!」のお役に、少しでも立てれば幸いです。


広告

「TCP」「UDP」「IP」って何?


「IP」というのは「インターネット・プロトコル」の略称。

そして「TCP」「UDP」はともにインターネットに標準的に利用されている「トランスポート・プロトコル(の2つの種類)」です。



……もはや呪文……
何を言っているのか、さっぱりわかりません……



── まずはわかりにくい用語からやっつけていきましょう。


  • プロトコル: 取り決め、手順など
  • トランスポート: 人・物を運ぶこと


「IP」「TCP / UDP(トランスポート・プロトコル)」を当てはめてみます。


  • IP: インターネットでの取り決め・手順
  • TCP / UDP: 運ぶための取り決め・手順


……それほどわかりやすくはなりませんでしたが、つまり、


  • IP: 複数の通信ネットワークを接続し、互いにデータのやり取りをするための決められたルール
    (※ IPによって接続された世界規模のコンピュータネットワークが「インターネット」)

  • TCP / UDP: インターネット通信で標準的に利用される、データ等を運ぶための手順


のような感じ。


そして「IP」も「TCP / UDP」もどちらも「〇〇・プロトコル」であることからもわかります通り、この「プロトコル」というのはいくつかの層に分けられており、それぞれが役割を分担してデータの送受信が行われているのですね。


細かく分ければ7層。

役割分担の上では4層に分かれます。


  • アプリケーション層
  • トランスポート層(ここに「TCP / UDP」)
  • インターネット層(「IP」)
  • ネットワークインターフェース層


これだけでは何が何だかわからないかと思いますが、とりあえずここを薄っすらとでも頭の片隅に置いておいていただき、続いてそれぞれの仕事について少し詳しく見て行ってみましょう。


広告

「IP」とは?


インターネットの最も基本的な通信手段の決まり事である「IP」。

ネットワーク上でなされるデータの送受信は、すべて「IP」により定められたルールで行われています。


そして、届け先の相手の居場所を探し出すために必要となってくるのが、それぞれのコンピュータごとに割り当てられている「IPアドレス」

これがいわばその「パソコンやサーバの住所」に当たるものとなります。


「IP」が行うのは、


    決められた通信のルールに従い「IPアドレス」の情報をもとに相手先にデータを送ること


です。
とりあえず送る。


ですが確実に届ける、といったことまでは責任を持ちません。


なにせ一つのコンピュータに割り当てられているのはたった一つの「IPアドレス」のみ。

「パソコンの住所」ではあるのですが、その中にはいくつものアプリケーションが存在しているため、送られてきたものが「メールとしてのデータ」なのか「ファイル共有のためのデータ」なのか、などの区別のつけようがないのですね。


「IPアドレス」に含まれているのは、


  • どのネットワークに属しているかの特定に使われる「ネットワークアドレス」
  • そのネットワーク内のどのコンピュータなのかを特定するための「ホストアドレス」


その先の「どのアプリケーションに届けるためのデータなのか」についての情報は書かれていないのです。


── でも「IP」に与えられた役割は「IPアドレス」から分かる情報の範囲の相手先にデータを送ること。


だからとりあえず「IPアドレス」を目指す、です。


しかも、大きなデータはそのまま送ることができません。

送ることのできる容量のようなものには上限があるからです。


ですのでいくつかに分けて送信。


この「いくつかに分けたひとかたまりのデータ」が「パケット」です。

ネットワークを小分けになって流れていくわけです。


すると、何が起きるか。


  • 順番がバラバラになる
  • データが壊れていたり、紛失している場合もありうる
  • 複数のアプリケーションのどこに運べばいいのか識別できない


といった可能性が出てきてしまうのです。


── もう!(役立たず!!)


と小声で言いたくなってしまう事態です。


そこで登場するのが「TCP」

現在は前述の通り「トランスポート層」と「インターネット層」に分かれていますが、もともとは1つのプロトコル「TCP / IP」として考案されたものです。


「IPの欠点補い係」のような存在が「TCP」。


では続いて、どのように「IP」 をサポートしてくれているのか、「TCP」について見ていきます。


広告

「TCP」とは?


「IP」だけでは心もとなかった「データお届けへの信頼」に対するフォローをしてくれる「TCP」。

「コネクション型プロトコル」とも呼ばれています。


また「コネクション型」という謎の用語が出てきてしまいましたが、


  • 通信を行う前に相手と(仮想の)専用通信路を作ってからのやり取り


「コネクション」というのは、この「専用通信路」のこと(仮想経路 / バーチャルサーキットなどとも呼ばれます)。

相手との間に専用の一本道を先に作っておくようなイメージですね。


このことにより送られてきたデータはほかの通信と混ざることなく「1対1」の形で(仮想ですが)相手先アプリケーションのもとへ届けられることになります。


そのうえで、


「誤り制御機能」

「輻輳(ふくそう)制御機能」

「フロー制御機能」



この3つの基本的な制御機能により、より信頼性のある通信を、そして「IP」の欠点のフォローをしてくれているのです。



「IPアドレス」のみを頼りにデータを送っていたのでは、行き着く先は「パソコンやサーバのある場所」止まり。

それぞれのアプリケーションにまで確実に届けるために「TCP」では「ポート番号」という、アプリケーションごとに割り振られた番号により届け先の識別を行っています。

そして送信されるパケットにつけられる通し番号が「シーケンス番号」です。


例えば、


「起きたらすでに11時。間違いなく遅刻だ。もう、今日は会社休もう」


というデータを送るとします。
(仮にです。あくまで例えばです)


「TCP」は、


    「起きたらすで」
    「に11時。間」
    「違いなく遅刻」
    「だ。もう、今日」
    「は会社休もう」


ピッタリ意味のある文ごとに分けて送ってくれるわけではありませんが、この順番が、


    「に11時。間」
    「は会社休もう」
    「違いなく遅刻」
    「起きたらすで」
    「だ。もう、今日」


のようになることはありません。


区切りを判別するのは、先ほどの「プロトコル層」の上位層に属す「アプリケーション」の担当。


TCPの分担は、すべてのデータを確実に、送信した通りの順番で届けることまでです。


そして「チェックサム」という検出方法を使い、データの伝送、記録や複製が正しく行われたかをチェック。


これらが「誤り制御機能」です。



「輻輳制御機能」というのは、ネットワークの混雑時を見つけ出し、送信するパケットの量を調節してくれる機能のこと。



また「TCP」通信の原則では1つのパケットが到着するごとに「届きました!」と送信側に報告(受け取った旨をデータにしてパケットで送信)することになっています。

恐ろしく効率が悪い。


ですので、いくつかのパケットをまとめて受け取り、まとめてその報告もしたいのですね。

「TCP」通信では、そのために必要な「そちら(受信側)は一度にどれくらいの容量までなら処理が可能ですか?」といったやり取りをすることができます。
(※ この一時的に保存しておける記憶領域を「バッファ」といいます)


だから 受信先の処理能力に合わせてパケット量を調節することができる。

これが「フロー制御機能」です。


  • 届け先も間違わず、

    → データの紛失や重複のチェック、ミスがあった場合の対処も行い、

    → 順番通りに切れ目なくデータを送り、

    → 分割までこなし、

    → 相手の処理能力や回線の混雑状況等によるパケット量の調節までこなす


非常に優秀。


── なのですが「TCP」が考案されたのは1970年代。


データ通信中心の時代なのです。

音声や映像の通信が可能になるとは、全く想定していないトランスポートプロトコルとしての仕組み。


送れないのです。

といいますか、送ろうとすると、自分のできる範囲で目いっぱい頑張ってしまうため「そういうことは、しなくていいから」というヘンな処理を行ってしまう。



これは困った……



そこで考案されたのが「UDP」。


── と言いたいところなのですが、これがちょっとだけ違うのですね。


では、続いてはそんな「UDP」。

どのような仕事をしてくれるものなのか、見ていきましょう。


広告

「UDP」とは?「TCP」とはココが違う!


データ通信に特化した「TCP」。

時代が進み音声や映像の通信ではその力を存分に発揮できなく(むしろジャマをする存在に)なってきたため、これらに関しては降板を余儀なくされます。


でも、音声も映像も送りたい。


── 時代のニーズに応えなければ!


となるわけなのですが、その「時代」というのが、今後どのように進んでいくのかはまだまだ未知数。

音声や映像だけでなく、求められるものはさらに増えていくかもしれない。


    ……そんな状態で「音声・映像」に限ったプロトコルを考案したところで、焼け石に水では……?

    ニーズに合わせ特化したものを一つひとつ作っていったら、これからもそのための「新・トランスポート・プロトコル」を永遠に作り続けることになっちゃわない
    ……?


はい。
なると思います。


そこで「UDP」。


  • アプリケーションの識別はできる(ポート番号により)
  • データの転送が正しく行われたかのチェックもできる


ですが、それ以外、信頼性に関しては「IP」とほぼ同じレベルでしかない「トランスポート・プロトコル」が「UDP」です。


では「音声・映像」の通信はどうなってしまうのか、と言いますと、


「アプリケーションサイドでの開発、求む」


としたのですね。


「TCP」では分割したデータ(パケット)をネット上に流し、相手先に順番通りに届け、データの紛失や重複等のミスに関しても対処、送信した通りの切れ目ないデータを責任をもって届けてくれていましたが、「UDP」ではドカッとかたまりのまま送ります。


送られてきたデータの処理をするのは相手先のアプリケーション。


最低限の機能以外は、上の層にお任せ。


……なんと言いますか、ずいぶんと投げやりな感じを受けますが「TCP」のようにアプリケーションとの間に専用のコネクションを作らず、そのためのやり取りなどもないため、処理もシンプルかつスピーディに行える、というメリットが出てきます。


その代わり信頼性には若干かけるのですが、ちょっとくらいデータが抜けてもそれなりに意味の分かる音声や映像には打ってつけなのですね。


信頼性を確保するために、確認のやり取りをしながら通信を行う「TCP」では、制御が複雑すぎて通信速度の向上が図れません。

電波状況が悪い場合には、最悪通信自体が不可、となることも。


一方、信頼性に気を使わない「UDP」では、その分リアルタイムな通信が可能。


「信頼性」VS「スピード重視」


また、コネクション型の「TCP」では、少なからずコンピュータのメモリやCPUを消費することになります。

通信処理にコストがかかるのです。

無限にコネクション数を増やせるわけではない。


コネクションレス型(コネクションを確立しない)の「UDP」には、この懸念もありません。

メモリやCPUの消費もないため、通信相手がどれだけいてもOK。


TCPの「1対1」に対し、UDPでは「1対特定多数」となります。

ただし、受信側のネットワーク環境などによっては、音質・画質に影響の出ることもあり、です。


そこまでは面倒を見てくれません。

通信制御などの処理は受け手のアプリケーション層が担当。


これまでのほぼ「データ通信」のみ、から「音声・映像通信」までもが可能になりましたが、UDP自体の仕組みは実にシンプルなのです。


TCPの方が働き者。

でも、音声や映像には役に立たず。


そこで音声・映像に最適のトランスポート・プロトコルというわけでもなく、信頼レベルはIP並みしかないUDPを考案し、実際の処理作業はアプリケーションに託す。

そうすることにより音声・映像の通信を可能に。


……発想が、斬新なのです。


広告

「TCP」「UDP」「IP」の違いをまとめる!


「インターネット上の基本ルールの『IP』」

「データを運ぶための取り決めである『TCP / UDP』」



そしてその通信の仕方に大きな違いのある「TCP / UDP」。


では最後におさらいです。

もう一度まとめていってみましょう。

ネットワーク

それぞれができるのはどこまで?


  • IP: IPアドレスの情報をもとにデータを「相手先住所」まで送ること
  • TCP: それぞれに割り当てられた「ポート番号」を識別し、確実にそのアプリケーションまでデータをお届け
  • UDP: TCPと同じくそれぞれのお届け先アプリケーションの識別や、データが壊れていないか、等のチェックはできるが、コネクションの確率は行わないため、確実に相手に届いているか、やデータの順序を揃える、などは相手サイドにお任せ
    (※ とりあえず送るべきところには送った、といった感じ)

TCPの信頼性が高いとされるわけは?


信頼性を確保する3つの基本的な機能を備えているからです。

    誤り制御機能

  • 「ポート番号」によりアプリケーションを識別
  • 「シーケンス番号」によりパケットの順序をチェック
  • 「チェックサム」によりデータの伝送、記録や複製が正しく行われたかをチェック。


  • 輻輳(ふくそう)制御機能

  • ネットワークの混雑時、またはデータ量が通信回線の許容量を超えてしまう、といったことが起こらないよう送信するパケット量を調節


  • フロー制御機能

  • いくつかのパケットをまとめてやり取りする際に必要となる「受信側のバッファ容量」を知ることにより、その処理能力に合わせたパケット量を調節しての送信が可能に

TCP / UDP、それぞれの得意分野は?


  • TCP: データ通信
    (メールの送受信やWeb閲覧、ファイル共有など、データが飛んでは困るもの / 1対1の通信に)

  • UDP: 音声通信・映像通信などリアルタイム通信、コネクションを確立するほどでもない一時的な通信などにも
    (動画のストリーミング配信やIP電話などなど、多少の欠けなら許されるデータ / 1対特定多数での通信に)


広告

終わりに……


「IP」の登場率が、今回非常に低かったような気がします……気のせいかもしれません……


同じトランスポート層に属す「TCP」と「UDP」。
確かに若干ややこしいのですが、イメージ的には、

  • TCP: 働き者で頑張り屋さん
  • UDP: 要領のいい楽天家

のように勝手に感じています。


パソコンは好きだけど、IT用語とか横文字とか、苦手……


はい。
私も本気で苦手です!


その仕組みを知ることで、何かいいことがあるのかどうかは不明ですが、


「なんかちょっとだけスッキリしたかも」


と、単純な私は思ってしまうのですが……



今回も最後までおつき合いいただき、本当にありがとうございました。


皆さまの「IP・TCP・UDP」に対するモヤモヤが、少しでも薄くなっていたらうれしいです!


広告