【初心者向け】TCPってなに?
ここでは「TCPP」について勉強していきましょう!
【ゴール】
「TCPって〇〇のことで、〇〇することができるんだ!」といえるようになること!
さて、ポイントはこの3つ!
この3ポイントについて解説していきます!
TCPとは?
TCPとは
TCPとは、トランスポート層で通信する際に利用されるプロトコルのうちの1つ。
トランスポート層では、TCPのほかにUDPがあります。
TCPやUDPでは、ポート番号というアプリケーション識別番号を利用してデータの振り分けを行っています。
コンピューターは複数のアプリケーションを立ち上げていますが、下位のネットワーク層では、アプリケーションを識別することができません。
そこで、適切なアプリケーションにデータを渡せるように、アプリケーションごとに番号を決め、ポート番号という形でデータを区別しています。
そもそもプロトコルとは?
コンピューター同士、通信を行おうとしても、それぞれの規格が異なると
うまく接続できません。
そのため、通信する時のお約束事として、同じ規格でネットワークに接続するようにします。
その通信する時のお約束事を「通信プロトコル」といいます。
TCPとUDPのちがい
TCPの特徴「信頼性が高く、転送効率が低い」
TCPでは、通信データの品質を維持する機能があります。
相手が確実にデータを受け取ったか確認を行ったり、データの破損をチェックして再送したり・・などの制御を行ってくれます。
その為、信頼性は高いが、データが破損していて再送等すると通信に遅延が発生してしまうので転送効率は低いです。
品質を維持する機能
- コネクション管理
- 順序制御
- 再送制御
- 流量制御
- 輻輳制御
UDPの特徴「転送効率が高い」
UDPでは、TCPのような通信データの品質を維持する機能はありません。
その為、TCPと比べると信頼性は低いですが、品質チェックは行わないので即時にデータを送ってくれるので、転送効率は高いです。
ポート番号
ポート番号とは、同じコンピューター内で複数あるアプリケーションを識別するための番号です。
ポート番号は「0~65535」の範囲で表されます。
- 0~1023:
Well-Knownポートと呼びます。クライアントにサービスを提供するサーバ側で使用されます。
IANAと呼ばれる組織で管理されており、Webサーバやメールサーバなど広く知られたサービスの用途で使われます。 - 1024~65535:
クライアント側で使用できるもので、この範囲の中からランダムに選択されて使っています。
TCPの通信方法
TCP通信で使われるデータ
◎受け取るデータ
トランスポート層は、セッション層からデータを受け取ります。
トランスポート層では、受け取ったデータに「TCPヘッダ」というものが付与されます。(下図)
◎TCPセグメント
「TCPヘッダ」と「データ」を合わせて「TCPセグメント」といいます。
そして、「TCPヘッダ」の中には「送信元ポート番号」、「宛先ポート番号」、その他品質を維持するために必要な情報が入っています。
TCP通信の流れ
TCP通信では、ざっくりと下記の流れで行います。
- コネクションの確立
- データの品質を維持する為のやり取り
- コネクションの切断
IPやEthernetのようにデータを相手に送って終了!ではなく、相手と何度かやり取りをすることで品質を維持しながら通信を行います。
TCPコネクションの確立
送信元コンピュータから、宛先コンピュータへデータを送りたい場合、まずコネクションの確立を行います。
- 送信元コンピュータが「コネクションを張りたい!」と宛先コンピュータへデータを送ります。(TCPヘッダの中身の数字をいじくることで、相手へ意思表示します。)
- 宛先コンピュータは、送信元コンピュータの要求に対して返事をします。
また、宛先コンピュータも同様に「コネクションを張りたい!」とデータを送ります。 - 送信元コンピュータは、宛先コンピュータの要求に対して返事をします。
これで、コネクションが確立されます。
この3つの流れを「3way Handshake」といいます。
TCP品質維持機能
コネクションが確立されたら、送信元コンピュータから、宛先コンピュータへデータを送ります。ここで、TCPの特徴である品質維持機能が働きます。
詳細は割愛しますが、品質維持機能の概要を説明します。
- コネクション管理:
(TCPコネクションの確立/切断をご覧ください。) - 順序制御:
送信したTCPセグメントを正しい順序でやり取りができるように制御します。 - 再送制御:
通信のやり取りをしている間に、何かしらの異常が発生し、一部のデータが壊れてしまう場合などがあります。それを察知して、再度データを送ることができるようにします。 - 流量制御:
受信した側のコンピュータが抱えきれないほどのデータが送られてきたら、一部のデータは正しく届かず再送制御などが働いてしまいます。このようなことが起きない為に、受け入れられるデータ量を送信元コンピュータに知らせることで、受け入れられるデータ量のみを送ってもらうようにします。 - 輻輳制御:
送信元コンピュータと宛先コンピュータの間には、いろんなネットワーク機器が繋がれています。その途中で混雑してしまい、データを正しく送ることができなかったら、再送制御が働いてしまいます。そこで、送信元コンピュータはTCPセグメントをちょっとずつ送り、送れたら増やす、送れたら増やす・・を繰り替えしていきます。このようにしてネットワークの混雑によって通信のやり取りが妨げられないようにします。
TCPコネクションの切断
全てのデータを送り終わったらコネクションを切断します。
- 送信元コンピュータが「コネクションを切断したい!」と宛先コンピュータへデータを送ります。(TCPヘッダの中身の数字をいじくることで、相手へ意思表示します。)
- 宛先コンピュータは、送信元コンピュータの要求に対して返事をします。
ただここで、宛先コンピュータも同様に「コネクションを切断したい!」と言うこともできますが、続けることもできます。 - (2.で通信を続けた場合)宛先コンピュータは全てのデータを送信し終わったら、「コネクションを切断したい!」と意思表示します。
- 送信元コンピュータは、宛先コンピュータの要求に対して返事をします。
これで、コネクションが切断されます。
まとめ
今回は、「TCP」について勉強しました。いかがでしたでしょうか?
「TCP」について聞かれたときは、下記を言えるようになりましょう!
TCPは、「トランスポート層で使われるプロトコル」のことで、
信頼性が高く、通信効率が低いのが特徴。
TCP通信ではポート番号を用いて、アプリケーションの特定を行っている。
ご覧いただきありがとうございました!