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ウェイハンドシェイクという通信を行います。
上の図でSYNやACKと記載があるのはフラグと呼ばれていて、次にどのようなフラグで通信するか手順が決まっています。フラグはポート番号などと同様、パケットの中に組み込まれています。
同様に、シーケンス番号というのもパケットの中に組み込まれており、この番号により受信側でパケットが順番通り来ているか判断しています。このため、パケットに抜けがあった場合はシーケンス番号に抜けが出るため再送が可能です。
このように、TCPでは1度通信を開始すると手順や番号などで管理された上で送受信を行います。これを、コネクションと言います。
同じパソコンとサーバー間の通信でも、違う通信であればコネクション管理も異なります。また、相手からの応答が遅いとタイムアウトして通信が切断されます。
通信を終了する時は、以下の手順になります。
TCPは確実にデータを送信したい通信、およびWeb参照などのようにデータ量が多いため何度もパケットを送る必要があり、パケットに抜けがあっても再送によって回復できる通信に向いています。
TCPヘッダーの構造
IPパケットの構造はすでに説明したとおりですが、そのペイロード部分にTCPが入ります。TCPのプロトコル番号は、6番です。つまり、IPヘッダーのプロトコル番号が6番であれば、IPパケットのペイロード部分は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になります。
フレッツなどでPPPoEの情報が付加されている場合はMTUが小さいため、MSSも1414バイトと小さくなります。
UDPの概要
UDPはTCPのように3ウェイハンドシェイクを行わず、コネクション管理も行いません。このため、速くデータを送信でき、サーバー側の負荷も軽くて済みます。
UDPはDNSのようなサーバー側で大量の通信を受け付ける場合や、パケットが届かなくても問題ない通信に向いています。また、動画ではパケットを再送してもすでにその場面は過ぎているので意味がありません。少しでも早くデータを送信できることに意味があります。このような通信にもUDPが使われています。
UDPヘッダーの構造
UDPも、パケットのペイロード部分に入ります。UDPのプロトコル番号は、17番です。つまり、IPヘッダーのプロトコル番号が17番であれば、IPパケットのペイロード部分はUDPが入っているということです。
UDPヘッダーの構造は、以下のとおりす。TCPと比較して単純になっている分短く、相手まで届いたか確認する部分がありません。
それぞれの意味は、以下のとおりです。
項目 | 英語 | ビット | 説明 |
---|---|---|---|
送信元ポート番号 | Source Port | 16 | 送信元ポート番号 |
宛先ポート番号 | Destination Port | 16 | 宛先ポート番号 |
サイズ | Length | 16 | ペイロード含めた長さ |
チェックサム | Checksum | 16 | エラー検知用 |
ペイロード | data octets | 可変 | 送信するデータ |