【学習記録①】チームラボオンラインスキルアップ課題「インターネットについて」

#はじめに
下記サイトを参考に、Webサービスを作成する手順を記します。

**チームラボオンラインスキルアップ課題**
https://team-lab.github.io/skillup/

#目次
* Step1 掲示板を作ろう
    * 1.　インターネットについて
    * 2.　WEBサーバーについて
    * 3.　HTMLとCSSについて
    * 4-a【Windows】Dockerと開発環境
    * 4-b【Mac】Dockerと開発環境の作り方
    * 5.　PHPの説明
    * 6.　PHPでGET/POSTをやってみる
    * 7.　データベースについて
    * 8.　SQLを書いてみる
    * 9.　PHPでデータベースを操作してみる
    * 10. GitとGithubについて
    
* STEP2 Instagramもどきを作ろう
    * 1. フレームワークについて
    * 2.　Laravelで初期ﾍﾟｰｼﾞを表示してみよう
    * 3.　Laravelを触ってみよう
    * 4.　入力フォームを作ってみよう
    * 5.　LaravelとPostgerSQLで掲示板を作ってみよう
    * 6.　Laravelで掲示板にログイン機能を実装
    * 7.　画像アップロードしよう
    * 8.　画面仕様書とは何か
    * 9.　データベース設計書とは何か
    * 10　Herokuで世界に公開してみよう
    * 11　最終課題

# 今回勉強したこと
# 「STEP1 掲示板を作ろう」＞「インターネットの仕組み」
## ①インターネットの仕組み
|
* インターネットとは？
    * 家庭内LANや企業内LAN,携帯電話網などのネットワーク同士を繋ぐ、世界規模の通信網のこと
* インターネットの仕組み
    * インターネットに接続するにはルータなどの機器を使用する
    * インターネットに接続する機器には、IPアドレス（176.32.98.81など）が割り当てられる。通信の際にはそのIPアドレスを用いて接続先を指定する
*ドメイン
    * IPアドレスは数字列で人間に分かりにくいので、一般的には英数字列で名前（ドメイン名と呼ばれる)を付ける
    * IPアドレスとドメイン名を関連付けることによって、IPアドレスの代わりにドメイン名で接続することができる
* クライアントとサーバ
    * インターネットにおいて、リクエストを送信する側をクライアント、それを受けてレスポンスを返す側をサーバと呼ぶ
    * クライアントとサーバーはプロトコル（通信規約）に従い通信を行う
    * サーバには様々な種類のものがある、一般に1つのIPアドレス上で複数の種類のサーバが動いていることが多い
    * 通信の際にこれらを区別するためにポート番号という0から65535までの数値が用いられる

|プロトコル|主なポート番号|用途|
|:-: |:-: |:-: |
|HTTP|80|Webサーバとの送受信|
|HTTPS|443|セキュアな接続の上でのHTTP通信|
|FTP|20,21|ファイル転送|
|SMTP|25|メール送信|
|POP3|110|メール受信|
|SSH|22|暗号化通信|

#[課題]DNSについて調べよう
>DNSはIPアドレスとドメイン名を関連付けるシステムです。どのような動作をするのか調べてみましょう。

**参考URL**
参考というか、写経です。

「インターネット10分講座　DNS」
https://www.nic.ad.jp/ja/newsletter/No22/080.html

##目次
* DNSとは？
* HOSTS.TXTからDNSへ
* DNSのしくみ
* DNSにおける問い合わせの流れ

##DNSについて
* DNSとは？
    * Domain Name Systemの略
    * インターネット上でドメイン名（ﾄﾞﾒｲﾝﾈｰﾑ）を管理、運用するシステム
    * 現在のインターネットを利用するうえで、DNSは必要不可欠

