TCPとUDP

通信には、信頼性のある通信と信頼性のない通信があります。

本項では、TCP(Transmission Control Protocol)とUDP(User Datagram Protocol)について説明します。

信頼性のある通信とない通信

通信には、信頼性のある通信とない通信があります。信頼性のある通信はTCP、信頼性のない通信はUDPというプロトコルを使っています。TCPとUDPの違いは、以下のとおりです。

TCP
TCPは、相手までフレームが届いたか確認しながら通信を行い、届いていない場合は再送するため、確実性があります。
UDP
UDPは、相手までフレームが届いたかを確認しないため、届いてない場合でも再送しません。

TCPもUDPもレイヤー4の技術でポート番号がこのレイヤーに当たり、レイヤー3のIPプロトコルと組み合わせて使われます。つまり、IPプロトコルで通信相手までたどり着き、TCPやUDPで利用するサービスを決定します。

TCPの通信手順

TCPは、通信の最初に3ウェイハンドシェイクという通信を行います。

3ウェイハンドシェイク

上の図でSYNやACKと記載があるのはフラグと呼ばれていて、次にどのようなフラグで通信するか手順が決まっています。フラグはポート番号などと同様、パケットの中に組み込まれています。

同様に、シーケンス番号というのもパケットの中に組み込まれており、この番号により受信側でパケットが順番通り来ているか判断しています。このため、パケットに抜けがあった場合はシーケンス番号に抜けが出るため再送が可能です。

このように、TCPでは1度通信を開始すると手順や番号などで管理された上で送受信を行います。これを、コネクションと言います。

同じパソコンとサーバー間の通信でも、違う通信であればコネクション管理も異なります。また、相手からの応答が遅いとタイムアウトして通信が切断されます。

通信を終了する時は、以下の手順になります。

TCP終了手順

TCPは確実にデータを送信したい通信、およびWeb参照などのようにデータ量が多いため何度もパケットを送る必要があり、パケットに抜けがあっても再送によって回復できる通信に向いています。

TCPヘッダーの構造

IPパケットの構造はすでに説明したとおりですが、そのペイロード部分にTCPが入ります。TCPのプロトコル番号は、6番です。つまり、IPヘッダーのプロトコル番号が6番であれば、IPパケットのペイロード部分はTCPが入っているということです。

TCPヘッダーの構造は、以下のとおりです。

TCPセグメント構造

TCPヘッダーとペイロード含めて、セグメントと呼ばれます。

それぞれの意味は、以下のとおりです。

【セグメント構造の説明】
項目 英語 ビット 説明
送信元ポート番号 Source Port 16 送信元ポート番号
宛先ポート番号 Destination Port 16 宛先ポート番号
シーケンス番号 Sequence Number 32 通信が進むにつれて増加する番号
ACK番号 Acknowledgment Number 32 応答が増えるたびに増加する番号
サイズ Data Offset 4 TCPヘッダーサイズ
予約 Reserved 4 常に0
フラグ Control bits(flags) 8 SYN、ACK、FINなどを示す
ウィンドウサイズ Window 16 一度に送信できるデータ量
チェックサム Checksum 16 エラー検知用
緊急ポインタ Urgent Pointer 16 真っ先に処理するデータの位置
オプション Options 可変 必要に応じて利用
ペイロード Data 可変 送信するデータ

シーケンス番号とACK番号は、通信が進むにつれて増えていきます。また、ウィンドウサイズはパケットを連続で送信して相手が受信できないと意味ないので、一度に送信するデータ量を決めるためのものです。

詳細は、TCP通信の流れをご参照ください。

MSS

1セグメントで送信できるデータ(ペイロード)の最大値を、MSS(Maximum Segment Size)と言います。

Segment Sizeとありますが、セグメントがTCPヘッダーを含めるのに対し、MSSはTCPヘッダーを除くペイロード部分の最大値を示します。

MTUが1500バイトでオプションがない場合は、IPヘッダー部分が20バイト、TCPヘッダー部分が20バイトになるため、1460バイトがMSSになります。

セグメント、MSS、MTUの関係

フレッツなどでPPPoEの情報が付加されている場合はMTUが小さいため、MSSも1414バイトと小さくなります。

UDPの概要

UDPはTCPのように3ウェイハンドシェイクを行わず、コネクション管理も行いません。このため、速くデータを送信でき、サーバー側の負荷も軽くて済みます。

UDPはDNSのようなサーバー側で大量の通信を受け付ける場合や、パケットが届かなくても問題ない通信に向いています。また、動画ではパケットを再送してもすでにその場面は過ぎているので意味がありません。少しでも早くデータを送信できることに意味があります。このような通信にもUDPが使われています。

UDPヘッダーの構造

UDPも、パケットのペイロード部分に入ります。UDPのプロトコル番号は、17番です。つまり、IPヘッダーのプロトコル番号が17番であれば、IPパケットのペイロード部分はUDPが入っているということです。

UDPヘッダーの構造は、以下のとおりす。TCPと比較して単純になっている分短く、相手まで届いたか確認する部分がありません。

UDP構造

それぞれの意味は、以下のとおりです。

【UDP構造の説明】
項目 英語 ビット 説明
送信元ポート番号 Source Port 16 送信元ポート番号
宛先ポート番号 Destination Port 16 宛先ポート番号
サイズ Length 16 ペイロード含めた長さ
チェックサム Checksum 16 エラー検知用
ペイロード data octets 可変 送信するデータ

関連ページ

応用編「ポート番号
TCPとUDPの各ポート番号を説明しています。
トラブル対応編「TCP通信の流れ
TCP通信の流れをより詳しく説明しています。