新卒入社してから学んだネットワーク基礎


#ネットワーク

サーバーとクライアント間で情報の受け渡しをしている技術   
色々なデータを世界中に運ぶ
サーバー・・・ネットワーク上のクライアントにいろんなサービスを提供するコンピュータのこと   
　例.Webサーバー,メールサーバー,DNSサーバー  
クライアント・・・サーバーに対してリクエストを送り、そのサービスを受ける、コンピュータやプロセスのこと 



#OSI参照モデル

国際標準化機構(ISO)が定めた、コンピュータの通信機能を階層構造に分けて整理したモデル

通信する時のルールの集まり   
役割ごとに7層に分けられている  

|層       |       名称 |    役割    | 主なプロトコル|
|:-----------------:|:------------------:|:------------------:|:------------------:|
| 第7層           | アプリケーション層 | アプリケーションごとの規定を定義 |  HTTP,SMTP,FTP  |
| 第6層           | プレゼンテーション層 |  データの形式(圧縮方法、データの暗号/複合など)を定義  |       SMTP,FTP,TELNET |
| 第5層             | セッション層 | データ通信の手順を定義 |  TLS,NetBIOS  |
| 第4層             | トランスポート層 | ポート番号の割当・コネクションの確立・エラー制御・フロー制御|       TCP,UDP,NetWare/IP |
| 第3層             | ネットワーク層 | アドレスと経路の洗濯方法を定義 | IP,ARP,RARP |
| 第2層          | データリンク層 | 論理的な伝送路の確立| PPP,Ethernet |
| 第1層          | 物理層 | 物理的な接続や伝送方式を規定している | 無線,光ケーブル |


層は互いに影響しない。そうすると、障害原因の特定が楽になる 
障害が発生した場合、最下層(物理層)からケーブルの接続、や電気の供給などの物理的な視点から調査する。
問題がなかった場合、1つ上の層、さらに上の層、、と順番に調査していく


#プロトコル
##プロトコルは通信するときのルール達  
データの表現形式とか通信方式とかを決めている   
それぞれのプロトコルはISO参照モデルの階層のいずれかに分類される 
いろんなプロトコルがあるけど実際に使われているプロトコルは限定されている   

