非情報系研究室のサーバ管理係が現役時に知っておきたかったネットワーク基礎知識

数値計算系研究室の学生がサーバ管理係（~~という名の雑用係~~）として最低限知っておきたかったネットワーク基礎知識をメモ．
特にVPN構築や計算機へのssh接続に必要なIPアドレス周辺の知識について述べる．

# IPアドレスについて
IPアドレスとは，IPでネットワーク上の機器を識別するために指定する番号である．
現在32bit長のIPv4と128bit長のIPv6が世界で使用されているが，ここでは現在主流のIPv4について述べる．


## 表記法
IPアドレスは`10101100000100000000000100001111`のように2進数の数字で表現するビット表記と，
これを`10101100` `00010000` `00000001` `00001111`のように8bit(1オクテット)単位に分割し，その8bitを10進数に変換し，`172.16.1.15`のように表現するドット表記がある．
ドット表記の扱いやすさから，ドット表記が広く用いられている．
従って，ドット表記では1オクテットは0~255(2^8)の範囲を持つ．


## グローバルIPアドレスとプライベートIPアドレス
IPアドレスは**グローバルIPアドレス**と**プライベートIPアドレス**に大別される．
インターネット上で使用される，つまり世界中で通じるアドレスがグローバルIPアドレスであり，関係者しかアクセスできないネットワーク(=イントラネット)内でのみ通じるのがプライベートIPアドレスである．
これらの関係性は下図のように表される．
<img width="730" alt="グローバルIP_Google.bmp (1.3 MB)" src="https://img.esa.io/uploads/production/attachments/14711/2020/07/12/72907/3528d882-604d-4b21-9c6a-e724788ec81b.bmp">

イントラネットとインターネットはNAT(Network Adress Translator)機能を持つルーターによって接続されている．
NAT機器はプライベートIPアドレス(`192.168.100.xx`)とグローバルIPアドレス(`216.58.197.227`)を変換することができる．

因みにマシンのプライベートIPアドレスは，OSがWindowsであれば
<pre>> ipconfig</pre>
Linux、macOSであれば
<pre>$ ifconfig</pre>
で確認できる．

グローバルIPアドレスは，以下のサイトなどグローバルIPアドレスを確認できるページがあるのでそこから確認できる．
https://www.cman.jp/network/support/go_access.cgi

### プライベートIPアドレスの範囲
以下がプライベートIPアドレスの範囲と規格で決定されており，それ以外の範囲をグローバルIPアドレスに使用できる．

|プライベートIPアドレスの範囲|
|:--:|
| 10.0.0.0 ~ 10.255.255.255 |
| 172.16.0.0 ~ 172.31.255.255 |
| 192.168.0.0 ~ 192.168.255.255 |



## 領域
IPアドレスは**ネットワークアドレス領域**と**ホストアドレス領域**の2つの領域で管理されている．
<img width="758" alt="ネットワークアドレス.bmp (471.2 kB)" src="https://img.esa.io/uploads/production/attachments/14711/2020/05/10/72907/83dcbf7c-1ecb-4bd7-bd77-7965d0379a00.bmp">

ネットワークアドレス領域では，端末が所属するネットワークを一意に識別することができる．
従って，同じネットワークに所属する端末は同じネットワークアドレスのIPアドレスをもつ．

ホストアドレス領域はネットワーク内にある端末を一意に識別するための情報を表す領域である．
同一のネットワークに接続されている端末にはホストアドレス領域に異なる数値が割り振られる．

各領域の境界線は，アドレスクラス及びサブネットマスクで定義される．

### アドレスクラス
アドレスクラスは，ネットワークアドレスの領域長を決めるルールである．
IPアドレスのクラスは主に以下のA,B,Cクラスがある．
<img width="742" alt="アドレスクラス.bmp (541.5 kB)" src="https://img.esa.io/uploads/production/attachments/14711/2020/05/10/72907/47c8812c-60b6-47fa-adb4-d6e195a81978.bmp">

|アドレスクラス|ネットワークアドレスの大きさ|ホストアドレスの大きさ|ネットワークアドレスとして利用できる値|
| :--: | :--: | :--: | :--: |
| クラスA | 8bit | 24bit | <u>0</u>.0.0.0 ~ <u>127</u>.0.0.0 |
| クラスB | 16bit | 16bit | <u>128.0</u>.0.0 ~ <u>191.255</u>.0.0 |
| クラスC | 24bit | 8bit | <u>192.0.0</u>.0 ~ <u>223.255.255</u>.0 |

従って，IPアドレスによってどこまでがネットワークアドレス領域か判別することができる．
しかし現在は次に述べるサブネットマスクによってネットワークアドレス領域とホストアドレス領域を識別するか，両方を使用するのが一般的である．

### サブネットマスク
<img width="787" alt="サブネットマスク.bmp (650.2 kB)" src="https://img.esa.io/uploads/production/attachments/14711/2020/05/10/72907/de8f9a4a-da5a-47ca-ad37-82aa046d9e85.bmp">

<img width="803" alt="サブネットマスクアドレス.bmp (480.0 kB)" src="https://img.esa.io/uploads/production/attachments/14711/2020/05/10/72907/07386bbb-8f6c-4c16-a578-95958f06ff42.bmp">

サブネットマスクではネットワークアドレス領域を任意に規定できる．
表記方法は以下の3つ．
1. ネットワークアドレス領域を先頭から2進数の`1`で表し，ホストアドレス領域を`0`で表す．
例) `11111111　11111111　11111111　00000000`
(ネットワークアドレス領域：先頭から24bit，ホストアドレス領域：末尾の8bit)
2. 1.の表記を10進数のドット表記に変換して表す．
例) `255.255.255.0`
3. 1.の表記で連続する`1`の数をIPアドレスの後にスラッシュをつけて表す．
例) `172.16.1.15 /24`

# 参考
- [IPアドレスの基礎知識](https://qiita.com/mogulla3/items/efb4c9328d82d24d98e6)
- [ネットワークがよくわかる教科書](https://www.amazon.co.jp/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%8C%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8-%E7%A6%8F%E6%B0%B8-%E5%8B%87%E4%BA%8C/dp/4797393807)