はじめに
エンジニア歴2年弱で転職しようと技術面接を受けたらボロボロだったので、今まで苦手だったIPアドレスを深堀してみました。
ソースを見ながら設計の話しをすると聞いていたのでオブジェクト指向だとかクリーンアーキテクチャ等の設計の話しだと勘違いしてました。
でも実際はアルゴリズムの話しでした。。。
クライアントIPアドレスが許可できる範囲内にあるかどうか判定するという内容。
そもそもの理解が乏しく全く歯が立ちませんでした。
安易に基本情報持ってます!と言えないです。
IPアドレスとは
インターネット上の住所みたいなもの。
192.168.1.1
上記のように4つのブロックに分かれていて。
192.168.1.0/24
というのは、
- 192.168.1. までがグループ名(ネットワーク)
- 最後の .1 がそのグループの中の誰か(ホスト)
を示します。
IPアドレスの末尾についている /24 といった数字は、ネットワークの「区切り」を表す非常に重要な数字である。
これを専門用語でCIDR(サイダー)表記と呼びます。また、この区切りを定義するための値をサブネットマスクと呼びます。
IPアドレスが許可したい範囲内にあるかどうか
| CIDR | 使える台数の目安 | よくある利用シーン |
|---|---|---|
| /32 | 1台(固定) | 特定のPCやサーバー1台だけを指す |
| /24 | 約250台 | 家庭・小規模オフィスの標準 |
| /16 | 約6.5万台 | 大学や大企業の拠点、AWSのVPCなど |
| /8 | 約1,600万台 | 通信キャリア等の巨大組織 |
| /0 | すべて | 0.0.0.0/0(インターネット全体を許可する場合) |
実際に下の例で見てみます。
192.168.1.50:クライアントIPアドレス
192.168.1.0/24:許可したいネットワーク範囲(セグメント)
-
まずクライアントIPアドレスを2進数にする
・11000000.10101000.00000001.00110010(192.168.1.50) -
サブネットマスクを作る
・11111111.11111111.11111111.00000000 (左から24個の「1」を並べる)
・※これが10進数だと 255.255.255.0 になります。 -
論理積(AND演算)でネットワーク部分を抽出 クライアントIPとサブネットマスクを比較し、「両方が1のところだけ1」を残す。 これにより、ホスト部分(個人の番号)が削ぎ落とされ、グループ名(ネットワークアドレス)だけが残る。
・11000000.10101000.00000001.00110010(192.168.1.50)
・11111111.11111111.11111111.00000000(/24)
・2つの2進数の1の部分のみを下に書き出す(両方が1のときだけ1、それ以外は0にする)
・11000000.10101000.00000001.00000000(結果) -
結果が192.168.1.0と一致すればいい
・11000000.10101000.00000001.00000000 (192.168.1.0)
簡単に説明すると上記4ステップで確認する事ができます。
おわりに
実際に痛い目を見てようやく苦手だったIPアドレスについての理解が深まりました。
基本情報を勉強していた時はYouTube動画を見ていたんですが、全く理解できず捨て問にしてました。
苦手な方は参考動画を見て理解を深めてみてください。
これを機にネットワーク関連の苦手意識がなくなるように努めたいと思いました。
その他(メモ)
プライベートIPアドレス(家の中・社内用)
※重複していてもいいアドレス
| 始まりの数字 | 一般的な規模 | よく見る例 |
|---|---|---|
| 10.xxx | 大規模(社内LAN) | 会社のネットワーク、AWSなどの仮想環境 |
| 172.16〜31 | 中規模 | サーバー構築、Dockerなどの仮想技術 |
| 192.168 | 小規模 | 自宅のWi-Fiルーター、家庭用ゲーム機 |
ループバックアドレス
| 始まりの数字 | 一般的な規模 | よく見る例 |
|---|---|---|
| 127.0.0.1 | localhost | 自分自身 |