TCP/IPとは?初心者がTCP/IPを理解するための完全ガイド

「そもそもTCP/IPってなんのことなのか教えて欲しい・・・」

「OSI参照モデルとの違いってなんなの・・・?」

「結局、パケットなの?データグラムなの?セグメントなの?なんなの・・・?」

TCP/IPが重要なのはわかるけど、なかなかとっつきにくいですよね・・・。

 

こんにちは。
ネットワークエンジニアのTomです。

今回のテーマは、

「TCP/IP」

です。

 

然ですが、現在市販されているコンピュータにはほぼTCP/IPが実装されています。

そのくらい重要で一般的である「TCP/IP」ですが、初心者にとってはどんなものなのか理解するのが難しい分野でもあります。

実際私も、ネットワークを勉強し始めた頃は、

「TCP/IPって結局よくわからないけど、とりあえず大切だから覚えるか」

とTCP/IPのさまざまなプロトコルの知識を必死に詰め込みました。

しかし、知識を詰め込んだだけでは、断片的な理解にとどまり、ネットワークの全体像が見えない状況に陥りました。

 

そこで、

「TCP/IPの基本についてもう一度イチから勉強しよう!」

と思い、TCP/IPの基本から丁寧に勉強して理解したことで、その後に勉強した内容がスラスラと頭に入ってくるようになりました。

「ネットワーク技術について勉強したい」
「ネットワークエンジニアになりたい」

を思われているのであれば、避けては通れないのが「TCP/IP」です。

 

一人で勉強していてはなかなか理解できない「TCP/IP」を、今回は基本から丁寧に解説しました。

今回の記事を読めば、

  • TCP/IPとはそもそもなんなのか
  • OSI参照モデルとの違いは一体なんなのか
  • 各階層の役割、機能はどういったものなのか

といったことが理解できます。

それでは、一緒に学んでいきましょう。

1. はじめに

1-1.TCP/IPとは?

「TCP/IP」とは、インターネットで標準的に使用されている通信プロトコルのことです。
(「通信プロトコル」というのは、通信をするときのルールみたいなものです。)

例えば、違う国の人々が会話をするときにも、「英語」という国際的な共通語を使いますよね。

インターネットでも同じように、「TCP/IP」という標準プロトコルを使うことによって、
世界中のコンピュータがお互いに通信することができるようになります。

 

また、英語は、「現在進行形の表し方」「疑問文の作り方」「仮定法」といったように、さまざまな文法ルールによって成り立っています。

それは、TCP/IPも同です。

「TCP/IP」は、「Webページの転送の仕方(HTTP)」「メールの送り方(SMTP)」「信頼性の確保の方法(TCP)」といったさまざまな通信プロトコル(通信のルール)によって成り立っています。

そして、そのようなさまざまな通信プロトコルのセットのようなものを「プロトコルスタック」と呼びます。

これは、英語のことを「言語」というのと同じことです。

日本語も英語も、人が話す言葉を「言語」というように、「TCP/IP」などの通信プロトコルのセットを「プロトコルスタック」というのです。

そして、「TCP/IP」には、「HTTP、FTP、POP、ICMP、ARP、SMTP」といったさまざまな通信プロトコルがありますが、その中でネットワークにおいて最も代表的な「TCP」と「IP」から名前をとって「TCP/IP」と名付けられました。

 

ここで下の図をご覧ください。

上の図は、「TCP/IPの階層モデル」と呼ばれるものです。

さきほど、「TCP/IP」は「プロトコルスタック」だと説明しました。スタック(stack)とは「積み重ね」という意味です。

上の図を見ていただければ分かる通り、「TCP/IP」は4層の階層ごとに機能を分けて、それぞれの階層のプロトコルを組み合わせて通信を行っています。

このように、階層ごとのプロトコルを”積み重ねて”通信をする仕組みであるため、プロトコルスタックというのです。

 

ではなぜ、階層化するのでしょうか?

それは、階層化をすれば利点があるからです。

階層化はショートケーキ作りと同じ?

「階層化」に関する詳しい内容は上の記事で説明していますが、簡単に説明しますと、

「階層化をすれば、各階層を独立なものとして扱うことができる」

という利点があります。

そして、もう一つ、

「複雑なネットワークの機能を単純化することができる」

という利点もあります。

これらの理由からTCP/IPは階層化され、各階層のプロトコルの仕様を決めていったわけです。

 

ちなみに、通信の仕組みを階層化して、モデル化したものに「OSI参照モデル」というものがあります。

