インターネットが繋がる仕組み

# 記事を書いた目的
復習も兼ねて、インターネットが繋がる仕組みについてアウトプットしてみました。
誤りがありましたら、ご指摘いただけると嬉しいです。
# 目次
- [前提](#前提)
  - [インターネットとは](#インターネットとは)
  - [プロトコル](#プロトコル)
  - [OSI参照モデル](#osi参照モデル)
  - [TCP/IPモデル](#tcpipモデル)
  - [カプセル化](#カプセル化)
  - [逆カプセル化](#逆カプセル化)
- [インターネットが繋がる仕組み](#インターネットが繋がる仕組み)
  - [1.端末Aが、ブラウザで「Amazon.co.jp」を検索](#1端末aがブラウザでamazoncojpを検索)
  - [2.端末Aが、送信データをカプセル化](#2端末aが送信データをカプセル化)
  - [3. 送信データは、ルーターを経由して、Webサーバーが存在するネットワークへ](#3-送信データはルーターを経由してwebサーバーが存在するネットワークへ)
  - [4. Webサーバーが、受信データを逆カプセル化](#4-webサーバーが受信データを逆カプセル化)
  - [5. Amazonのショッピングサイトが端末Aのブラウザに表示](#5-amazonのショッピングサイトが端末aのブラウザに表示)

# 前提

## インターネットとは
インターネットとは、別々のネットワークに属する機器同士が通信できるような環境のこと。

## プロトコル
機器間でデータを通信させるため、「通信の決まりごと」が存在し、その決まりごとに従う必要がある。
仮に、通信の機器間で決まりごとを守れな場合、適切にデータの送受信ができなくなる。
この「通信の決まりごと」を**プロトコル**と呼ぶ。そして、実際の通信を行う際は、複数のプロトコルを組み合わせ、それらを、通信を行う機器間で一致させる（お互いに同じプロトコルを利用する）ことで、データの送受信（メールの送受信や、WebブラウザでAmazonのショッピングサイトを閲覧するなど）ができるようになる。

## OSI参照モデル
通信が実現する際、用いられているプロトコルは一つではなく、複数の組み合わせで成り立っている。
この、「通信行う際の、複数のプロトコルの組み合わせ」の考え方（設計思想）の一つが、**OSI参照モデル**である。OSI参照モデルでは、プロトコルを7つの階層（第１層〜第７層）で分けて管理している。
[OSI参照モデル](https://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB)

## TCP/IPモデル
OSI参照モデルのように、７階層もあるような細分化されたモデルだと、通信の仕組みを新たに実装しづらいという背景もあるため、TCP/IPモデルという考え方（設計思想）がある。TCP/IPモデルは４階層で構成されていて、よりシンプルな形で体系づけされている。TCP/IPモデルは、第１層がネットワークインターフェース層、第２層がネットワーク層、第３層がトランスポート層、第４層がアプリケーション層という呼び方で構成されており、それぞれ異なる役割を持ち合わせることで通信が実現する。
[TCP/IPモデル](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%83%BB%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%83%BB%E3%82%B9%E3%82%A4%E3%83%BC%E3%83%88)

## カプセル化
送信したいデータに対して、TCP/IPモデルの階層を上（第4層）から下（第1層）にたどって、
各プロトコルのヘッダを付与する仕組みを**カプセル化**と呼ぶ。
※ヘッダとは、各階層のプロトコルを正しく機能させる制御情報のことである。

## 逆カプセル化
データを受信する際、カプセル化されたデータを認識するための仕組みを逆カプセル化と呼ぶ。
具体的な仕組みは、TCP/IPモデルの階層を下（第1層）から上（第4層）にたどって、各プロトコルのヘッダを解除していき、送信元から届いたデータを認識する。

# インターネットが繋がる仕組み
とある端末Aによって、ブラウザからAmazonのショッピングサイトを閲覧する場合を想定する。
## 1.端末Aが、ブラウザで「Amazon.co.jp」を検索
このとき、端末Aは「Amazonのショッピングサイトを見たい！」という内容のデータを、Amazonのショッピングサイトを管理するサーバー(以下Webサーバー)に送信しようとする。
## 2.端末Aが、送信データをカプセル化
1. この場合の通信プロコトルは、HTTPプロコトルを用いる。(TCP/IPモデル第4層)
2. HTTPプロトコルは通信元と通信先での通信を保証するため、TCPを用いる。(TCP/IPモデル第3層)
3. 宛先ポート番号は、今回の場合HTTPプロトコルを利用しているため、80番を使用する。(TCP/IPモデル第3層)
    - ポート番号とは、プログラムを識別するための番号のこと。今回のようにサイトを表示させたいときは、サイト表示先の80番ポートに対して接続しに行く。
    - たとえば、メールを送信したい場合は、メール送信先の25番ポートに対して接続しに行く。
    - Web接続(HTTPプロトコル)やメール送信(SMTPプロトコル)のようなメジャーなプログラムに対してはあらかじめポート番号は決まっている。
4. 宛先IPアドレスの情報を取得する。(TCP/IPモデル第2層)
    - 宛先IPアドレスは「Amazon.co.jp」をもとに取得する。
    - 「Amazon.co.jp」のように、人間が組織名を識別するための名前を**ドメイン**と呼ぶ。
    - ドメインはIPアドレスと紐づけられている。
    - コンピュータはデータの宛先情報として("Amazon.co.jp"という文字列ではなく)IPアドレスを認識する。ドメインからIPアドレスを割り出す仕組みをDNS(Domain Name System)と呼ぶ。
5. 送信データの転送先MACアドレス情報を取得する。(TCP/IPモデル第1層)
    - 宛先へデータを届けるため、データの転送先を決める必要がある。（端末AからWebサーバーへ直接データが届けられるわけではない。）
    - 転送先を決めるための情報は**MACアドレス**である。MACアドレスはIPアドレスと紐づいており、宛先IPアドレスをもとに、次の転送先、次の転送先・・・と、それぞれのMACアドレスを割り出しながら、転送先を都度確定させ、最終的にWebサーバーまで送信データが到達する。
## 3. 送信データは、ルーターを経由して、Webサーバーが存在するネットワークへ
- 今回の場合、端末AとWebサーバーは異なるネットワークに存在しているため、ルーターと呼ばれるNW機器を経由してデータが転送される。
- ルーターはカプセル化された送信データうち、TCP/IPモデル第2層のネットワーク層のヘッダ情報（IPアドレス情報）をもとに、転送先を決めている。
## 4. Webサーバーが、受信データを逆カプセル化
1. Webサーバーが、カプセル化されたデータを受信し、それぞれの第1層から順に各階層のヘッダ情報を認識・取り外しながら、最後にデータを認識する。(逆カプセル化)
2. Webサーバーが、端末Aに対し、第1項で要求されたWebページ（今回の場合Amazonのショッピングサイト）のデータを、第2項と同様の手順で送信する。
## 5. 端末Aのブラウザ上にAmazonのショッピングサイトが表示
Webサーバーから送信された４−２のデータを、端末Aが逆カプセル化し、ブラウザ上にAmazonのショッピングサイトが表示される。