TCP と UDP は OSI 参照モデルのトランスポート層に対応するプロトコルです。TCP/IP ネットワークではトランスポート層でこの TCPと UDP が使われています。通信を制御してコントロールしたり、 アプリケーション層のプロトコルをポート番号で識別する働きをもっています。
TCP(Transmission Control Protocol)の基本動作の仕組み
3ウェイハンドシェイク
TCP は通信の信頼性の高いプロトコルで、通信の開始時に3ウェイハンドシェイクと呼ばれる方法でお互いを認識し通信が問題なく確立していることを事前に確認します。
TCP のヘッダ情報には SYN や ACK といったフラグがあり、このフラグをON/OFF にすることでお互いの確認情報として利用しています。
上記は以下のような意味合いを持っています。
①SYN:通信をはじめてもよいかの確認
②SYN+ACK:通信を開始してもよい了承の合図
③ACK:通信開始の合図
信頼性を維持するTCPの通信制御の仕組み
TCP では、データをセグメントという単位(サイズ)に小さく分割して送信します。
分割されたセグメントには受信した側が順番通り元のデータに戻せるように1つ1つに「シーケンス番号」という番号が割り振られています。
通信を始める前にセグメントのサイズは双方で可能な最大サイズ(MSS)に決定されます。
また、データを分割したセグメント単位で送信するたびに応答を待っていると効率が悪いので、一度にまとめて確認応答なしで送れるバッファサイズをすり合わせしています。このバッファサイズをウィンドウサイズとも呼び、仕組みをウィンドウ制御といいます。
受信側はどこまできちんとセグメントを受信しているか送信側に「確認応答」として知らせます。そうすることで、送信側もきちんと届いたことを認識することが可能になります。
もし経路上で損失などがあり、送信後に一定時間を経過しても確認応答がない場合には、その分を再送します。この仕組みを「再送制御」と呼びます。
送信が無事終われば、通信終了の合図をもって完了します。
このような仕組みで TCP は信頼性の高い通信ができるようになっています。
UDP(User Datagram Protocol)の基本動作の仕組み
リアルタイム性重視のUDP
UDP は通信時のやりとりが TCP とは対照的です。TCPで行うようなお互いの確認手順を省いるため、確認応答や再送による遅延もないので効率よく送信することが可能です。
データを送信する相手の確認を一切せずに送り、届いているかどうかの確認もしません。そのため、なにか問題があって受信側に届いていない場合でも再送されません。
このような特性のため、UDP を使うサービスはデータが少し抜けてもサービスとして成り立つ動画や音声などのサービスで主に使われます。このようなサービスでは、信頼性よりもリアルタイム性の方が重視されるため、都合が良いのです。
ポート番号
TCP と UDP にはアプリケーション層のプロトコルを識別するためにポート番号を使用します。ポート番号は 0~65535 までありますが、0~1023までの番号はウェルノウンポートと呼ばれ、名前の通りよく知られている(well-known)メールや Web で使用されるアプリケーションプロトコルにポート番号が割り当てられています。
クライアント側では49152~65535の中からランダムに割り当てられてサーバと接続(セッション)を確立します。これらの情報をもとにクライアントやサーバは接続している IP アドレスとポート番号の組み合わせごとにセッションを管理できます。
コメント