OSI参照モデルというのは、国際標準化機構(ISO)という組織が、通信の仕組みを体系化するための指針として策定したモデルです。

TCP/IPとOSI参照モデルは何が違うのでしょうか?
そして、なぜOSI参照モデルではなく、TCP/IPが普及したのでしょうか?

次は、TCP/IPとOSI参照モデルについてお話していきます。

1−2.TCP/IPとOSI参照モデル

まずは、TCP/IPとOSI参照モデルを比較してみましょう。

第3層のトランスポート層は、TCP/IPでもOSI参照モデルでも同じです。
また、第2層のインターネット層も、名前は違いますが、OSI参照モデルのネットワーク層と同じ役割です。

異なるのは、ネットワークインターフェイス層とアプリケーション層です。

TCP/IPのネットワークインターフェイス層は、OSI参照モデルでは「物理層」と「データリンク層」に対応します。

TCP/IPのアプリケーション層は、OSI参照モデルでは「セッション層」、「プレゼンテーション層」、「アプリケーション層」と対応しています。

このように、TCP/IPとOSI参照モデルでは階層モデルが若干異なっています。

 

それは、それぞれをモデル化するときに、何を中心に考えたかの違いによるものです。

 

OSI参照モデルが開発された時代というのは、各企業が独自に通信プロトコルなどを開発していた時代でした。
それぞれのメーカーが好き勝手にプロトコルを開発するものだから、メーカーが違ったら通信することができない、ということが発生していました。

そのときに、国際標準化機構(ISO)が国際標準となるOSI参照モデルという通信体系を標準化したのです。

この標準化の際、

通信プロトコルに必要な機能は何か?

ということを中心に考えて作られました。

そのため、OSI参照モデルは各階層の機能について理解するのには役立つのですが
構造が複雑になりすぎて、コンピュータに実装するのが難しいモデルとなりました。

 

一方、TCP/IPは、

通信プロトコルをコンピュータに実装するには、どうすればよいか

ということを中心に考えて作られました。

そのため、TCP/IPはコンピュータに実装するのに適したモデルとなりました。
なので、現在のコンピュータにはほぼTCP/IPが実装されています。

 

しかし、OSI参照モデルが使えないわけではありません。
OSI参照モデルは、コンピュータネットワークに必要な機能をまとめて体系化されたモデルです。

そのため、ネットワークの機能、仕組みについて理解するのに非常に適したモデルとなりました。

なので、実際にコンピュータに実装されているのはTCP/IPですが、
TCP/IPの各階層をOSI参照モデルと比較して説明する書籍が多いです。

また、「レイヤ2スイッチ」、「レイヤ3スイッチ」といったように、
OSI参照モデルの階層に倣って、ネットワーク機器の名前もつけられています。

 

OSI参照モデルの階層の機能を理解することは、TCP/IPを理解するための近道なのです。

そのため、この記事でも、TCP/IPのプロトコルをOSI参照モデルの各階層に当てはめて説明して行きたいと思います。

なお、OSI参照モデルについてもう少し勉強したい、という場合は下の記事をご覧ください。

ゼロから始めるOSI参照モデル基礎講座

2.各階層

それでは、TCP/IPの各階層の説明に入っていきます。

2-1.アプリケーション層

まずは人間に一番近い階層であるアプリケーション層から説明します。

TCP/IPのアプリケーション層は、OSI参照モデルの

  • アプリケーション層
  • プレゼンテーション層
  • セッション層

に相当していました。

なので、これら3層の機能を全てアプリケーション層が担っています。

それではセッション層、プレゼンテーション層、アプリケーション層の機能をおさらいしてみましょう。

 

アプリケーション層の役割は、

「ユーザが使用するアプリケーションに対してネットワークサービスを提供すること」

でした。

プレゼンテーション層の役割は、

「表示形式を定義して、データを共通の形式に変換すること」

でした。

セッション層の役割は、

「通信を行うプログラム同士(アプリケーション間)の論理的な通信路の確立・維持・終了を行うこと」

でした。

つまり、これら3つの役割をTCP/ IPのアプリケーション層が担っています。

 

そしてこれらの機能は、使用するアプリケーションごとに定められたプロトコルが担います。

 

アプリケーション層で定義されているプロトコルには、

HTTP(Hyper Text Transport Protocol)

DNS(Domain Name System)

DHCP(Dynamic Host Configuration Protocol)

FTP(File Transfer Protocol)

TFTP(Trivial File Transfer Protocol)

