🌐

【初心者にやさしい】「これで分かった!」ネットワークとは~OSI参照モデルやTCP/IPプロトコルまで解説~

2022/09/20に公開

本記事の目的

本記事は、「ネットワークとは何なのか」ということについて、これまで自主学習や社内勉強会で習得した知識をもとにできるだけ分かりやすく、 頭の中でイメージが湧くように 説明することを目的とします。

特に、「OSI参照モデル」や「TCP/IPプロトコル」など多くのエンジニアの頭を悩ませる用語についても、具体例を用いながら分かりやすく解説することに努めました。

本記事の内容

本記事の内容は以下の通りになっています。一つ一つイメージをつかみやすく解説していきますので、どうぞご参考ください。

  1. ネットワークとは?
  2. LANとWAN
  3. インターネットとは?
  4. 【図解】私たちがインターネットに接続し、欲しいデータを受け取るまでの流れ
  5. 【図解】OSI参照モデル
  6. 【図解】TCP/IPプロトコル

1. ネットワークとは?

まず、「ネットワーク」とは何でしょうか。抽象的に解釈すると以下のような説明になると思います。

個々の人のつながり。特に、情報の交換を行うグループ

一昔前までは「ネットワーク」といえば、上の定義のように、「人と人のつながり」を表す用語として広く認識されていたそうですが、現代では、「ネットワーク」と言えば、以下のような説明が最も一般的です。
  
コンピュータが互いに連携するために接続された状態や空間

このようなコンピュータによるネットワークが形成されたことによって、私たちは 離れたところにいても、データを送受信できるようになった のです。これがネットワークが私たちにもたらした恩恵です。

ちなみにコンピュータがそのコンピュータでのみことを済ませ、ネットワークに接続されていない状態のことを、「スタンドアロン型」と言います。コンピュータを互いに接続させてネットワークを構成するというやり方が一般的な現代ですが、このスタンドアロン型にはスタンドアロン型の利点というものもあります。それは、「セキュリティ」です。スタンドアロン型のコンピュータは他と接続されていない分、外部からのウイルスなどが侵入してこないというメリットがあるので、重要なデータを管理するコンピュータをスタンドアロン型で使用するというやり方もあるということになります。
スタンドアロン型vsネットワーク型.png

2. LANとWAN

「ネットワーク」と聞くと、「インターネット」を思い浮かべるかもしれませんが、インターネットだけがネットワークというわけではありません。

ネットワークには、「その範囲」や「管理形態」などによって「LAN」と「WAN」という2つの分け方ができます。

LAN」とは「Local Area Network」の略であり、「範囲」という観点で考えると、「Local」という言葉からも分かる通り、会社内や家庭内などの比較的小規模の範囲でのネットワークのことを指すことが多いです。一方、「WAN」とは「Wide Area Network」の略であり、同じく「範囲」という観点で考えると、「Wide」という言葉から分かる通り、比較的大規模で形成されたネットワークのことを指すことが多いです。

また、「管理形態」という観点で考えてみると、「LAN」は部署内などでネットワークを作り、それを自分たちで管理する形態だと言うことができます。一方、「WAN」は「インターネット通信事業者(= プロバイダー)」が通信網を提供し、プロバイダーによってネットワークが管理されている形態だと言うことができます。
LANとWAN図解.png

LANとWANの違い.png
ここで、上の表において、「使用するIPアドレス」という観点でも違いを示していますが、これに関しては「4」の「【図解】私たちがインターネットに接続し、欲しいデータを受け取るまでの流れ」で詳しく解説します。

3. インターネットとは

ここまで「ネットワークとは何なのか」、「LANとWANの違い」について解説してきました。

では、皆さんがいつもPCやスマホを使ってウェブサイトを閲覧したり、動画を視聴したりするときに使っている「インターネット」とは何なのでしょうか。

インターネットとは、 WANを地球規模で接続し、網目状につながっている状態や空間のこと を指します。インターネットもWANということですね。地球規模でつながっているからこそ、私たちはいつ、どこにいても見たいサイトや動画に瞬時にアクセスできているということになります。
インターネット空間.png
次の「4」では、私たちがインターネットに接続し、欲しいデータを受け取るまでの流れを図解で理解していきましょう。

