TCPについて

  • URLをコピーしました!

現代のインターネット社会において、私たちは日々、無意識のうちに膨大な量のデータ通信を行っています。

Webサイトの閲覧、メールの送受信、SNSの利用、動画のストリーミングなど、これらすべての背後には、通信の安定性と信頼性を支える技術が存在します。

その中でも特に重要なのが「TCP(Transmission Control Protocol)」です。

トランスポート層ではTCPとUDPというプロトコルが働いているんでしたね。

たしか、TCPの方が信頼性が高い通信を実現できるんでしたよね。

石田先生

そうです。今回はそんなTCPについて学んでいきます。

今回は、TCPとは何か、その特徴や仕組みについてわかりやすく解説していきます。

石田先生

まずは概念的な部分を学習するので、イメージしにくいところもあるかもしれませんが、頑張ってついてきてください。

はーい!

目次

TCPとは

TCP(Transmission Control Protocol)は、インターネットやローカルネットワークでデータを確実に送受信するための通信プロトコルであり、ネットワーク通信の基盤を支える重要な役割を担っています。

信頼性の高い通信を実現するため、送信側と受信側の間で事前にコネクション(接続)を確立し、その後、データが正しく相手に届いたかを一つひとつ確認しながら通信を進めていきます。

通信を丁寧に行っていくのがTCPなのですね。

石田先生

この仕組みにより、パケットの損失や順序の乱れを防ぎ、確実なデータのやり取りが可能になります。

TCPはWebページの読み込みやメールの送受信、ファイルの転送など、正確なデータ伝達が求められる多くのシーンで使用されています。

TCPヘッダについて

石田先生

TCPヘッダを含めたTCPセグメントの中身を見てみましょう。

また色々な項目がありますね。

石田先生

ひとつずつ解説していくので、安心してください。

TCPセグメントは、ヘッダとデータ部分から構成されます。特にヘッダ部分には通信を制御するための重要な情報が含まれており、それぞれのフィールドは以下のような役割を持っています。

送信元ポート番号(Source Port)
送信元のアプリケーションを識別するための番号です。16ビットあります。

宛先ポート番号(Destination Port)
受信側のアプリケーションを識別する番号で、HTTPなら80番、HTTPSなら443番などが代表例です。こちらも16ビット長です。

シーケンス番号(Sequence Number)
送信データの順序を管理する番号で、送信したデータの位置を示しています。TCPでは、この番号をもとに各セグメントの位置を把握し、データを正確な順番で再構成します。ネットワーク上でパケットが順不同で到着した場合でも、この番号によって正しい順序に並べ直されます。また、ネットワークの混雑などにより一部のデータが失われた場合には、このシーケンス番号をもとに欠損した部分だけを再送することが可能です。再送制御や順序制御の中心的な役割を担っている、非常に重要なフィールドです。32ビットあります。

石田先生

データを分割して送る際、そのデータが何番目のデータなのかを示すのがシーケンス番号です。データの分割は下記のように行われます。

確認応答番号(Acknowledgment Number)
受信したデータの次に期待するシーケンス番号を示します。これは、受信側がどの位置まで正しくデータを受け取ったかを送信側に伝えるために使用されます。送信側はこの確認応答番号をもとに、未送信または再送が必要なデータを判断できます。ACKフラグが立っている場合に有効であり、このフラグとセットで使われることで、通信の信頼性が保証されます。また、TCPの確認応答は累積型であり、連続して受信したデータの範囲をまとめて一度に確認できる点も特徴です。32ビットあります。

データオフセット(Data Offset)
TCPヘッダの長さを示すフィールドで、オプション部分の有無により変動します。通常は20バイトから始まり、オプションの内容によってヘッダが拡張されるため、受信側はこの情報をもとにどこからデータ本体が始まるかを正確に把握できます。

予約
将来の拡張のために予約されているビットで、現在は使用されていません。通常は「0」にしておく必要があります。

