0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

情報通信ネットワーク入門:IPアドレス、ARP、NATを整理する

0
Last updated at Posted at 2026-10-30

前回:EthernetとWi-Fiの仕組みを整理する

第3回は、IPアドレスと、異なるネットワークへデータを届ける仕組みについて学んだ。第2回のMACアドレスが同じL2ネットワーク内の転送に使われるのに対し、IPアドレスはネットワークを越えた通信の宛先を表す。

IPとIPアドレス

IP(Internet Protocol)は、IPアドレスを使ってパケットを宛先へ運ぶためのプロトコルだ。TCP/IPではインターネット層、OSI参照モデルではネットワーク層にあたる。

IPv4アドレスは32ビットで、8ビットずつ4つに分け、192.168.1.1 のように10進数で表す。各部分の値は0から255までだ。32ビットで表せる組み合わせは約43億個あるが、すべてを一般の端末に割り当てられるわけではない。

IPv4パケットのヘッダには、送信元と宛先のIPアドレスのほか、パケットの長さや上位プロトコルの種類などが入る。TTLはパケットが転送されるたびに減らされ、通常はルータを通過するごとに1減る。TTLが0になるとパケットは破棄されるため、経路を回り続けるパケットを抑えられる。

宛先の種類

IP通信の宛先は、送る相手の範囲によって分けられる。

  • ユニキャスト:特定の1つの宛先に送る。
  • ブロードキャスト:同じネットワーク内の全ホストに向けて送る。IPv4で使われる。
  • マルチキャスト:特定のグループに参加している複数の宛先に送る。

IPv4のマルチキャストには 224.0.0.0/4 の範囲が使われる。IPv6ではブロードキャストを使わず、マルチキャストなどを利用する。

CIDRとサブネットマスク

IPアドレスだけを見ても、どこまでが同じネットワークに属するのかは分からない。そこで、IPv4アドレスの32ビットを「ネットワークを表す部分」と「その中のホストを表す部分」に分ける。

/24 は何を表すのか

192.168.123.10/24 という表記を例にする。スラッシュの後ろの 24 はプレフィックス長と呼ばれ、先頭から24ビットがネットワーク部分であることを表す。残りの8ビットがホスト部分だ。

IPv4アドレスは、ドットで区切られたそれぞれが8ビットなので、/24 では次のように分かれる。

192.168.123   | 10
ネットワーク部分 | ホスト部分
    24ビット   |   8ビット

この例では、192.168.123 がネットワーク部分、最後の 10 がホスト部分にあたる。192.168.123.20/24 もネットワーク部分が同じなので、同じサブネットのアドレスだ。一方、192.168.124.20/24 はネットワーク部分が異なる。

CIDR(Classless Inter-Domain Routing)は、クラスに依存せずプレフィックスを使ってアドレスを割り当て、経路を集約する仕組みだ。ここで扱っている「アドレス/プレフィックス長」という書き方をCIDR表記という。以前のクラスフルな方式ではクラスA、B、Cなどで区切りが決まっていたが、CIDRでは /24 以外の長さも指定できる。

サブネットマスクとの対応

サブネットマスクも、ネットワーク部分とホスト部分の境界を示す。ネットワーク部分のビットを 1、ホスト部分のビットを 0 にした32ビットの値だ。

/24 の場合は、先頭24ビットを 1、残り8ビットを 0 にする。これを8ビットずつ10進数に直すと 255.255.255.0 になる。

2進数:  11111111.11111111.11111111.00000000
10進数:      255.     255.     255.       0

つまり、192.168.123.10/24 と「IPアドレス 192.168.123.10、サブネットマスク 255.255.255.0」は、同じ境界を表している。

/24 に含まれるアドレス

192.168.123.10/24 のホスト部分は8ビットなので、取り得る組み合わせは 2^8 = 256 個だ。ネットワーク全体の範囲は 192.168.123.0/24 と表せる。

