【基本情報技術者】サブネットマスクとIPv6

基本情報技術者試験の分野「サブネットマスク」と「IPv6」についてご紹介いたします。

## サブネッティング
サブネッティングは、**クラスに基づいたネットワークをより複数に分割すること**です。
クラスに基づいた8ビット区切りのネットワークアドレスでは、IPアドレスが無駄になることが多くなってしまいます。サブネッティングによって、1つのネットワークを分割して、IPアドレスの無駄を少なくすることができます。
ネットワーク部を拡張（ホスト部から間借り）してサブネット部を作る。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/d34c7079-40cb-2322-baae-5a2ea3ea3608.png)

**例　IPアドレスクラスBをサブネッティング**
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/f190ff03-4173-7d8f-d74e-d39ed5439d98.png)
サブネッティングを行なうと**使用可能なネットワーク数は増えるが、個々のネットワークに収容可能な端末(ホスト)の台数は減る**。こうしてできたサブネットは、元のネットワークのネットワーク部＋サブネット部で一意に識別され、**「ネットワーク部＋サブネット部」がサブネットのネットワークアドレスとなる。**

## サブネットマスク
**サブネットマスクは、IPアドレスをネットワーク部とホスト部を区切るために使用するビット列のこと。**

※ネットワーク部とホスト部の境界を示す目印。IPアドレスのどの部分がネットワーク部で、どの部分がホスト部かを示す情報。

**ネットワーク部はビットが全て「1」を、ホスト部はビットが全て「0」となる。**

**次のような方法でネットワーク部とホスト部を分けることができる。**
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/95d97b80-f677-8f64-4d63-976a5a99ad2d.png)
①IPアドレスとサブネットマスクは、10進数表記のためそれぞれを2進数表記にする。
②IPアドレスとサブネットマスクの2進数表記を上下で合わせる。サブネットマスクで全てが1の部分をネットワーク部、全てが0の部分をホスト部とする。
③再び2進数表記を10進数に戻し、ネットワーク部とホスト部の境界を判断することができる。

**※2進数⇔10進数の変換についてはこちらを参照。** [2進数⇔10進数の変換](https://qiita.com/pieceofmysoul1225/items/6ca512c63fc1188d54c2)
**※サブネットマスクの2進数　255（にごご）ときたら11111111(8ビット8桁）と考える。**

**例題**
基本情報技術者試験平成30年度春期　午前問32を解いてみる。
![キャプチャ8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/82b09e99-0f1a-14de-5aa7-3eb072fc2eec.png)
**ア200.170.70.17　イ200.170.70.20　ウ200.170.70.30　エ200.170.70.31**
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/860a30bd-ecee-5de4-bd27-0824f8ba8c5d.png)
このことから、先頭から28ビットがネットワーク部、**末尾4ビット**がホスト部となる。
各選択肢末尾8ビット（8ビットずつ区切られている。）を2進数表記にする。
ア.17→0001 0001　イ.20→0001 0100　ウ.30→0001 1110　エ.31→0001 <font color="red">1111</font>
エ.31→0001 <font color="red">1111</font>は、オール1になってしまうためホストに割り振れないアドレス。
よって答えは、**エ200.170.70.31**
## CIDR表記 （サイダー表記）
CIDR表記とは、IPアドレス（IPv4アドレス）の範囲を表記する方法の一つで、「192.168.1.0/24」のように「先頭アドレス/ネットワーク部のビット数」という形式。
※プレフィックス表記とも呼ぶ。
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/e3e49de6-b262-676c-77ed-dcab47708192.png)
### CIDR(サイダー)
**CIDR**(Classless Inter-Domain Routing)とは、**アドレスクラスの概念を気にしないことで、IPアドレスの割り当てや経路選択などの自由度を上げる仕組み**です。
![キャプチャ5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/a0ff51e9-c960-99cb-e23f-88acc6c5ad39.png)
![キャプチャ6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/67f3bbd4-c060-296c-88bd-1555be802fbd.png)
**例題**
基本情報技術者試験平成31年度春期　午前問32を解いてみる。
![キャプチャ8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/9d13fc43-ab77-ee35-bd57-18e7317ae699.png)
IPv4は32ビットで構成されているため。「/23」により上位23ビットがネットワーク部のため32-23=9ビットがホスト部となる。ホスト部のネットワークアドレスとブロードキャストアドレスの2台分は元々指定されているため2台分を引いて計算する。
**2⁹-2=510　使用できるアドレスの個数上限は510個**

## ネットワークアドレス（サブネットワークアドレス）の求め方
ホストのIPアドレスとサブネットマスクの2進数を**AND演算**することでそのホストのネットワークアドレス（サブネットワークアドレス）を求めることができる。
※AND演算は、入力された2つの値のうち、「真」かつ「真」（「1・1」）であれば「1」となるが、それ以外の「1・0」「0・1」「0・0」の場合はすべて「0」となる。
2つの値が両方「1」なら「1」それ以外なら「0」ということ。
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655909/77205a4e-d43c-6ff0-1a4f-5ae735c4715b.png)
## IPv6
現在広く利用されているのはIPv4(32ビット）ですがインターネットの急速な普及から新規に割り当てられるグローバルIPアドレスが足りなくなってしまう**IPv4枯渇問題**が懸念されている。それで、**IPアドレスを128ビットに拡張したIPv6**への移行が進められている。

IPv4では32ビットを8ビットごとに区切り、それぞれを10進数で表したものを"."で連結していましたが、IPv6では128ビットを16ビットごとに区切り、それぞれを16進数で表したものを":"で連結して記述します。
※0が続くフィールドは1度だけ「::」表記で省略できる。2度使用するとどこを省略したのかわからなくなるため「::」表記を使うのは1か所だけ。
例：2001:DB8:0:0:1::1

## IPsec
**TCP/IPネットワークで暗号通信をおこなうための通信プロトコル。**
ネットワーク層で動作する。IPパケットを暗号化する機能があり、安全にデータをやり取りするための仕組み。IPv6には標準で組み込まれている。以下の複数プロトコルで構成されている。
| 名前 | 説明 |
|:-------:|:--------|
|**AH**|発信元認証　改ざん検知|
|**ESP**|発信元認証　改ざん検知　ペイロード部の暗号化|
|**IKE**|秘密鍵の交換|