SMTP(Simple Mail Transfer Protocol)

などがあります。

 

アプリケーション層のプロトコルについては、以下の記事をご覧ください。

アプリケーション層プロトコルについてみんなが知りたいこと

2-2.トランスポート層

次に、トランスポート層です。

トランスポート層の役割は何でしょうか?

それは、

「アプリケーションに対して、信頼性の高い通信を提供すること」

です。

信頼性の高い通信とは何でしょうか?

実はインターネット層(IP)の通信では、送られたデータが全て完璧に相手側に届くとは限りません。

ケーブルの中の信号が、ノイズなどによって波形が変わったりして、元のデータが破損したり欠損したりします。

そのようなデータの欠損に対応するために、

  • データをもう一度送ってもらう再送制御
  • 一度に送るデータのサイズを決めるウィンドウ制御
  • データを分割して送るための順序制御
  • データが届いたか確認するための確認応答

などをトランスポート層が行なっています。トランスポート層というより、

TCP(Transmmision Control Protocol)

というプロトコルで実現しています。

そうやってデータを確実に相手側に届けることが可能になります。

それが「信頼性の高い通信を提供する」ということです。

トランスポート層のプロトコルにはTCPの他にUDP(User Datagram Protocolがあります。

TCPやUDPに関する詳しい解説は下の記事をご覧ください。

コネが重要?TCP/IPの「TCP」とは? UDPとは?たったこれだけ!

2-3.インターネット層

次にインターネット層です。

インターネット層は、OSI参照モデルのネットワーク層に相当していました。

つまり、

「異なるネットワーク上の機器間の通信を可能にすること」

がインターネット層の役割です。

その役割を果たすために、TCP/IPではインターネット層に

IP(Internet Protocol)

というプロトコルを定めています。

TCP/ IPの名前の由来になっているくらい中心的なプロトコルです。詳しくは下の記事をご覧ください。

IPとは?IPプロトコルを徹底解説

異なるネットワーク上の機器間で通信するためには、

通信する機器がどのネットワークのどこにいるのか=異なるネットワーク上の位置情報

を知らないといけません。

その位置情報を論理アドレスといい、IPではIPアドレスと呼んでいます。

IPアドレスについての詳しい内容は下の記事をご覧ください。

いまさら聞けない!IPアドレスとサブネットマスク

2-4.ネットワークインターフェイス層

先ほども説明しましたが、ネットワークインターフェイス層は、OSI参照モデルの物理層とデータリンク層に相当します。

ここで、OSI参照モデルの物理層とデータリンク層の役割についておさらいしましょう。

物理層の役割は、

「ビット列を電気信号や光に変換すること」

「コネクタやケーブルの形状などを決めること」

でした。

また、データリンク層の役割は、

直接接続された機器間でデータを転送すること」

でした。

直接接続された機器間とは、同じネットワーク内の機器間ということです。

つまり、データリンク層の役割は、

「同じネットワーク内の機器間でデータを転送すること」

です。

ネットワークインターフェイス層はこの2つの階層に相当しますので、これらの役割を担います。

TCP/IPでは、ネットワークインターフェイス層のプロトコルに関してなにも定めていません。

それはTCP/IPでは、

「同一ネットワークの構築の仕方はなんでもいいですよ」

と言っているということです。

機器間をケーブルでつなごうが、無線でつなごうが、ビット列を電気信号に変換しようが、光に変換しようがなんでもいいと言うことです。

TCP/IPは、

「なんでもいいから同一ネットワークを構築してね!その上で、インターネット層以上のプロトコルでデータを転送するよ!」

というものなのです。

モデル化するときに、ネットワークインターフェイス層というものを定めていますが、

それはコンピュータに実装するときに必要なものだから定めているだけです。

 

ネットワークインターフェイス層で働くプロトコルは、イーサネットPPPなどがあります。

しかし今現在、最も広く使われているプロトコルは「イーサネット」です。

イーサネットに関する詳しい内容は以下の記事をご覧ください。

イーサネットとは?

 

同一ネットワーク内の機器間で通信するためには、

そのネットワーク内のどの端末か?という位置情報を知らないといけません。

その位置情報をMACアドレス(物理アドレス)といいます。

ネットワークインターフェイス層のプロトコルは、このMACアドレスによって相手を識別してデータを送受信しています。

MACアドレスに関する詳しい内容は下の記事をご覧ください。

これだけは知っておくべきMACアドレスの基礎知識

3.カプセル化と非カプセル化

各階層のプロトコルは、同じ階層のプロトコルとデータをやり取り(会話)します。

しかし、物理的に直接つながっているのはネットワークインターフェイス層のハードウェア部分だけです。それより上では直接つながっていないので、自分で相手側にデータを転送することはできません。

ではどうするのか?

OSI参照モデルの記事でも説明しましたが、上の階層のプロトコルは下の階層のプロトコルにデータの転送を依頼します。

アプリケーション層のプロトコルは、トランスポート層のプロトコルに対して、

トランスポート層のプトロコルは、インターネット層のプロトコルに対して、

インターネット層のプロトコルは、ネットワークインターフェイス層のプロトコルに対して、

それぞれがデータの転送を依頼します。

そして、最終的にネットワークインターフェイス層のハードウェア部分で信号に変換され、相手側の機器に送信されます。

 

下の階層を介してデータを転送するので、自分の階層で扱うデータであることを区別する必要があります

その時に、各階層のプロトコルで付加するのが「ヘッダ」です。

ヘッダには、各階層のプロトコルでの処理に必要な情報が記録されています。

データを受け取った相手側の階層は、ヘッダを読み取ることで、自分の階層のプロトコルでの処理を適切に行うことができます。

送信側でヘッダを付加することをカプセル化、受信側でヘッダを外すことを非カプセル化といいます。

 

ここで、あなたがWebブラウザでWebページを閲覧する場合を考えてみましょう。

Webブラウザで使うアプリケーション層のプロトコルはHTTPです。

また、トランスポート層のプロトコルはTCP、インターネット層のプロトコルはIPです。

そして、LANはイーサネットで構築しているとしましょう。

 

この時、あなたのパソコンでFirefoxやGoogle Cromeで見たいホームページのURLを入力して検索したとします。

アプリケーション層では、入力されたURLをHTTPデータとして格納し、トランスポート層に転送を依頼します。

HTTPデータを受け取ったトランスポート層は、TCPで行う処理のための情報をヘッダに記録して、TCPヘッダを付加します(カプセル化)。

トランスポート層は、TCPヘッダを付加したデータをインターネット層に渡し、転送を依頼します。

インターネット層は、IPで行う処理のための情報をヘッダに記録して、IPヘッダを付加します(カプセル化)。

インターネット層は、IPヘッダを付加したデータをネットワークインターフェイス層に渡し、転送を依頼します。

ネットワークインターフェイス層はインターネット層から受け取ったデータにイーサネットヘッダを付加します(カプセル化)。

ただし、ネットワークインターフェイス層では、データの後ろにトレイラと呼ばれるエラーチェック用の情報も付加します。

最終的に、ネットワークインターフェイス層から物理的につながっているハードウェアに対してデータが転送され、電気信号などに変換されてケーブルや無線で送信されます。

 

受け取ったWebサーバは、あなたのパソコンと逆の処理をします。

各階層でヘッダを外して(非カプセル化)、その階層での処理を行い、上位層にデータを転送します。そして最終的にHTTPデータからあなたが閲覧したいURLを読み取ります。

もちろん今度はWebサーバにあるホームページのデータをあなたに送信するために、各階層でカプセル化が行われていきます。

そうやって、あなたのパソコンとWebサーバをデータをやり取りしているのです。

4.PDU(Protocol Data Unit)

PDUは、ネットワークにおいて用いられるデータの単位のことです。 

TCP/IPでは、データの単位をプロトコルごとに区別して呼んでいます。

ヘッダを付与したプロトコルによって、そのデータの呼び方が異なります。

  • アプリケーション層のプロトコルでは、メッセージ
  • TCPでは、セグメント
  • UDPでは、データグラム
  • IPでも、データグラム
  • イーサネットでは、フレーム

という風に呼んでいます。

 

ただし、正式にはIPデータグラムというのですが、そう呼ぶ人は少なく、「IPパケット」と呼ぶ人が多いです。

このブログでも、IPパケットと呼ぶことにします。

5.まとめ

いかがでしたでしょうか?

TCP/IPはITエンジニアなら必ず理解していなければならないものです。

TCP/IPを確実に理解するために、より詳しく書いた以下の記事も参考にしてください。

IPとは?IPプロトコルを徹底解説 いまさら聞けない!IPアドレスとサブネットマスク ARPとは?アドレス解決プロトコルのすべて ICMPとは?pingやtracerouteが大切な理由 これを読むまでネットワークを語るな!おすすめの本7選+α

それでは、最後まで読んでくださり本当にありがとうございました。