* DNSとはどういうものなのか？
    * インターネットに接続している機器には「IPアドレス」という固有の番号が必ず割り当てられる
    * インターネット上におけるすべての通信は、相手先のIPアドレスが指定されることにより行われる
    * たとえばGoogle(https://www.google.co.jp)をWebブラウザで見るとき、実際にはgoogle.co.jpのIPアドレスである172.217.25.195という宛先IPアドレスに対して通信が行われる

* IPアドレスで通信するのは不便
    * IPアドレスで相手先を直接指定することは、インターネットを利用する各ユーザーがWebサーバのIPアドレスをすべて記憶しておく必要があり、現実的ではない
    * なんらかの理由で、相手先ネットワークの構成が変更された場合、IPアドレスをつけなおしたり、変更される場合がある。そうすると以前のIPアドレスでは接続できなくなる
    * 人間が覚えやすく使いやすい「名前」で指定できるようにするためのしくみが必要で、DNSはそれを実現するためのシステム
* HOSTS.TXTからDNSへ
    * インターネットの前身であるARPANET(1969年～）では、ホスト名とIPアドレスの対応表として、HOSTS.TXTというテキストファイルを使用していた
    * 当時、新しくARPANETに接続した組織は、最新のHOSTS.txtをSRI-NICから入手し、自分のホストに導入していた。これにより、相手先ホストを名前でしてすることができる
    
    * 自分の名前とIPアドレスの対応は、SRI-NICにメールで通知します。
    * SRI-NICではこのメールを受けてHOSTS.TXTの更新作業を行い、公開します
    * 各ホストでは、定期的にSRI-NICからHOSTS.TXTを入手し、ファイルを更新すればいいことになります
    * しかし、この方法は下記の理由により、1980年代初頭には限界
        * 接続ホスト数の増加によるHOSTS.TXTファイルの肥大化
        * HOSTS.TXTファイルの更新頻度の増大による作業量の増加
        * マスターファイルを集中管理するサーバの負荷の増大
    * そこで、これらの問題を解決するための新たな仕組みが開発され、1983年にRFC882およびRFC883として発表。これが現在のDNSの元となったもの
    * RFC882とRFC883は、1987年にそれぞれRFC1034とRFC1035に改良（現在のDNS）
![HOSTS.TXT.jpg](https://qiita-image-store.s3.amazonaws.com/0/282183/574973b5-9957-ee40-6512-aa175a13a722.jpeg)
<図1 SRI-NICからHOSTS.TXTを入手 |インターネット10分講座 DNS -JPNIC>

* DNSのしくみ
    * DNSでは名前空間の最上位に「ルートサーバ」と呼ばれるサーバが作成されます
    * ルートサーバーでは"jp"や"com"など、一番上位のドメイン名(TLD)のDNSサーバがインターネット上のどの位置にあるか（つまりどのIPアドレスなのか）を管理。
    * TLSサーバーではそれぞれの空間で管理される名前、たとえば"example"や"ad.jp"などのDNSサーバーがどこにあるかを管理する
    * "example.jp"のサーバでは自分の名前管理の中にあるホストへの対応表、たとえば"www.example.jp"のIPアドレスが管理される。
    * つまり、DNSでは、名前を「ドメイン」と呼ばれる階層構造で管理することによりデータを複数のホストに分散化して管理するようになっています。
        * ファイルが肥大化しないように、データを複数のホストに分散化
        * 名前を「ドメイン」として階層化し、更新作業の集中を防止

![dnsの階層構造.jpg](https://qiita-image-store.s3.amazonaws.com/0/282183/fa451156-7387-a025-761a-ef3699dcd097.jpeg)
[インターネット10分講座　DNS -JPNICより]

* DNSにおける問い合わせの流れ
![DNS問い合わせの流れ.jpg](https://qiita-image-store.s3.amazonaws.com/0/282183/9494221a-6b40-ee6b-8032-f6604872abf1.jpeg)

* DNSにおける問い合わせの流れ
    * DNSを利用するときにはまず「DNSサーバに問い合わせを行うためのサーバ」を1台用意する
    * 問い合わせを行うためのサーバには、ルートサーバのIPアドレスが書かれた表をあらかじめ準備しておく
* 問い合わせを行うサーバの動き
    * 組織内の他の機器（PCなど）から問い合わせの依頼を受ける
    * たとえば"www.example.jp"というドメイン名のIPアドレスの問い合わせを受けた場合、
    * まずルートサーバにwww.example.jpのIPアドレスを問い合わせる
    * ルートサーバはそれに対し「それはjpサーバが管理しています」ということを知らせるために、jpサーバの位置を知らせる
* 結果を受け取ったサーバ
    * jpサーバーに同様の問い合わせを行う
    * jpサーバはルートサーバと同様に「それはexample.jpサーバが管理しています」と知らせる
    * 最終的に問い合わせを受けたexample.jpサーバが、www.example.jpのIPアドレスを返す
* つまり
    * このようにDNSでは、問い合わせを行うためのサーバーがルートサーバから下位サーバに対し反復的に名前を問い合わせ、べての名前空間に対する問い合わせに対応する
* また、
    * DNSでは、同じ問い合わせを繰り返す行うことを防止する
    * DNSサーバへの問い合わせによって得た結果をある時間記憶しておく(キャッシュ）仕組みが実装されていることがある
        * キャッシュが有効な間に同じ内容の問い合わせがあった場合、
        * サーバーでは再度反復問い合わせをすることなく
        * 自分が持っているキャッシュの内容を解凍する
    * このため、問い合わせを行うためのサーバーは「DNSキャッシュサーバ」とも呼ばれている