Mímisbrunnr知恵の泉

← コンピュータネットワーク 一覧

🎓 レベル:基礎 | 重要度:A(必須) 📎 前提:OSI参照モデルとTCP/IPモデル

要点(BLUF)

ビットとドット10進

32ビットを2進で書くと長いので、8ビット(=1オクテット、0〜255)ごとに10進へ変換して並べます。

import ipaddress
ip = ipaddress.IPv4Address("192.168.1.10")
print("decimal :", str(ip))
print("binary  :", format(int(ip), "032b"))

実行結果:

decimal : 192.168.1.10
binary  : 11000000101010000000000100001010

各オクテット 11000000=192 10101000=168 00000001=1 00001010=10 に対応します。

ネットワーク部とホスト部・マスク

アドレス単体では「どこまでがネットワークか」が分かりません。そこでサブネットマスク(連続する1の並び)で境界を示します。

graph LR
  N["ネットワーク部(192.168.1)"]
  H["ホスト部(.10)"]
  N --- H

同じネットワーク部を持つ機器同士は直接(ルータなしで)通信でき、異なればルータ経由になります。この判定こそIPの肝で、次トピックのサブネット計算につながります。

クラスフルアドレス(歴史的区分)

CIDR以前は、先頭ビットでネットワーク規模を固定していました。今は計算の前提知識として押さえます。

クラス先頭既定マスク範囲用途
A0/80.0.0.0〜127.255.255.255大規模
B10/16128.0.0.0〜191.255.255.255中規模
C110/24192.0.0.0〜223.255.255.255小規模
D1110224.0.0.0〜239.255.255.255マルチキャスト
E1111240.0.0.0〜255.255.255.255実験用

現在は**クラスに縛られず任意長マスク(CIDR)**を使いますが、「192.x はもとはクラスC(/24)」という感覚は計算で役立ちます。

プライベートアドレスと特殊アドレス

インターネットで一意である必要があるのは公開アドレスだけ。社内はプライベートアドレスを自由に使い、外向きはNATで変換します(第7章)。

範囲プレフィックス用途
10.0.0.0 〜 10.255.255.25510.0.0.0/8プライベート(大)
172.16.0.0 〜 172.31.255.255172.16.0.0/12プライベート(中)
192.168.0.0 〜 192.168.255.255192.168.0.0/16プライベート(小)
127.0.0.0/8ループバック(自分自身)
169.254.0.0/16リンクローカル(APIPA・DHCP失敗時)
255.255.255.255限定ブロードキャスト
import ipaddress
for s in ["10.1.2.3", "192.168.0.5", "8.8.8.8", "169.254.10.1"]:
    a = ipaddress.IPv4Address(s)
    print(s, "private:", a.is_private, "global:", a.is_global)

実行結果:

10.1.2.3 private: True global: False
192.168.0.5 private: True global: False
8.8.8.8 private: False global: True
169.254.10.1 private: True global: False

なぜ階層アドレスなのか(設計の直観)

MAC(平坦)で世界中の経路を持つと、ルータは全機器のMACを覚える必要があり破綻します。IPは**ネットワーク部で束ねられる(集約できる)**ので、ルータは「このネットワークはあっち」とまとめて1行で扱えます。階層化=集約可能性が、地球規模のルーティングを成立させています。

⚠️ よくある誤解

対応 lab

関連