Zenn
🐷

【ネットワーク基礎】プロトコルの種類(TCP・UDP)

に公開

はじめに

これまでTCP/IPモデルにおける各層ごとの役割を見てきました。データは各層でヘッダーという制御情報を追加していき加工されていきます(カプセル化)。
そんな中、トランスポート層において、インターネット通信で使われる主要なプロトコルである TCP(Transmission Control Protocol) と UDP(User Datagram Protocol) は、それぞれ異なる特徴を持っています。
データを確実に届けたいのか、とにかく早く届けたいのか、その目的によって適切なプロトコルを選択する必要があります。
そこで今回は、TCPとUDPの基本的な違いについて、ざっくりまとめていきます。

TCPの特徴

コネクション型

送信元と送信先がお互いに確認をとってからデータを送信する形式をとっています。

・信頼性が高く、データが確実に届く
・確認作業が多く、速度はやや遅め
・データの到達を保証を保証する(再送機能あり)
→ パケット(データの塊)が届かなかった場合、自動的に再送されます。
・データの順序制御
→ 送信した順番でデータを組み立てる(例:Webページの正しい表示)
・輻輳(ふくそう)制御
→ ネットワークが混雑したら送信速度を調整します。

TCPにおける接続確立のプロセス(3wayハンドシェイク)

TCP通信では、データ送信前に信頼性の高い通信路を確立するため、3ウェイハンドシェイクと呼ばれる手順を実行します。
なお、クライアントとサーバーで使用されるSYN・ACKはTCPヘッダーの制御フラグ(ビット、ONとOFFの信号)のことです。
TCPは、フラグとパラメータ(seq, ack, winなど、通信の詳細を決める数値)の組み合わせで、「接続確立→データ転送」を制御しています。

① SYN(同期要求)
クライアント → サーバーに対して接続要求を行ないます。
この段階では、相手に対して「これから接続したいんですけど!」と接続開始の合図を持ちかけます。

② SYN-ACK(同期応答)
サーバー → クライアントに対して返答と自分自身のパラメータを相手に伝えます。

③ ACK(確認応答)
クライアント → サーバーに対しACK(サーバーのシーケンス番号+1)を送信することで、接続が完了したことを最終確認します
この3ステップにより、双方向での通信路が確立されます。

コネクション確立後、ストリーム型通信を開始
まず3ウェイハンドシェイクで接続を確立します。
データは「バイトストリーム」として扱われ、必要に応じてパケット化されます。
アプリケーションから渡されたデータはMSS(Maximum Segment Size)に合わせて適切なサイズのセグメント(TCPパケット)に分割して送信するため、まとめて送信することはありません。

UDPの特徴


コネクションレス型
UDPでは、TCPのように送信先に対して接続要求を行なうことはありません。
確実性よりもデータが届くスピードを重視しています。そのため、リアルタイム性が求められる場面で使用される傾向にあります。

・低遅延
→ 接続確認や再送処理がないため
・軽量
→ ヘッダー情報が少なく、ネットワーク負荷が小さい。

TCPとUDPの違い まとめ

特徴 TCP UDP
信頼性 高い(データが確実に届く) 低い(データが欠ける可能性あり)
速度 やや遅い(確認作業が多い) 高速(確認作業なし)
接続方式 コネクション型(通信前に接続確立) コネクションレス型(いきなり送信)
順序制御 データの順番を保証 順不同で届く可能性あり
主な用途 Web閲覧(HTTP)
メール(SMTP)
ファイル転送(FTP)
動画配信
オンラインゲーム
VoIP(音声通話)

まとめ

今回は、TCPとUDPの違いについて、ざっくりまとめていきました。
データ送信において何を優先するかによって、選択するプロトコルが違ってくることが理解できたと思います。通信の信頼性を重視するのか、通信のスピードを重視するのか、その目的に応じて、最適なプロトコルを選択することが重要になります。
その他、よりくわしく知りたい方は以下のURLより理解を深めることができると思いますので、ご参照ください。

最後までお読みいただき、ありがとうございました。

参考・画像引用元URL

https://www.techscore.com/tech/Java/JavaSE/Network/4/
https://nordvpn.com/ja/blog/tcp-or-udp-which-is-better/
https://www.pynetlabs.com/udp-vs-tcp/
http://milestone-of-se.nesuke.com/nw-basic/tcp-udp/tcp-udp-summary/
https://news.mynavi.jp/techplus/article/networksyosinsya-14/
https://ascii.jp/elem/000/000/619/619702/
https://www.privateinternetaccess.com/blog/tcp-vs-udp-understanding-the-difference/

Discussion

ログインするとコメントできます