##カプセル化・非カプセル化
通信を行う際、データを送り出すサーバーでは、OSI参照 モデルの上流から下流へデータが送られる   
各層でヘッダ(制御情報)を付加していくことで転送用のデー タを作っている(カプセル化) 
マトリョーシカみたいなやつ！
![スクリーンショット 2017-10-04 19.50.49.png](https://qiita-image-store.s3.amazonaws.com/0/189201/ca7f32b8-2b27-bee9-de70-4eddbe36f350.png)





アプリケーションがデータを送る場合、
###送信側
1. 第５〜７層でアプリケーションデータを作成する。
2. 第４層がそれをTCPやUDPのヘッダー(通信する際に必要なデータの集まりみたいな解釈でおｋ)をデータの先頭に追加し、セグメントというデータの集まりに加工する
3. 第3層ではIPのヘッダーを追加し、パケットというデータの集まりに加工する 
4. 第2層ではイーサネットのヘッダーを付与し、フレームというデータの集まりに加工する
5. 第1層は受け取ったフレームをビットに変換したあと電気信号/光信号にして送信する


###受信側
1. 第1層で電気信号/光信号をビットに変換し、フレームにする
2. 第2層でフレームからパケットを取り出して第3層に渡す
3. 第3層でパケットからセグメントを取り出して第4層に渡す
4. 第4層でセグメントからデータを取り出してオリジナルのアプリケーションデータをクライアントに渡す
5. 
カプセル化を行うことによって、各プロトコルは配送するデータがどんなものでも同じ処理を行うことができる。(各層が独立しているため)


#IPとは
##IPはプロトコルの1つ
Internet Protocolの略   
IPの仕様は「IETF」という標準化団体が決めている。   
ネットワーク層のプロトコルで、トランスポート層から受け取ったデータに送り先を指定する⇨宅急便の伝票みたいなやつ   
IPアドレスと呼ばれる識別番号を使用してコンピュータを識別する  

##IPアドレスって何
いわゆる住所  
サーバーや端末を一意に定める  
また、会社や家庭などの組織内（ローカル）で一意に割り当てられるIPアドレスをプライベートアドレス、
インターネットに接続された機器に一意に割り当てられるIPアドレスをグローバルアドレスという。
ネットワーク部とホスト部の2つから構成されている   
コンピュータ（ホスト）に割り当てるIPアドレスを「ホストアドレス」，ネットワークに割り当てるIPアドレスを「ネットワークアドレス」(後述)と呼んでいる。

<img width="670" alt="スクリーンショット 2017-10-05 19.17.38 (1).png" src="https://qiita-image-store.s3.amazonaws.com/0/189201/f11770cc-2d9f-b4fc-368f-ca7ed5815976.png">

↑の図でいうと、
172.16.0.0っていうネットワークに接続されている172.16.1.1というホスト、172.16.1.2というホスト,172.16.1.3(以下略)っていうことになる。


###ネットマスク
IPアドレスのネットワーク部のビットをすべて1にしたものをネットマスクという。
このネットマスクとIPアドレスでAND演算を行うとネットワークアドレスが取り出せる。


###サブネット化
1つのネットワークを複数のサブネットに分割すること。 
物理的な配置や組織などの小さい単位でネットワークを作り、それらを接続する構成にすること。
サブネット化したときのネットマスクをサブネットマスクと呼ぶ。(が、一般的には区別せずに使うらしい) 

###サブネットマスクとは
サブネット化したときのネットマスク
IPアドレスをホスト部とネットワーク部で分けるための数値


###可変長サブネットマスク(VLSM)
サブネットごとにサブネットマスクの長さを変えられることができる技術 
この技術があればサブネットごとに接続する端末の数を、より必要数に近い形に割り当てることができる


###CIDR
可変長サブネットマスクをベースとしている。 
IPアドレスのクラスフルな分類とは別に、ネットワーク部を短くみなすことで複数ネットワークに対する転送ルールをまとめる技術。
昨今ではネットワーク部の長さを自由に設定すること全般をCIDRと呼ぶことが多い。 
IPアドレスのあとに/とサブネットマスクのビット数を書く表記方法をCIDR表記と呼ぶ。 (後述)

###IPv4とIPv6
IPアドレスには1978年に作られた「IPv4」と1995年に作られた「IPv6」がある。  IPv4は32ビット長、IPv6は128ビット長で表わされる`
昔は主にIPv4アドレスが使われていたが、2011年ごろから枯渇し始めた。(IPv4枯渇問題)   
そのため最近はIPv6が普及しつつある(普及したとは言っていない) 

####IPv4
2進数で32桁。通常は8ビットずつ区切って10進数表記になおして、ピリオドで区切る。
192.168.33.10みたいな。
IPv4アドレスの総数は2の32乗個、つまり約43億個。地球の総人口よりすくないらしい。

####IPv6
通常4桁の16進数を”:”区切りで8つ連ねた形(128bit)で表記される。
2001:0db8:0000:0000:1234 :0ace:6006:001eみたいな。
頭が0とか、00とか、は0以外の数字、文字まで省略できる。
省略したらこんな感じ。
2001:db8::1234 :ace:6006:1e
IPv6アドレスの総数は2の128乗（340282366920938463463374607431768211456）個らしい。約340澗（かん）個。
そこらへんに落ちてる石ころ1つ1つにアドレスを割り振れるくらいらしい。



####IPv4枯渇問題
インターネットの普及に伴って起きた問題で、現在使用されているIPv4というプロトコルでは近い将来にIPv4アドレスが不足してしまうことが予想されている事態のこと。
IPアドレス等のインターネット上の資源を管理している団体の管理しているIPv4アドレスが2011年に枯渇した。
IPアドレスが枯渇するということはサーバーや端末などをネットワークに追加することができなくなることを意味する。

####IPv6がなかなか普及しない問題
IPv4アドレスがめちゃめちゃ枯渇し始めているのにIPv6の普及スピードが遅い問題。
IPv4アドレスとIPv6アドレスの互換性がない
IPv4はIPv4の設定がされてないと情報のやり取りができない。IPv6もIPv6の設定がされてないと情報のやり取りができない。
当然かもしれないけど同じ規格じゃないと動かない。
コンテンツを用意する側もコンテンツを利用する側も、お互いが増えないと対応しないので普及しない。
コンテンツを用意するサイト側はIPv6でアクセスするユーザーが増えなければIPv6対応する必要はまだないよね。今まで通りIPv4のままでいいよねとなります。
IPv4とIPv6が共存する技術もあるらしい。けどそれも普及していないのが現実という。。


###IPv4アドレスの分類方法
####クラスフル
使用用途に応じてA~Eの5つに分類される。
一般的に使用されるのはA~C

|クラス|第1オクテット|IPアドレスの範囲|
|:--:|:--------:|:----------:|
| A  | 0******* |0.0.0.0 ~ 127.255.255.255|
| B  | 10****** |128.0.0.0 ~ 191.255.255.255|
| C  | 110***** |192.0.0.0 ~ 223.255.255.255|
| D  | 1110**** |224.0.0.0 ~ 239.255.255.255|
| E  | 1111**** |240.0.0.0 ~ 255.255.255.255|

クラスDはマルチキャスト通信で用いられる。（マルチメディア・アプリケーションなど）
クラスEは実験的な目的のために開発当初から予約されているアドレスで一般に使用されることはない。
クラスA~Cはそれぞれ第1オクテット、第2オクテット、第3オクテットまでがネットワーク部になる。

ただし、クラスフルによる分類は無駄が多い
- ネットワーク部が同じ端末は同じネットワークに接続する必要がある
- クラスAだと1ネットワークに2の24乗台の端末が接続できるかが現実的ではない


####クラスレス
サブネットマスクを使用してホスト部とネットワーク部を区別する。
#####使用用途
- 会社の部署間データの参照領域を分けたい場合
- パソコンやサーバーの台数が多くて分割して管理する場合
- 開発環境と本番環境を切り分けたい場合

####サブネットマスクの表記方法
10進数表記とCIDR表記がある
IPアドレスが172.16.1.1で、サブネットマスクが255.255.192.0って言われたらこれが10進数表記
172.16.1.1/18とも表せる。これがCIDR表記
18はサブネットマスクを2進数表記した時の左側から数えた1の個数。18bitの意。

<img width="409" alt="サブネットマスク.png" src="https://qiita-image-store.s3.amazonaws.com/0/189201/275274dd-e373-bdb1-bba9-5bb9f22d4192.png">

先頭から18ビットがネットワーク部（ネットワークアドレス）になる。
そこから先14ビットがホスト部（ホストアドレス）になる。
上記の例だと172.16っていうネットワークの1.1というホストであることが分かる。

##予約済みIPアドレス
IPアドレスには特別な用途で使用するものが有る
コンピュータなどのホストには割り当てられない

###ネットワークアドレス
ホスト部の2進数ビットが全て0のアドレス
ネットワーク自体を指す。

###ブロードキャストアドレス
ネットワークアドレスとは反対にホスト部の2進数ビットが全て1のアドレス
あるセグメントに接続されている全てのホストにパケットを送信するためのアドレス

#NATとNAPT
NAT(Network Address Translation)
NAPT(Network Address Port Translation)
ローカルで使用するプライベートアドレスをインターネットで使用できるグローバルアドレスに変換する技術のこと。(狭義)
広義のNAT/NAPTはグローバル・プライペートにかかわらずIPアドレスを変換する技術全般のことを指す。

##NAT
プライベートアドレスとグローバルアドレスを1対1で紐付ける
サーバーをインターネットに公開する時に使用する。
LANからインターネットに接続する時は送信元のIPアドレスを変換し、インターネットからLANに接続する時は宛先IPアドレスを変換する。
###NATの問題点
LANに複数の端末があって、それらすべてをインターネットに接続させたい時、それぞれの端末にグローバルアドレスを紐付けなければいけない。
ルーターが2つしかグローバルアドレスもってなかったら2台までしかインターネットに接続できない。3台目はインターネットに接続できなくなってしまう。

＿人人人人人人人＿ 
＞　そこでNAPT　＜ 
￣Y^Y^Y^Y^Y^Y^Y￣
##NAPT
プライベートアドレスとグローバルアドレスをn対1に紐付ける
LANからインターネットにアクセスする時に送信元IPアドレスだけじゃなく送信元ポート番号も変換する。
そうすることでLANにいるたくさんの端末からインターネットに接続できる。

###ポート番号ってなに?
各ホストの部屋番号的なやつ。
コンピュータの中で動作しているアプリケーションを識別するために使用する数字のこと。

0〜65535まである。

|ポート番号|名称|メモ|
|:--:|:--------:|:----------:|
| 0〜1023 | ウェルノウンポート |サーバーのアプリケーション 待ち受け用に使われる|
| 1024〜49151| レジスタードポート番号 |メーカーの独自アプロケーション用|
| 49152〜65535| ダイナミックポート |プライベートポート|

###NAPTの問題点
- データ内にアドレスを指定するパケットには使えない
- ポートフォワーディングを使わないとインターネットからLANにアクセスできない

###ポートフォワーディング
インターネットから特定のポート番号に通信が届いた時に事前に設定しておいたローカルのインターネット内の端末にパケットを転送する機能
例えば、80番のポート宛のパケットが送られてきたら、LAN側の192.168.1.1の機器へ転送するといった設定ができる。  
このようにあらかじめ転送するポートとクライアントPCのIPアドレスを登録しておくことで外部からの通信が行えるようになる。