4. 私たちがインターネットに接続し、欲しいデータを受け取るまでの流れ

この章では、「twitterのホームページを表示する」という作業を例に、この流れの裏で何が起きているのかを順を追って理解することで、インターネットというものをより深く理解していきましょう。

4-1. ユーザーが「twitter.com」とURLを打ち込み、検索をかける

twitter.comと検索.png
まずは、ユーザーが「twitter.com」と検索窓に入力し、エンターキーを押すことで検索をかけます。

4-2. DNSサーバーが動き出す(IPアドレスを見つける)

コンピュータは「twitter.com」という文字列を認識することはできません。なぜならコンピュータは「0」と「1」の数字の組み合わせでのみ情報を識別することができるからです。そこでDNSサーバーというサーバーが登場し、この「twitter.com」という文字列を「0」と「1」の数字の羅列に変換します。

この時の「0」と「1」の数字の羅列のことを「IPアドレス」と言います。IPアドレスは「アドレス」という言葉からも分かる通り、「住所」を指します。この場合で言うと、 twitter社のサーバーのある住所 を指すことになります。

このIPアドレスを指定することで目的のページに到達できるわけですが、IPアドレスは本来「0」と「1」の羅列のため、人間がいちいち手入力するのは面倒ですよね。そこで登場したのが DNS という技術です。DNSは「Domain Name System」の略であり、 URLとIPアドレスを紐づけて電話帳のように管理し、相互変換をする技術 になります。これのおかげで、私たちは URLを入力するだけで簡単に目的のページに到達できてしまう というわけです。DNSの細かい仕組みは以下の図をご覧ください。
DNSの仕組み.jpeg

4-3. インターネットを経由してサーバーにリクエストを飛ばす

お目当てのtwitter社のサーバーの住所(=IPアドレス)が分かったので、次はそれを使って実際に「twitterのホームページの画面情報をください!」というリクエストを投げます。この時、インターネットに接続するわけですが、ここでも「IPアドレス」が重要になってきます。以下の図をご覧ください。
プライベートIPとグローバルIP.png
ここで3つの新しい用語が出てきました。「プライベートIPアドレス」、「グローバルIPアドレス」、「ルーター」です。どれもインターネットに接続してリクエストを投げる際の重要なキーワードになりますので、詳しく解説します。

4-3-1. 宛先と送り主住所の区別

まず「宛先」と「送り主」を整理しましょう。今回は「twitterのホームページにアクセスする」ということが目的ですので、宛先の住所は「twitter社のサーバーのIPアドレス」になります。一方、アクセスをしているのは自分自身のPCですので、送り主住所は「自分のPCのプライベートIPアドレス」となります。

ここで登場した「プライベートIPアドレス」とは、「インターネットに接続されていない機器に対して割り振られるIPアドレス」となっています。
 
え?でもPCはインターネットに接続するじゃないか」と思ってしまうかもしれませんが、実はインターネットに接続しているのは、PC自身ではなく、「ルーター」と呼ばれる水先案内人なのです。さらに実は、先ほど「送り主住所はPCのプライベートIPアドレス」と言いましたが、厳密にはこのルーターに割り振られている「グローバルIPアドレス」というものを送り主住所としてインターネットに接続しているという仕組みになっています。

つまり、宛先は「twitter社のサーバーのIPアドレス」で変わりありませんが、送り主住所は「ルーターのグローバルIPアドレス」となるというわけです。
NAT(Network Address TransLation).png
このPCそれぞれのプライベートIPアドレスをグローバルIPアドレスに変換する技術を「NAT(Network Address TransLation)」と言います。このNATという技術を利用する目的について、私の勤務する会社のネットワークチームに聞いたところ、「プライベートIPアドレスをグローバルIPアドレスでマスキングすることでセキュリティレベルを向上させること」だと言っていました。インターネットに接続された他の機器はではグローバルIPアドレスのみしか識別できないようにしておくことで、安全性を高めているということなのですね。

4-3-2. ルーターを経由してインターネット空間へリクエストが飛ぶ

宛先と送り主住所を特定できたら、今度は水先案内人のルーターがインターネット空間に向けてリクエストを飛ばします。ここでルーターのことを「水先案内人」と言い換えていますが、インターネット空間に入ってすぐにtwitter社のサーバーにたどり着くわけではありません。その途中にいくつものルーターを経由してやっとtwitter社のサーバーまで到達するというのが実際です。