用途 アドレス
ネットワークアドレス 192.168.123.0
通常ホストに割り当てる範囲 192.168.123.1 〜 192.168.123.254
ブロードキャストアドレス 192.168.123.255

ネットワークアドレスはホスト部分がすべて 0 のアドレスで、そのサブネットを表す。ブロードキャストアドレスはホスト部分がすべて 1 のアドレスで、そのサブネット全体に向けた通信に使う。通常のIPv4サブネットではこの2つを除くため、上の例でホストに割り当てられる数は 256 - 2 = 254 個になる。

/26 でネットワークを小さく分ける

プレフィックス長を /24 から /26 にすると、ネットワーク部分が2ビット増え、ホスト部分は6ビットになる。その結果、1つのサブネットに含まれるアドレスは 2^6 = 64 個だ。/26 のサブネットマスクは 255.255.255.192 になる。

2進数:  11111111.11111111.11111111.11000000
10進数:      255.     255.     255.     192

たとえば 192.168.123.70/26 の場合、最後の部分の 70 は 64 〜 127 の範囲に入る。このサブネットは次のとおりだ。

  • ネットワークアドレス:192.168.123.64
  • 通常ホストに割り当てる範囲:192.168.123.65 〜 192.168.123.126(62個)
  • ブロードキャストアドレス:192.168.123.127

/24 の 192.168.123.0 〜 192.168.123.255 を /26 に分けると、最後の部分が 0、64、128、192 から始まる4つのサブネットになる。プレフィックス長が長くなるほど、1つのサブネットに含まれるアドレスは少なくなる。

アドレス数から2を引く数え方には例外もある。たとえば /31 は、対応する機器間のポイントツーポイント接続で2つのアドレスを両端に割り当てられる。/32 は1つのアドレスを表す。

同じネットワークかどうかの判断

端末は自分のIPアドレスとサブネットマスクを使って、宛先が同じサブネットにあるか判断する。たとえば自分が 192.168.123.10/24 のとき、192.168.123.20 は同じサブネットなので直接届けようとする。192.168.124.20 は別のサブネットなので、通常はデフォルトゲートウェイに渡す。

ネットワーク部分を計算するには、IPアドレスとサブネットマスクの各ビットについて、両方が 1 の場合だけ結果を 1 にするAND演算を使ってネットワーク部分を取り出す。次の例では、最後の部分が 10 と 20 のどちらでも、マスクとのANDの結果は 0 になる。

192.168.123.10  AND 255.255.255.0 = 192.168.123.0
192.168.123.20  AND 255.255.255.0 = 192.168.123.0
192.168.124.20  AND 255.255.255.0 = 192.168.124.0

取り出したネットワーク部分を比べると、最初の2つは同じサブネット、3つ目は別のサブネットだと分かる。実際の転送先は端末のルーティングテーブルに従って決まるため、VPNや個別の経路設定がある場合は上の例と異なることもある。別ネットワークへ渡す際に使うMACアドレスについては、次のARPの話につながる。

ARPでMACアドレスを調べる

IPv4のEthernetネットワークでは、同じリンク上の相手へフレームを送るために、相手のIPアドレスに対応するMACアドレスが必要になる。これを調べる仕組みがARP(Address Resolution Protocol)だ。

たとえば、192.168.1.1 の端末が同じネットワークの 192.168.1.2 に送りたい場合、次のようにやり取りする。

  1. 送信元が 192.168.1.2 のMACアドレスを尋ねるARPリクエストをブロードキャストする。
  2. 対象の端末が、自分のMACアドレスをARPリプライで返す。
  3. 送信元は得られた対応をARPキャッシュに保存し、フレームの宛先に使う。

宛先が別のネットワークにある場合、送信元がARPで調べるのは通常、最終的な宛先ではなくデフォルトゲートウェイのMACアドレスだ。IPパケットをゲートウェイへ渡し、そこから先はルータが転送する。IPv6ではARPの代わりに近隣探索の仕組みを使う。

