【ネットワーク基礎】プロトコルの種類(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
Discussion