インターネット空間上には数多くの情報が飛び交っており、それぞれをきちんと正しく目的地まで届けなければなりません。そのための役割を果たしているのが「ルーター」なのです。ルーターが情報が向かうべき経路を指し示してくれるからこそ、正しく目的地まで届けることができるのです。「水先案内人」と言い換えたのはこういう理由からです。
ルーターの役割.png

4-4. サーバーが情報をレスポンスとして返す

インターネット空間を経由してtwitter社のサーバーまでリクエストが届いたら、今度はレスポンスを返す番です。レスポンスを返す時は、送り主住所を確認します。今回で言えば、 送り手のルーターのグローバルIPアドレスが送り主住所なので、そこに向けてレスポンスを返す ことになります。送り手のルーターにレスポンスが届いたら、実際にリクエストを送ってきたPCのプライベートIPアドレスを判別し、レスポンスを届けるという流れになります。
サーバーからのレスポンス.png
これで、「リクエストを送り結果をレスポンスとして受け取って表示する」という一連の流れが終了しました。この過程はほんの数秒で行われてしまいますが、一つ一つの工程を垣間見てみると、かなり細かい処理が行われていることが分かりますね。

5. 【図解】OSI参照モデル

ところで、4で説明したような、インターネットを利用したデータ通信において、 なぜ全てのPCやスマホが同じようにさまざまなデータを送信したり、さまざまなデータを受信したりといったことが実現できるのでしょうか。 また、 なぜ違うメーカーのPC同士を互いに接続してデータ連携させることができるのでしょうか。

これには、「OSI参照モデル」というものが大きく関与しています。

OSI参照モデルとは、「インターネットを利用したデータの送受信に関してのルールの参考にしてね」という目的で作成されたものになります。特徴としては、データ通信の工程を7つに分け、それぞれの工程におけるルールなどを取り決めているというものがあります。
 以下の図をご覧ください。
OSI参照モデル簡略図.png
OSI参照モデルでは、データ通信における工程を 7つの層 に分解しています。 データを送るときは、第7層から第1層へ と工程を経ていき、逆に データを受け取るときは、第1層から第7層へ と工程を経ていくことになります。層ごとに決められたルールがあり、そのルールに沿ってデータに情報を付け加えたりしながら徐々に次の階層へと受け渡していく形になります。

では、「メールアプリケーションで文章を送る」という例を用いて、各層で何が行われているのかを細かく見ていきましょう。

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

アプリケーション層.png
メールアプリケーションで「Hello!」という文章を入力して送信した時のことを考えてみましょう。まず送信された文章データは「アプリケーション層」に到達します。ここでは、アプリケーションそのものに関するルールなどを規定しています。つまり今回で言えば、メールアプリケーションそのものに関する様々なルールを規定しています。

ここで決めたルールなどの情報が詰まった「ヘッダー情報」を元々の文章データに付け加えて次の層に受け渡します。

5-2. プレゼンテーション層

プレゼンテーション層.png
次のプレゼンテーション層では、「表現形式」を決めます。文章データをPCから送り出すときは、最終的には「0」と「1」のみのバイナリデータに変換してから送信します。そして、受信側では再度文章データに復号してメッセージとして読めるようにします。この変換形式を定めているのが、プレゼンテーション層というわけです。

5-3. セッション層

セッション層.png
セッション」とは、 通信の開始から終わりまでの一連の流れ のことを言います。この一連の流れの中で「開始の仕方」や「終わり方」、また「途中で通信がうまくいかない時の対処法」などをこの層で決め、前の層と同じようにヘッダー情報として付け加え、次の層に渡します。

5-4. トランスポート層

トランスポート層.png
今までの3層は、どちらかというとそれぞれのアプリケーションに沿ったルールを定めるようなものでした。

しかし、次のトランスポート層以降では、 どのアプリケーションを使用したデータ送信においても同じルール を定めています。このトランスポート層では、「データの信頼性」を確保するために、「データを送信するときは合図をしてから送信しましょう」、「データにもし欠損があったら教えてください」などのルールを定めています。これにより、確実に安全にデータを送受信することができるようになります。