macOSでは、次のコマンドでデフォルトゲートウェイとARPテーブルを確認できる。

route -n get default
arp -an

最初のコマンドで表示される gateway のIPv4アドレスと、ARPテーブルにあるアドレスを照らし合わせると、対応するMACアドレスを確認できる。ARPテーブルは通信の状況によって変化するため、確認時に該当する項目がない場合もある。

グローバルアドレスとプライベートアドレス

グローバルIPアドレスは、インターネット上での通信に使われるアドレスだ。アドレス資源は階層的に管理されており、地域ごとの管理組織やISPなどを通じて割り当てられる。

IPv4のプライベートアドレスには、次の3つの範囲がある。

CIDR表記 アドレスの範囲
10.0.0.0/8 10.0.0.0 〜 10.255.255.255
172.16.0.0/12 172.16.0.0 〜 172.31.255.255
192.168.0.0/16 192.168.0.0 〜 192.168.255.255

プライベートアドレスは家庭や組織の内部で使え、別々のネットワークで同じ値を利用できる。一方、インターネット上ではそのまま経路制御されない。なお、プライベートアドレス以外にも、ループバックなど特別な用途のアドレスがある。

たとえば端末のアドレスが 172.20.10.5/16 なら、172.16.0.0/12 の範囲に含まれるのでプライベートアドレスだ。ここでの /12 はプライベートアドレスとして予約された範囲を示し、端末の /16 は接続先で設定されたサブネットの大きさを示す。/16 のネットワークアドレスは 172.20.0.0 になる。

NATとNAPT

NAT(Network Address Translation)はIPアドレスを変換する仕組みだ。たとえば、ルータが内部のプライベートIPv4アドレスを外部向けのグローバルIPv4アドレスに変換する。変換の対応関係を保持し、戻ってきたパケットも元の宛先に合わせて変換する。

NAPT(Network Address Port Translation)は、IPアドレスに加えてポート番号も使って通信を区別する。たとえば複数の端末が同じグローバルIPv4アドレスを共有していても、ルータが変換後のポート番号を区別し、応答をそれぞれの端末に戻せる。

NATやNAPTを使っていても、公開設定やファイアウォールのルールは別に考える必要がある。どの通信を外部に許可するかを確認することが大切だ。

IPv6の表記とアドレス

IPv6アドレスは128ビットで、16ビットずつ8つに分けて16進数で表す。たとえば次のように書く。

2001:0db8:0ab0:0000:0000:1234:5678:0000

各ブロックの先頭の0は省略でき、連続する0だけのブロックは :: にまとめられる。ただし :: は、どこに何個の0が省略されたか判別できるよう、1つのアドレスで1回だけ使う。

2001:db8:ab0::1234:5678:0

IPv6のユニキャストアドレスには、インターネット上で使うグローバルユニキャスト、内部での利用を想定したユニークローカル、同じリンク内で使うリンクローカルなどがある。リンクローカルアドレスは fe80::/10 の範囲だ。

たとえば fe80::1%en0 のような表記では、%en0 は使用するインターフェイスを示すゾーン識別子で、IPv6アドレスそのものの128ビットには含まれない。同じリンクローカルアドレスの範囲を複数のインターフェイスで使えるため、どのリンクを使うかを区別する。

IPv6の基本ヘッダは40バイトで、送信元・宛先アドレス、次のヘッダの種類、Hop Limitなどを持つ。Hop LimitはIPv4のTTLと同様に、転送を続けられる範囲を制限する。

今回のまとめ

IPアドレスはネットワークを越えた通信の宛先を表し、CIDRとサブネットマスクはネットワークの範囲を示す。IPv4のEthernetでは、同じリンク上で次に渡す相手のMACアドレスをARPで調べる。プライベートIPv4アドレスから外部へ接続する際には、NATやNAPTが使われることもある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?