
あなたのデータを確実に届ける3つの機能!「TCP」の話
はい、こんにちは!松井真也です。シリーズ「ネットワークからアプリへの橋渡し:トランスポート層の世界」第3回でございます!
前回は、ポート番号とは何か?というお話をしました。ポート番号には、3種類あることや、クライアントとサーバでそれぞれどのような種類のポート番号を使うかなどに触れました。これでポート番号の基礎はばっちりです!
さて、今回は、「TCPとは何か?」というお話しでございます。すでにトランスポート層の記事で解説しとおり、トランスポート層のプロトコルの一つです。この記事では、これに続く詳細な解説に備えて、TCPの全体像をつかむことを狙います。これを読むだけでもTCPの基本は知ることができますよ!
早速いってみましょう!
TCPって何だろう?
TCP(Transmission Control Protocol)は、インターネットをはじめとするIPネットワークでの通信において欠かせない技術です。
言葉の意味は、「データ伝送を制御するプロトコル」です。「伝送の制御」という、高い信頼性を必要とする通信では極めて重要な役割を果たします。
トランスポート層に位置するTCPは、IP(Internet Protocol)の上位層として機能するんでしたね。
この仕組みによって、私たちは電子メールを送信したり、ウェブサイトを閲覧したりといった、受信するデータが壊れては困るような活動をスムーズに行えるのです!

高い信頼性、これがTCPのキーワードです!
TCPの基本的な3つの機能
続いて、基本的な機能を見てみましょう!TCPは、ネットワーク上でのデータ転送を信頼性高く行うのですが、そのためにどんな機能が必要でしょうか!それは3つあります!(コンサルっぽい?w)
1)確認応答
まず、データが正確に送られたことを確認する「確認応答」機能があります。これにより、送信したデータが正しく受信者に届いたかを検証することができます。
2)再送制御
さらに、もしデータが途中で失われたり破損したりした場合には、TCPがこれを検出し、「再送制御」によってデータを再度送信します。
3)順序制御
また、「順序制御」機能は、ネットワーク上でデータの順序が乱れた場合でも、受信側で元の順序に復元することを可能にします。
これらの機能によって、TCPは信頼性の高いデータ転送を実現しています。

スリーウェイハンドシェイクとは
TCPが通信を開始する際には、2つの端末でしっかりとコネクションを張ります。これを「スリーウェイハンドシェイク」と呼びます。送信者と受信者の間で3つのステップを経て通信路を確立するプロセスです。
ものすごくシンプルに言えば、送信者が接続要求を送り、受信者がこれを受けて応答します。最後に、送信者が再度応答を送り、これによって双方の通信が可能な状態になります。
このプロセスによって、両者の間でデータが安全にやり取りされるための準備が整えられるのです。こんな面倒なことをするので、オーバヘッドが高く、受信者がたくさんいるような目的(動画のストリーミングなど)には、TCPは向かないんです。
詳しくは、次回以降にハンドシェイクは扱いますので次に進みましょう!

TCPとUDPの違い
TCPと並び、トランスポート層で用いられるもう一つのプロトコルがUDP(User Datagram Protocol)でした。TCPとの違いはなんだったでしょうか?
UDPは、TCPとは異なり、送信したデータの到着を保証しない「送りっぱなし」の特性を持っています。
このため、データが相手にきちんと届く保証はなく信頼性は低くなります。しかし、TCPに比べて速度は速い!
リアルタイム通信やストリーミングサービスなど、速度が重視される用途ではUDPが選ばれることがあります。
一方、TCPはデータの信頼性が重要な場合に適しています。たとえば、ウェブサイトの閲覧やファイルのダウンロードなどは、正確なデータ転送が求められるため、TCPが用いられます。もし、めちゃくちゃ速いけど、データが壊れているとしたら、使い物になりませんよね!?

TCPを使用する代表的プロトコル
最後にTCPはどんな目的に使われるのかが分かるよう、代表的プロトコルを3つ紹介しましょう!
1)HTTP
なんといっても、これでしょう。HTTP(Hypertext Transfer Protocol)はウェブページやコンテンツの転送に使われるプロトコルです。ウェブブラウザとサーバー間の信頼性の高いデータ交換を可能にします。(HTTPについて
は過去記事でがっつり扱ったのでよろしければご覧ください!)
2)FTP
FTP(File Transfer Protocol)はファイル転送に特化しており、大規模なデータやファイルをネットワークを通じて安全かつ効率的に転送するために使用されます。これもファイルが壊れては使い物になりませんね。
3)SMTP
SMTP(Simple Mail Transfer Protocol)は電子メールの送信を扱うプロトコルで、メールサーバー間でのメール転送に利用されます。メールが正確に配送されることを保証します。
これ以外にも、POP3、Telnet、SIP(IP電話を開始するときのプロトコル)などいろいろあります。活躍の幅が広いですね!
はい、本日はここまで!今回は、TCPの概要についてお話ししました。どうしても、解説内容に重複が起きてしまうのですが、お許しくださいませ。重要なことは繰り返し読んだ方が、頭に定着するはずですよ!
次回は、TCPのパケットフォーマットをやりましょう!
では!