5-5. ネットワーク層

ネットワーク層.png
次のネットワーク層では、「どの経路を辿って相手まで届けるのか」を決めます。どのルーターを経由するかはもちろん、途中でどれか一つのルーターへの接続が遮断された場合でも別のルーターに送り直して確実に届けるなどの安全面でのルールも定めます。

5-6. データリンク層

データリンク層.png
前のネットワーク層では、ネットワーク空間でどういう経路を辿るのかなどの 全体 に関してルールを定めていました。一方、今回のデータリンク層では、 互いに直接接続された隣同士の機器間でのデータ送受信に関するルール を定めています。不特定多数の機器にデータが散らばることなく、接続された相手のみにデータを確実に送るようにするためのルールを決めているわけですね。

5-7. 物理層

物理層.png
最後の物理層では、その名の通り、 物理的な要素に関するルール を定めています。具体的には、「バイナリデータを電気信号に変換するためのルール」や、「ケーブルとその差し込み口の形状に関するルール」などです。物理的な要素に関するルール規定まで終わったら、いざデータを送信します。

この時、図を確認していただきたいのですが、 最初のデータ量に比べて、実際に送り出す時のデータ量が増えています。 これは、各層で定めたルールについての情報をヘッダー情報として付け加えながら次の層へと渡していったからです。このような工程を「カプセル化」と言います。送信の後、受信側では逆のルートを辿るわけですが、そこでの流れのことは「非カプセル化」と呼びます。

5-8. OSI参照モデルは参照されていない

ここまで、細かくOSI参照モデルについて解説してきましたが、 実際にはこのOSI参照モデルは利用されていません。 それは、OSI参照モデルを作成している間に、「6」で説明する「TCP/IPプロトコル」が普及してしまったからだと言われています。現実ではほとんどがTCP/IPプロトコルが参照されており、OSI参照モデルはあくまで各層を細かくみていく必要がある場合にのみ、参照されているという感じのようです。

OSI参照モデルでは「第7層」までありましたが、TCP/IPプロトコルでは「第4層」までしかありません。もちろん4層で7層分に対応しているわけですが、詳しくは「6」で説明します。

6. 【図解】TCP/IPプロトコル

「5」で説明したように、TCP/IPプロトコルは、実際にデータ通信などにおいて幅広く参照されているルールになっています。「TCP/IPプロトコル」と名づけていますが、 実際には数多くのプロトコル=約束事の集合体です。 TCPやIPというのも一つのプロトコルです。代表としてTCPとIPをとって、そう名づけています。各プロトコルが4層の中で適切な場所に配置されているという構造になっています。

以下の図を見てください。
TCP:IPプロトコル図解.png
これはOSI参照モデルの各層にTCP/IPプロトコルのどの層が該当するのかを示した図ですが、まず TCP/IPプロトコルの「アプリケーション層」一つでOSI参照モデルの7~5層をカバーしている点 にご注目ください。先ほどチラッと「7~5層はアプリケーション固有のルール」と言いました。TCP/IPプロトコルを見ればその通りであり、ここでは アプリケーションごとの通信の仕方によってどのプロトコルを使うのか を決めています。

例えば、メールアプリケーションでメッセージを送る場合は、メール送受信に関するプロトコルである「SMTP」を利用して、「アプリケーション間のルール」、「表現形式」、「セッションに関する取り決め」までを指定します。

この後の層はアプリケーションごとではなく、共通のルール決めになるので、それぞれの層で該当するプロトコルが参照されていく形になります。

TCP/IPプロトコルについてより詳しく学習したい場合は、以下の記事がとても参考になりますので、ご参照ください。

TCP/IPとは?通信プロトコルの階層モデルを図解で解説

7. まとめ

アプリ開発者を目指す身にとって、「ネットワーク」というものは正直つまらないものだと思っていました。しかし、今回自分で学習したり、勉強会に参加して知識を習得してみると、 アプリ開発においてもかなり役立つ部分が多く、知っておいて損はない分野 だと思い直しました。

特に「HTTP通信」や「HTTPS通信」などに関しては深掘って理解する必要があると感じましたので、また今度こちらの記事にもしたいと思います。

8. 参考

Discussion