Table of Contents
IPアドレスとは?
Def: IPアドレス
note for Terminal_B “”
IPアドレスとは, 通信プロトコルのIPが送信先を判断するために利用する「ネットワークに接続されているコンピューターに割り当てられた住所」のこと. IPアドレスは「グローバルIPアドレス」と「プライベートIPアドレス」の2種類に分けられ, 以下のような違いがある:
- グローバルIPアドレス: インターネットに接続された機器に一意に割り当てられるIPアドレス
- プライベートIPアドレス: イントラネットで一意に割り当てられるIPアドレス
グローバルIPアドレスについて全く同じアドレスをもつコンピューターが複数台存在してしまうと, 「コンピューターを識別する」という目的が果たせないので, 番号の重複を防ぐために ICANN(アイキャン)という機関が中心となってグローバルIPアドレスを管理しています.
プライベートIPアドレス
会社や仮定などのLAN内のネットワーク(=イントラネット)に限って利用可能なIPアドレスは自由に使うことが出来ます.
- 自由に使用できるとはいえ組織内で一意でない場合は, 宛先を混同して正常に通信できないので一意に割り当てる必要があります.
- このIPアドレスが割り当てられた機器はインターネットでは通信を行えないため, インターネット通信を行うためには, アドレス変換技術(NAT, Network Address Translation)などでグローバルIPを持つ機器に中継してもらう必要がある
IPv4におけるプライベートIPアドレスの範囲
クラス | アドレス範囲 |
---|---|
クラスA | 10.0.0.0 ~ 10.255.255.255 |
クラスB | 172.16.0.0 ~ 172.31.255.255 |
クラスC | 192.168.0.0 ~ 192.168.255.255 |
なお, プライベートIP以外がグローバルIPアドレスの範囲となります.
Network Address Translation
Def: Network Address Translation
- Network Address Translationは, 企業や家庭のLAN(Local Area Network)内で利用するプライベートIPアドレスを、インターネットで通信する際に使うグローバルIPアドレスに変換する技術を指す
- ルーターが備える機能の1つで, ルーターは変換元である内部のIPアドレスと変換先である外部のIPアドレスの対応関係をNATテーブルで管理
- プライベートIPアドレスとグローバルIPアドレスを1対1で変換してしまうので, ルーターが保持するグローバルIPアドレスの数しか複数端末が同時にインターネットへ接続できないという問題がある(→NAPTの登場)
まず基本として, プライベートIPアドレスのままではLAN内にある端末からインターネットにあるサーバーにアクセスできません. インターネットを介した通信を実現するにあたって, ローカルのデバイス目線だと
- ルーターが, 送信元のプライベートIPアドレス(内部のIPアドレス)をグローバルIPアドレス(外部のIPアドレス)に書き換えて送信
- 宛先のサーバーからは, そのグローバルIPアドレスを持つ端末が送信元に見えるかたちで通信のやり取り
- サーバーからの応答を受け取ったルーターは, 宛先のグローバルIPアドレスをNATテーブルに従ってプライベートIPアドレスに再変換
sequenceDiagram
participant A AS PC<br>192.168.10.1
participant B AS NATルーター<br>221.220.123.45
participant C AS github.com<br>192.30.255.112
A->>B: 192.168.10.1から<br>192.30.255.112へ
B->>B: 発信元を<br>221.220.123.45へ変換
rect rgb(128, 128, 128)
note right of B: Internet
B->>C: 221.220.123.45から<br>192.30.255.112へ
C->>B: 192.30.255.112から<br>221.220.123.45へ
end
B->>B: レスポンス宛先を<br>192.168.10.1へ変換
B->>A: 192.30.255.112から<br>192.168.10.1へ
通信時にIPアドレスが書き換えられるので, 外部ネットワークに対して内部ネットワークを隠蔽できるという特徴があります. またLAN内にある端末には外部ネットワークから直接アクセスできなくなるのでセキュリティーを高められます. そのため, プライベートIPアドレスがバレてしまっても特段問題はありません.
Network Address and Port Translation
Def: Network Address and Port Translation
- NAPTはLAN内にある端末のプライベートIPアドレスと送信元ポート番号を, ルーターが持つ1つのグローバルIPアドレスと適当なポート番号に書き換える仕組みのこと
- ポート番号は他の通信と重ならないように割り当てる
例としてGlobal IP address 202.10.101.11をもつ同一LAN内に以下の2つの端末とNAPTルーター以下のような形で存在するとする
- NAPTルーター: 192.168.10.1
- 端末 A: 192.168.10.2, GitHub.comへアクセスしたい
- 端末 B: 192.168.10.3, Google.comへアクセスしたい
NATは, あくまでもプライベートアドレスとグローバルアドレスを1対1で変換するものなので, 同時にアクセスしたい場合は端末の数だけグローバルアドレスが必要になる. NAPTはプライベートアドレス端末で利用しているTCP/UDPのポート番号理利用して, ルーターが持つ1つのグローバルIPアドレスと適当なポート番号に書き換えることで同じ一つのグローバルアドレスを使いながら, 同時に複数のプライベートアドレス端末からの通信を実現します.
ネットワークアドレスの変換例
端末 | 変換前Private IP Address | Global IP Address | Port | NAPTからの送信元 | アクセス先 |
---|---|---|---|---|---|
端末 A | 192.168.10.2 | 202.10.101.11 | 20000 | 202.10.101.11:20000 | GitHub.com |
端末 B | 192.168.10.3 | 202.10.101.11 | 20001 | 202.10.101.11:20001 | Google.com |
NAPTではプライベートIPアドレス及びそのポート番号とグローバルIPアドレス及びそのポート番号の対応を管理することでIPマスカレード機能を実現しています.
---
title: NAPT
---
classDiagram
class Terminal_A
Terminal_A : Local IP 192.168.10.2
Terminal_A : Port 2000
Terminal_A : アクセス先 GitHub.com
class Terminal_B
Terminal_B : Local IP 192.168.10.3
Terminal_B : Port 2000
Terminal_B : アクセス先 Google.com
class NAPT
NAPT: Local IP 192.168.10.1
NAPT: Global IP 202.10.101.11
note for NAPT "以下のようにNAPTテーブルを保持<br>(Local IP & Port)	:	(Global IP&Port)<br>192.168.10.2.2000: 202.10.101.11.20000<br>192.168.10.3.2000: 202.10.101.11.20001"
Terminal_A <--> NAPT
Terminal_B <--> NAPT
NAPT <--> Github: 送信元を202.10.101.11.20000として通信
NAPT <--> Google: 送信元を202.10.101.11.20001として通信
IPアドレスのクラス
IPアドレスは, クラスA, クラスB, クラスC, クラスD, クラスEの5つのアドレスクラスに分類されます. これらのクラスでは以下の項目が定義されています:
- ネットワーク部とホスト部の範囲
- アドレス範囲
- 用途
クラス | アドレス範囲 | 定義 | 用途 |
---|---|---|---|
クラスA | 0.0.0.0 ~ 127.255.255.255 | ネットワーク部 (8bit) ホスト部 (24bit ) | 大規模ネットワークでの使用 |
クラスB | 128.0.0.0 ~ 191.255.255.255 | ネットワーク部 (16bit) ホスト部 (16bit) | 中規模ネットワークでの使用 |
クラスC | 192.0.0.0 ~ 223.255.255.255 | ネットワーク部 (24bit) ホスト部 (8bit) 192.168.10.100 | 小規模ネットワークでの使用 |
クラスD | 224.0.0.0 ~ 239.255.255.255 | 下位28bitがマルチキャストグループID | マルチキャスト用のアドレス |
クラスE | 240.0.0.0 ~ 255.255.255.255 | 現在、割り当てが定義されていない | 実験用のアドレス |
- ネットワーク部が小さいほど, ホスト部が大きくなるので大きなネットワークになる
- 例: クラスCではホスト部が8bitなので, $256 - 2 = 254$ 個のIPアドレスのみネットワーク内で割り当てることができる
使用禁止されているアドレス
自分自身を表すループバックアドレスとして, IPv4では一般に 127.0.0.1
を用いるが実際には 127.0.0.0/8
のネットワーク番号を持つIPアドレスはクラスの関係上すべてループバックアドレスとして使用できてしまいます. そのため, 127.0.0.0/8
はネットワークアドレスとして使用禁止されているIPアドレスと事実上なっています. なお, IPv6では ::1
がループバックアドレスが定義されており, IPv4での無駄が改善されています.
IPv4
IPアドレスには, 32 bitで表現される「IPv4」と128 bitで表現される「IPv6」の2種類があります. 従来から用いられているIPv4の構造は基本的には次のような構造になっています:
ネットワーク部とホスト部の関係
サブネットマスク: ネットワーク部とホスト部の境目
IPアドレスにおいてネットワークアドレスに割り当てるbit数を定義するために使われるのが, サブネットマスクという32 bitの数値です. サブネットマスクには, 以下のような3つの表記方法があります 192.168.10.100
- CIDR表記, アドレスプレフィックス表記 :
/24
- 10進数表記:
255.255.255.
- 2進数表記:
11111111.11111111.11111111.00000000
Def: サブネット
サブネットは, クラスA, B, Cのネットワークを複数の小さなネットワークに分割したネットワークのこと. IPアドレスを構成するネットワーク部とホスト部のうち、ホスト部のビットをサブネット部として使用することにより, IPアドレスを無駄なく使うことを目的にサブネットは活用されます.
Problem 1
192.168.0.0/23(サブネットマスク255.255.254.0)のIPv4ネットワークにおいて, ホストとして使用できるアドレスの個数の上限はいくつか?
解答
IPv4アドレスは32 bitであり,/23
は先頭から23 bit目までがネットワークアドレスであることを表しているので,
$32 - 23 = 9$ bitがホストアドレスに割り当てられるbit数. 9 bitで表現できる数は
ただし, 000000000
と111111111
はそれぞれネットワークアドレス, ブロードキャストアドレスとして予約されているため
ホストアドレスとして割り当てることはできないので, 510個が答えとなる.
Problem 2
クラスBのIPアドレスで, サブネットマスクが16進数の FFFFFF80 である場合,利用可能なホスト数は最大幾つか?
解答
FFFFFF80を2進数と10進数展開すると,
1
2
3
4
5
# 10進数
255.255.255.128
# 2進数
11111111.11111111.11111111.10000000
従って, ホスト部は $2^7 - 2 = 126$のアドレス数が利用可能.
Problem 3
ネットワークに接続されているホストのIPアドレスが212.62.31.90で, サブネットマスクが255.255.255.224のときのホストアドレスを10進数でこたえよ
解答
サブネットマスクが255.255.255.224なので下位5 bitがホストアドレスとわかる.
従って, 90を2進数で表現すると 01011010
なので 11010
, つまり 26がホストアドレスとわかる.
ネットワークアドレスの集約
Def: ルート集約
複数のネットワークアドレスを1つにまとめることをルート集約(経路集約, スーパーネット化)という. 複数のIPアドレスを2進数表記にしたときに, 共通しているビット列の位置までサブネットマスクを左にずらすことでルート集約を行うことができる.
ネットワークの規模が大きくなって, サブネットワークの数が増えてくると, ルーティングテーブルに登録するネットワーク数も多くなり, 多くのメモリを必要とします. ルート集約を行うと複数のネットワークアドレスを1つのネットワークアドレスに集約して対向側のルータへ通知することができるため, ルーティングアップデートで伝える情報が減り, 収束時間を短縮することも可能になるというメリットがあります.
このネットワークの集約を可能にした技術のことがCIDRです.
Def: CIDR
インターネットの黎明期に使用されていたアドレスクラスの概念を廃止し, ネットワークアドレス部を1ビット単位の任意のビット長で割り当て可能にした仕組みのこと. 別名「クラスレスアドレッシング」とも呼ばれる.
CIDRのおかげで, アドレス空間の細分化や複数のネットワークの集約化を実現することができている.
CIDRによって, 例えば 200.0.0.0/24 ~ 200.0.7.0/24
の8つのネットワークを, 1つのネットワークに集約をして 200.0.0.0/21
として扱うことができます. 例えば401個のホストを同じネットワークで管理したいとき, クラスBのネットワークを付与するのではなく, 必要としているIPアドレスの数と同じくらいの数となるよう, 連続する複数のクラスCのネットワークを1つのネットワークとして割り当てれば(= 2つのクラスCを集約する), IPアドレス空間を有効利用できるようになります.
Problem: ネットワークスペシャリスト試験令和4年春期 問9
IPv4アドレスが 192.168.10.0/24~192.168.58.0/24 のネットワークを対象に経路を集約するとき,集約した経路のネットワークアドレスのビット数がもっとも多くなるIPアドレス形式はなにか?
解答
経路の集約をするには, それぞれのネットワークのIPアドレスを2進数にして比べた時に, 上位から数えた共通部分の最大長をアドレスプレフィックスとして設定します.
1
2
3
4
5
#192.168.10.0/24
11000000 10101000 00001010 00000000
#192.168.58.0/24
11000000 10101000 00111010 00000000
共通部分は先頭から 18 bit目までなので, これをアドレスプレフィックスとして経路の集約をすることで使用可能なホストアドレス数を最大化することができます.
したがって 192.168.0.0/18
が解答となります.
IPアドレスの設定
あなたは, 自分の所属する部署のネットワーク管理者である. 全社のネットワークを管理する情報システム部門の担当者に,「あなたが管理する部署は, 192.168.10.0/24
のIPアドレスを使って下さい」と言われた. 以下の選択肢にあるIPアドレスのうち, 部署のマシンに割り当ててよいIPアドレスを一つ選びなさい.
- 192.168.10.0
- 192.168.24.0
- 192.168.10.100
- 192.168.10.255
- 192.168.24.100
解答
192.168.10.0/24
のIPアドレスの意味は
192.168.10.0
はネットワークアドレス/
の後ろの24
はサブネットマスクのビット数
従って, 192.168.10.0/24
で表されるネットワークは, 192.168.10.0~192.168.10.255
というIPアドレス群であることがわかります.
- 192.168.10.0はネットワークアドレス
- 192.168.10.255はブロードキャストアドレス
であるため, この二つはマシンに割り当てられません. 従って, 選択肢のうち割当可能なアドレスは192.168.10.100
となります.
予約済みIPアドレス: ネットワークアドレス, ブロードキャストアドレス, ループバックアドレス
IPアドレスには, コンピュータなどのホストに割り当てられない, 特別な用途で使用するものがあります.
- ネットワークアドレス: ホスト部の bit が全て 0 のアドレス
- ブロードキャストアドレス: ホスト部の bit が全て 1 のアドレス
- ループバックアドレス:
127.0.0.1
のアドレス
が予約済みIPアドレスです.
ネットワークアドレス
Def: ネットワークアドレス
ネットワークそのものを表すアドレスをネットワークアドレスという.
ネットワークアドレスは, ホスト部の2進数のビットが全て 0
となっている.
ブロードキャストアドレス
Def: ブロードキャストアドレス
同じネットワークに属する全てのホストにパケットを一斉送信するためのアドレスをブロードキャストアドレスという.
ブロードキャストアドレスはホスト部のビットが全て 1
となっている.
ループバックアドレス
Def: ループバックアドレス
ループバックアドレスは、自分自身を示す仮想的なIPアドレスのこと.
ネットワークアドレスとしても使用禁止とされているネットワークの127.0.0.0/8
のネットワークで、127.0.0.1
のアドレスのことをループバックアドレスとして予約されている.
IPv6の場合は ::1(0000:0000:0000:0000:0000:0000:0000:0001)
となる.
ループバックアドレスは自分自身のサービスが動作しているかどうかを確認したり, 自分自身のコンピュータ上で動作しているサービスへ接続したりする場合に利用します. また, ループバックアドレスのIPアドレスには、「localhost」という単純なホスト名が割り当てられています.
なので, Jekyll
やJupyter
といったサービスをローカルで立ち上げると
1
http://127.0.0.1:port/
とServer addressが表示されますが, localhost:port
に対してアクセスしても同じサービスを利用することが出来ます.
References
(注意:GitHub Accountが必要となります)