1. この記事の目的
ネットワークプロトコルとは?
ネットワークプロトコルとはコンピュータやデバイスが通信する際の規約で「言語」や「規則」のようなものです。具体的にはデータの送受信方法・データの形式・エラー処理の方法など通信をスムーズに行うための手順や規格を指します。これにより異なるデバイスやソフトウェア間でもデータのやり取りが確実に行われることが保証されます。
例えば人々が異なる言語を話す国々での国際会議では、通訳がいれば異なる言語を話す参加者同士でも意思の疎通が可能となります。ネットワークプロトコルも同様の役割を果たし異なるデバイスやシステム間の「通訳」のような役割を担っています。
なぜTCPとUDPを知る必要があるのか?
TCPとUDPはインターネットをはじめとするネットワーク上で最も広く利用されているトランスポート層のプロトコルです。これらのプロトコルはウェブブラウジング・メール送信・オンラインゲーム・ストリーミングサービスなど、私たちが日常的に利用する多くのアプリケーションやサービスの背後に存在します。
OSI参照モデルのトランスポート層については次の記事で詳細に解説しています。
https://envader.plus/article/38
TCPとUDPの違いの理解
エンジニアとして、TCPとUDPの違いを理解することは以下のような理由で非常に重要です。
最適なプロトコルの選択
あるアプリケーションやサービスを設計・開発する際、どちらのプロトコルを使用するべきかの判断基準を知ることで、ユーザーエクスペリエンスやパフォーマンスを最適化できます。
問題のトラブルシューティング
ネットワーク関連の問題が発生した際、TCPやUDPの動作原理を知っていれば問題の原因を特定しやすくなります。
技術の進化への適応
新しい技術やプロトコルが登場する際に既存のプロトコルの知識があると新しい技術への適応や理解が容易になります。
TCPとUDPの知識はエンジニアとしての技術的な基盤を強化し効果的な問題解決能力の向上に寄与します。
2. TCP (Transmission Control Protocol) の概要
TCPが使用される状況
TCP(Transmission Control Protocol)はデータの信頼性や順序性が要求される通信で主に使用されます。ウェブページのローディング・ファイルのダウンロード・メールの送受信・データベースへのクエリなどが含まれます。特にデータの欠損や順序の乱れが許されない状況での選択として重宝されます。
TCPの主な特徴
信頼性
TCPはデータの正確な伝送を保証します。送信したデータパケットが正確に受信側に届いたことを確認しデータにエラーや欠損があった場合、再送を行います。これにより情報の途中欠落や乱れを防ぐことができます。
コネクション指向
通信を開始する前に送信者と受信者の間で「ハンドシェイク」と呼ばれる接続手続きを行います。これによりデータの送受信が開始される前に安全な通信路が確立されることが保証されます。
フロー制御
データの送受信速度を動的に管理します。ネットワークの混雑状況や受信側の処理速度に応じてデータの送信速度を調整することで、効率的な通信を実現するための機能です。
再送制御
データパケットが適切に受信されなかった場合そのデータを再送します。ネットワークの混雑や一時的な障害が生じてもデータの正確な伝送が確保されます。
TCPの使用例
ウェブブラウジング
ウェブページのテキスト・画像・スクリプトなどのコンテンツはHTTPやHTTPSプロトコルを通じてTCPを使用して転送されます。
メール送受信
SMTP・IMAP・POP3などのメールプロトコルはメッセージの安全な送受信を確保するためにTCPを使用します。
ファイル転送
FTP (File Transfer Protocol) は、大きなファイルをインターネット経由で転送する際に用いられTCPを利用してデータの信頼性を確保します。
データベース通信
企業やウェブアプリケーションがデータベースにクエリを送信する際にその応答が確実かつ正確に届くようTCPが使用されます。
3. UDP (User Datagram Protocol) の概要
UDPが使用される状況
UDP(User Datagram Protocol)は低い遅延が要求される状況やデータの一部の欠落が許容される場面で使用されることが多いです。リアルタイムの音声や動画ストリーミングやゲームのオンラインマルチプレイ、DNSクエリなどのアプリケーションで利用されます。
UDPの主な特徴
非接続指向
UDPはデータの送受信を開始する前に通信相手との接続を確立しません。このため通信の開始が迅速です。
最小限のオーバーヘッド
UDPはヘッダ情報が最小限で余分な通信機能やエラー処理機能が省略されているためオーバーヘッドが少ないです。
信頼性のなさ
UDPは送信したデータが正確に受信側に届くことまたは順序通りに届くことを保証しません。高速な通信が求められる場面で有用ですが、信頼性が必要な場面では適していません。
実世界のUDPの使用例
オンラインゲーム
リアルタイム性が重要なオンラインゲームは低遅延でデータを送受信するためにUDPを利用することが多いです。
VoIP (Voice over Internet Protocol)
音声通話サービスの一部は音声データのリアルタイム伝送のためにUDPを使用します。
動画ストリーミング
一部の動画ストリーミングサービスは低遅延での動画データ伝送を実現するためUDPを使用します。
DNS (Domain Name System)
ドメイン名をIPアドレスに変換する際、迅速なクエリ応答を求められるためUDPが利用されます。
4. TCPとUDPの主な違い
ネットワークプロトコルとしてのTCPとUDPはデータの送受信の方法において根本的な違いを持っています。その主要な違いを次のとおりにまとめます。
1. 信頼性と速度
TCPは信頼性が高い
データは順序通りでかつ正確に受信側に届くことが保証されます。データが失われるまたは破損すると再送が行われます。この信頼性の確保のための処理がオーバーヘッドとなり、UDPと比べて遅延が生じることがあります。
UDPは速度が優れている
データの送受信は高速で再送や順序の保証は行われません。このためオーバーヘッドが少なくリアルタイム性が求められるアプリケーションに適しています。
2. 接続の有無
TCP: 接続指向
通信を開始する前に送信側と受信側の間で接続が確立されます(3ウェイハンドシェイク)。通信のセッションが確立されデータの送受信が行われます。
UDP: 非接続指向
事前の接続確立なしにデータを送受信します。通信の開始が迅速です。
3. ユースケースに応じた選択
TCPの使用例
ウェブブラウジング・メールの送受信・ファイル転送など、データの完全性と順序が重要な場面。
UDPの使用例
オンラインゲーム・ストリーミングメディア・VoIPなど、リアルタイム性や低遅延が求められる場面。
TCPとUDPの選択はアプリケーションの要求や必要とされる性能によって決まります。信頼性と完全性が重要な場合はTCP速度とリアルタイム性が重要な場合はUDPを選択するのが一般的です。
まとめ
TCPとUDPはデータの送受信方法において異なる特性を持つネットワークプロトコルです。TCPは信頼性が高く、データの順序や完全性を保証する接続指向のプロトコルで、ウェブブラウジングやファイル転送などの用途に適しています。一方、UDPは非接続指向で、再送や順序の保証はせず、オーバーヘッドが少ないためリアルタイム性が要求されるオンラインゲームやストリーミングなどに適しています。
どちらのプロトコルを選ぶかは使用するアプリケーションのニーズによって異なります。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.12.04
初学者向け!HTTP通信についてもっと深く知ろう
HTTP通信について、「なんとなく知っているけど、しっかり理解できていない」という方に向け、HTTP通信をはじめとするWebの仕組みを解説。
- ネットワーク
2024.12.04
初学者向け!HTTP通信について知ろう
この記事では、フロントエンド初学者向けにWebの仕組みの1つであるHTTP通信について解説します。HTTP通信の基本的な仕組みや役割をわかりやすく解説し、最後には`curl`コマンドを使った簡単なハンズオンも用意しています。
- ネットワーク
2024.09.22
EV/OV/DV SSL証明書の違いを知ろう!最適なSSL証明書の選び方
SSL証明書は、インターネット上の通信を暗号化し、第三者がデータを盗み見たり改ざんしたりするのを防ぐためのセキュリティ技術です。
- ネットワーク