コントロールフラグ(Control Flag)
通信の状態を制御するビット群で、TCPヘッダに含まれるコントロールフラグ(フラグビット)は全部で8種類あります。それぞれの役割は以下の通りです。

  • CWR(Congestion Window Reduced):ECEに応じて、送信側が輻輳ウィンドウサイズを縮小したことを受信側に通知します。ECNと組み合わせて使われることが多いです。
  • ECE(ECN-Echo):Explicit Congestion Notification(明示的輻輳通知)に対応したネットワークにおいて、輻輳が検出されたことを示します。輻輳制御に用いられます。
  • URG(Urgent):緊急データがあることを示します。このフラグが立っていると、緊急ポインタフィールドが有効となり、データの一部を優先的に処理するよう指示します。
  • ACK(Acknowledgment):確認応答番号(Acknowledgment Number)が有効であることを示します。通信の信頼性を担保するための基本的なフラグで、ほとんどのTCP通信で使用されます。
  • PSH(Push):受信側にデータを即座に上位アプリケーションへ渡すよう指示します。通常はバッファに溜めてから渡しますが、このフラグがある場合は即時処理されます。
  • RST(Reset):通信のリセットを要求します。異常終了や想定外のパケットを受け取った場合などに、接続を強制的に切断するために使用されます。
  • SYN(Synchronize):接続の開始を要求するためのフラグで、3Wayハンドシェイクの最初のステップで使用されます。初期のシーケンス番号を交換する際に重要です。
  • FIN(Finish):通信の終了を示すフラグで、相手に「もうこれ以上送るデータはない」ことを通知します。切断は通常、両者がFINを送って行います。

ウィンドウサイズ(Window Size)
受信側が一度に受け取れるデータ量の上限を送信側に通知します。これはTCPのフロー制御における重要な要素であり、受信バッファが溢れないように調整するために使用されます。ウィンドウサイズが大きければ大きいほど、一度に多くのデータを送信することが可能になりますが、受信側が処理しきれない場合には逆にパフォーマンスを損なう原因にもなります。そのため、ウィンドウサイズは動的に調整されることが多く、ネットワーク状況や受信側の処理能力に応じて最適な値がやり取りされます。

石田先生

ウィンドウサイズは重要なポイントなので、こちらの記事で詳しく解説をしています。

チェックサム(Checksum)
ヘッダとデータに対してエラーが発生していないかを確認するための値です。送信側がTCPセグメントを生成する際に、ヘッダやデータの内容に基づいてチェックサム値を計算し、それをヘッダに含めて送信します。受信側は同様の計算を行い、チェックサムが一致するかどうかを確認することで、通信中にビットの欠損や改変などのエラーが発生していないかを検証できます。

緊急ポインタ(Urgent Pointer)
URGフラグが立っている場合に有効で、緊急データの終了位置を示します。これは、緊急フラグ(URG)がオンになっている際に、データのどこまでが「緊急」と見なされるかを示すためのポインタです。通常のデータとは別に、緊急度の高い情報を優先的に処理する際に使用され、リアルタイム通信や制御信号などで活用されることがあります。

オプション(Options)
必要に応じて追加情報(ウィンドウスケーリング、タイムスタンプなど)を設定できます。可変長であり、パフォーマンス向上やセキュリティ強化にも活用されます。

石田先生

代表的なオプションを見てみましょう。

オプション名タイプバイト長説明
EOL(End of Option List)01バイトオプションリストの終了を示す。以降に有効なオプションが続かないことを示す。
NOP(No Operation)11バイトヘッダの整列(アライメント)を調整するために使用されるダミー項目。
MSS(Maximum Segment Size)24バイト通信相手に通知する、1回の送信で許容できる最大セグメントサイズ。
SACK Permitted42バイトセレクティブACK(SACK)の使用を許可することを伝える。
セレクティブACK(SACK)5可変欠損したセグメントだけを再送するための情報を伝える。

まとめ

TCPは、現代のネットワーク通信において中心的な役割を担う信頼性の高いプロトコルです。

パケットの順序を保証し、誤りや欠損を自動的に検出・再送することで、正確なデータ転送を実現します。

さらに、フロー制御や輻輳制御といった機能により、ネットワークの状態に応じた柔軟な対応も可能です。

信頼性の高いTCP、覚えました!

また、TCPヘッダには多数の制御項目が含まれており、それぞれが通信の品質や安定性を支える役割を果たしています。

特にWebブラウジング、メール、ファイル転送など、確実な通信が求められる場面では、TCPの存在が不可欠です。

今後も、安定したインターネット環境を支える基盤技術として、TCPは多くの場面で活用され続けることでしょう。

学びをSNSで共有しよう
  • URLをコピーしました!
目次