TCP (Transmission Control Protocol) とは、OSI参照モデル第4層:トランスポート層で動作する信頼性の高い通信を担保するためのプロトコルです。
別名伝送制御プロトコルとも呼ばれ、その名の通り「伝送/通信」を「制御」することが目的のプロトコルです。
このページではIT初心者向けにTCPとは何か?を人に説明できるレベルになるまで、1から分かりやすく解説します。
ネットワークエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。
TCPをしっかりと理解するためには、OSI参照モデルやTCP/IP通信についての基礎知識が必須です。
OSI参照モデルって何?TCP/IP通信って・・?という方はこの機会に合わせて学習しておきましょう。
TCPとは?
TCP (Transmission Control Protocol) とは、OSI参照モデル第4層:トランスポート層で動作する信頼性の高い通信を担保するための通信プロトコルです。
UDP (User Datagram Protocol) と同様、IP(Internet Protocol)の上位プロトコルとしての役割を果たします。
上記の説明だけではいまいちピンとこない方のために、ここから先はネットワーク初心者向けにもう少しわかりやすい表現を用いて解説していきます。
TCPの役割をわかりやすく:インターネット通信の仕組み
インターネット通信では、OSI参照モデルの第1層(物理層)~第3層(ネットワーク層)のプロトコルがお互い有機的に動作することにより、通信機器同士のEnd-to-Endの通信環境が確立されます。
「End-to-Endの通信環境が確立」された状況を現実世界に例えると、手紙を送るときに相手の住所とこちらの住所が明確になっており、あとは手紙を送れば相手にしっかりと届くことが想定される状況です。
OSI参照モデル第4層トランスポート層―TCP (Transmission Control Protocol) は、確実に相手にデータが届けられるための通信品質の担保を行うことが主な役割です。
例えば、相手に手紙を出したとしましょう。しかし、例えば台風が来ていたり道がボロボロだったりすると、手紙は濡れ文字は読めず相手は何を言っているかを理解できないかもしれません。
そこでTCP (Transmission Control Protocol) では、データの内容が適切に送られているかどうか?を判定し、もしデータ転送時に何らかのエラーがあれば再送するなどといった役割を提供しています。
冒頭で説明した通りTCP (Transmission Control Protocol) は別名「伝送制御プロトコル」とも呼ばます。その理由が何となく理解いただけるかと思います。
ここからはより具体的にTCPのイメージを掴めるようTCPの仕組みを詳しく解説していきます。
プロトコルとはコンピュータとコンピュータがネットワークを通じて通信する際に決められた約束事・決まりのこと。
製造メーカーも、OSもCPUも異なるコンピュータ同士が何事もなく通信できるのはプロトコルが事前に決まっているおかげです。逆に言えば、プロトコルが存在しないとお互いにデータを交換したりファイルを連携したりなどの通信を行うことができません。
プロトコルは日常会話に当てはめて説明することもできます。普段私たちがお互い話をすることができているのもプロトコル(何語で話すか?)が決まっているからです。
「プロトコル」をより詳しく知りたい方は以下の記事をご覧ください。
TCPの仕組みを分かりやすく解説
TCP (Transmission Control Protocol) がどのように通信の品質を担保しているのか―。
ここからはより具体的にTCPの仕組みを解説します。TCPを理解するために必要なのは以下の3点です。
ネットワーク初心者のうちはよく分からない用語もあるかもしれません。その場合は適宜必要となる前提知識も合わせて解説していきますのでご安心ください。
TCPコネクションの確立:3ウェイハンドシェイク
TCP (Transmission Control Protocol) ではコネクション型通信を提供します。すなわち、実際にデータ転送を行う前に「正常に相手と接続できているか?」を確認したうえで通信を開始します。
TCPにおいては、このコネクションの確立を以下の3ステップで行うため、その仕組みを3ウェイハンドシェイクと呼びます。
分かりやすく説明すると、相手のコンピュータに「接続して良い?」と聞いて、それに対して応答を返してもらっているだけ。決して難しく考える必要はありません。
3ウェイハンドシェイクを技術的に解説すると、コネクションの確立を要求するパケットをSYNと呼び、それに対する応答パケットをACKと呼びます。
「SYN」は「同期」を意味するSynchroから。「ACK」は「確認」を意味するAcknowlegementの省略系です。
この3つのステップのうちどれか1つでも失敗するとコネクションの確立が行えないため、データ転送を行うことができません。
コネクションを確立するまでに3回のパケット転送を行うことから、この方法を3ウェイハンドシェイクと呼びます。
各種資格試験でよく問われる用語なのでしっかり覚えておきましょう。
TCPではデータ通信を開始する前に、まずは相手との仮想通信回路を確立します。このようにすることで、途中でデータが喪失したりエラーが発生した際に対応できる環境を整えます。
TCPではコネクションの切断時にも同様にハンドシェイクを行います。
考え方はコネクション確立時と同じですが、コネクション切断時のパケットはFINと呼ばれる点が異なります。
TCP再送制御:ACK
続いては、コネクション確立後の実際の通信を制御する仕組みです。
TCPでは3ウェイハンドシェイクによってコネクションを確立した後に実際のデータ転送フェーズを開始します。
TCPではこのデータ転送フェーズにおいても先ほどと同様に、ACKを用いて通信品質の担保を行います。
日常会話と同じように、相手の相槌を確認しながらデータを転送するようなイメージです。
ここで、もし相手の相槌を確認できない場合(=ACKが返ってこない場合)はデータが正しく転送されていないと判断できるようになります。その場合TCPでは一定時間経過後再び同じデータを転送する再送処理が行われます。
ACKを確認しながらデータ転送を行い通信品質の担保を行うのがTCPの大きな特徴の1つです。
TCP順序制御:シーケンス番号
ですが、ACKだけでは通信品質の担保を行うことができない場合があります。
例えば以下のような場合です。
何らかの理由でACKが喪失したため、クライアントは同じデータを再送していますが、サーバ側からするとACKが届かなかっただけであって受け取るべきデータは受け取れています。これでは、サーバ側は誤ってデータを重複した状態で受け取ってしまうことになります。
このような場合にデータの識別を行うために用いられるのがシーケンス番号(ACK番号)です。
シーケンス番号を識別することで、受け取り済みのデータを確認します。また、シーケンス番号はデータの重複を避けるだけではなく以下のようにデータの順序制御も行う役割があります。
TCPヘッダフォーマット
最後にTCPパケット(TCPセグメント)のヘッダのフォーマットを紹介します。
パケットの中身をすべて覚える必要はありませんが、どのようなデータをやり取りしているのか?を知ることでTCPへの理解をより深めることが可能になります。
ネットワークエンジニアを目指したい方は
TCPをはじめとして、ネットワークの基礎を1から学びたい方はこちらの書籍を購入してがっつり学びましょう!
さくっと手軽に読める内容ではないのですが、ネットワークエンジニア全員が必ず読破している本と言っても過言ではありません。是非この機会にチャレンジしてみてみましょう。
ITを1から学びなおしたい方は
システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。
正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。
システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。
無料で読めるようにしてあります。累計12万人に参考にしていただきました!