Skip to content
Published on

[コンピュータネットワーク] 12. IPプロトコル:データグラムとアドレス体系

Authors

IPプロトコル:データグラムとアドレス体系

IP(Internet Protocol)はインターネットネットワーク層の中核プロトコルです。すべてのインターネット機器はIPプロトコルを実行する必要があり、これはインターネットを一つに結びつける接着剤の役割を果たします。

この記事では、IPv4データグラム形式、IPフラグメンテーション、アドレス体系(サブネット、CIDR、DHCP)、NAT、ICMP、そしてIPv6の登場と移行メカニズムを見ていきます。


1. IPv4データグラム形式

IPv4データグラムはヘッダとデータ(ペイロード)で構成されます。

IPv4データグラムヘッダ(20バイト基本)
======================================

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source IP Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination IP Address                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options(可変長)                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

主要ヘッダフィールド

フィールドサイズ説明
Version4ビットIPバージョン(IPv4 = 4)
IHL4ビットヘッダ長(32ビットワード単位)
Total Length16ビットデータグラム全体の長さ(バイト)
TTL8ビット残りホップ数、0になると破棄
Protocol8ビット上位層プロトコル(TCP=6, UDP=17)
Header Checksum16ビットヘッダエラー検出

2. IPフラグメンテーションと再組立

2.1 フラグメンテーションが必要な理由

各リンクには**MTU(Maximum Transmission Unit)**があり、送信可能な最大フレームサイズが制限されます。IPデータグラムがMTUより大きい場合、フラグメンテーション(分割)が必要です。

IPフラグメンテーションの例
===========================

元のデータグラム:4000バイト(ヘッダ20 + データ3980)
リンクMTU:1500バイト

フラグメント1:[ヘッダ20] [データ1480] = 1500バイト
  ID=x, MF=1, Offset=0

フラグメント2:[ヘッダ20] [データ1480] = 1500バイト
  ID=x, MF=1, Offset=185 (1480/8)

フラグメント3:[ヘッダ20] [データ1020] = 1040バイト
  ID=x, MF=0, Offset=370 (2960/8)

2.2 再組立

IPフラグメンテーションの再組立は中間ルータではなく、最終宛先ホストでのみ実行されます。これはフラグメントが異なる経路で到着する可能性があるためです。

  • Identification:同じ元のデータグラムのフラグメントであることを識別
  • MF(More Fragments)フラグ:後にさらにフラグメントがあるかを表示
  • Fragment Offset:元のデータにおける位置(8バイト単位)

3. IPv4アドレス体系

3.1 IPアドレスの基本構造

IPv4アドレスは32ビットで構成され、ドット付き10進数(dotted decimal notation)で表記します。

IPアドレス表記
===============

2進数:  11000000 10101000 00000001 00000001
10進数: 192.168.1.1

32ビット = 約43億個のユニークアドレス

3.2 サブネット(Subnet)

サブネットは、ルータを経由せずに互いに直接通信できるデバイスのネットワークです。

サブネットの例
===============

          223.1.1.0/24 サブネット
         +-----------------------+
         |                       |
   223.1.1.1  223.1.1.2  223.1.1.3
    [ホスト]   [ホスト]    [ルータ]
                              |
                         223.1.2.9
                              |
         +-----------------------+
         |                       |
   223.1.2.1  223.1.2.2  223.1.2.3
         223.1.2.0/24 サブネット

3.3 CIDR(Classless Inter-Domain Routing)

CIDRはクラスベースのアドレス体系の非効率性を解決します。サブネットマスクの長さを自由に指定してアドレス空間を効率的に活用します。

CIDR表記法
============

200.23.16.0/20

アドレス:    200.23.16.0
サブネット部分:200.23.0001|0000.00000000
                          ^20ビット

このサブネットに含まれるホスト範囲:
  200.23.16.0 ~ 200.23.31.255
  合計 2^12 = 4096個のアドレス

3.4 クラスベースのアドレス(歴史的参考)

CIDR以前は、A、B、Cクラスでアドレスを分類していました。

IPアドレスクラス
=================

クラスA:0xxxxxxx | 24ビットホスト  (2^24 = 約1600万ホスト)
クラスB:10xxxxxx xxxxxxxx | 16ビット(2^16 = 65,536ホスト)
クラスC:110xxxxx xxxxxxxx xxxxxxxx | 8ビット(2^8 = 256ホスト)

問題点:クラスBは大きすぎ、クラスCは小さすぎる
  --> アドレス空間の無駄 --> CIDR導入

4. DHCP(Dynamic Host Configuration Protocol)

4.1 DHCPの役割

DHCPは、ホストがネットワークに接続する際にIPアドレス、サブネットマスク、デフォルトゲートウェイ、DNSサーバアドレスを自動的に割り当てるプロトコルです。

4.2 DHCP動作過程

DHCPは4段階のプロセス(DORA)で動作します。

DHCP 4段階プロセス(DORA)
============================

クライアント                        DHCPサーバ
    |                                    |
    |--- 1. DHCP Discover(ブロードキャスト)-->|
    |    src: 0.0.0.0                    |
    |    dst: 255.255.255.255            |
    |                                    |
    |<-- 2. DHCP Offer ------------------|
    |    提案IP:192.168.1.100           |
    |    リース時間:3600秒              |
    |                                    |
    |--- 3. DHCP Request(ブロードキャスト)->|
    |    要求IP:192.168.1.100           |
    |                                    |
    |<-- 4. DHCP ACK -------------------|
    |    確定IP:192.168.1.100           |
    |    サブネット:255.255.255.0       |
    |    ゲートウェイ:192.168.1.1       |
    |    DNS:8.8.8.8                    |
    |                                    |

5. NAT(Network Address Translation)

5.1 NATの必要性

IPv4アドレス枯渇問題を解決するためにNATが導入されました。NATを使用すると、1つのグローバルIPアドレスで複数の内部ホストがインターネットに接続できます。

5.2 NATの動作原理

NAT動作
=========

内部ネットワーク(プライベートIP)   NATルータ           外部インターネット
10.0.0.0/24                        138.76.29.7

[10.0.0.1:3345] ---->  [138.76.29.7:5001] ----> Webサーバ
[10.0.0.2:2890] ---->  [138.76.29.7:5002] ----> Webサーバ
[10.0.0.3:1789] ---->  [138.76.29.7:5003] ----> Webサーバ

NAT変換テーブル:
+-------------------+----------------------+
| WAN側             | LAN側                |
+-------------------+----------------------+
| 138.76.29.7:5001  | 10.0.0.1:3345        |
| 138.76.29.7:5002  | 10.0.0.2:2890        |
| 138.76.29.7:5003  | 10.0.0.3:1789        |
+-------------------+----------------------+

5.3 NATの議論

NATに対してはいくつかの批判があります。

  • ポート番号はプロセス識別用途なのにホスト識別に使用するのはレイヤ違反
  • エンドツーエンド(end-to-end)原則に違反
  • サーバ運用時にポートフォワーディング設定が必要
  • P2Pアプリケーションで接続問題が発生

6. ICMP(Internet Control Message Protocol)

6.1 ICMPの役割

ICMPはネットワーク機器間でエラー報告と情報交換を行うプロトコルです。IPデータグラムのペイロードとしてカプセル化されて送信されます。

6.2 主要ICMPメッセージ

ICMPメッセージタイプ
=====================

タイプ コード 説明
----  ----  ----------------------------------
  0    0    Echo Reply(ping応答)
  3    0    Destination Network Unreachable
  3    1    Destination Host Unreachable
  3    3    Destination Port Unreachable
  4    0    Source Quench(輻輳制御)
  8    0    Echo Request(pingリクエスト)
 11    0    TTL Expired(tracerouteで使用)
 12    0    IP Header Bad

6.3 活用例:Traceroute

TracerouteはTTL値を1から順次増加させながらUDPパケットを送信します。各ルータでTTLが0になるとICMP TTL Expiredメッセージが返され、経路上のルータを把握します。

Traceroute動作
================

ホスト --> TTL=1 --> [R1] --> ICMP TTL Expired返却
ホスト --> TTL=2 --> [R1] --> [R2] --> ICMP TTL Expired返却
ホスト --> TTL=3 --> [R1] --> [R2] --> [R3] --> ICMP TTL Expired返却
ホスト --> TTL=4 --> [R1] --> [R2] --> [R3] --> [宛先] --> ICMP Port Unreachable

7. IPv6

7.1 IPv6の登場背景

IPv4アドレス空間(約43億)が枯渇したため、IPv6が開発されました。IPv6は128ビットアドレスを使用し、事実上無限のアドレス空間を提供します。

7.2 IPv6データグラム形式

IPv6ヘッダ(40バイト固定)
===========================

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class |           Flow Label                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Payload Length        |  Next Header  |   Hop Limit   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                       Source Address                           |
+                       (128 bits)                               +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                    Destination Address                         |
+                       (128 bits)                               +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

7.3 IPv4からの主要な変更点

IPv4 vs IPv6 比較
==================

項目              | IPv4              | IPv6
------------------+-------------------+--------------------
アドレスサイズ    | 32ビット          | 128ビット
ヘッダサイズ      | 可変(20~60バイト)| 固定40バイト
フラグメンテーション| ルータで可能     | 送信元でのみ可能
チェックサム      | あり              | なし(上位層に委任)
オプション        | ヘッダに含む      | 拡張ヘッダに分離
ブロードキャスト  | サポート          | マルチキャストに置換

7.4 IPv4からIPv6への移行

世界中のすべての機器を一度に交換することはできないため、段階的な移行方法が使用されます。

トンネリング(Tunneling):IPv6データグラムをIPv4データグラムのペイロードとしてカプセル化し、IPv4ネットワークを通過できるようにします。

トンネリング動作
==================

[IPv6] --> [IPv6/IPv4] ===== IPv4トンネル ===== [IPv4/IPv6] --> [IPv6]
 ホストA    トンネル入口    (IPv6をIPv4に        トンネル出口    ホストB
                             カプセル化して転送)

元のパケット:[IPv6ヘッダ][データ]
トンネル内部:[IPv4ヘッダ][IPv6ヘッダ][データ]
  IPv4のProtocolフィールド = 41(IPv6)

8. まとめ

概念核心内容
IPv4ヘッダ20バイト基本、TTL/Protocol/Checksumを含む
フラグメンテーションMTU超過時に分割、宛先でのみ再組立
CIDR柔軟なサブネットマスクでアドレス効率性を向上
DHCPIPアドレス自動割当(Discover-Offer-Request-ACK)
NATプライベートIPをグローバルIPに変換、ポート番号でマッピング
ICMPネットワークエラー報告と診断(ping, traceroute)
IPv6128ビットアドレス、固定40バイトヘッダ、フラグメンテーション廃止

次の記事では、ルータが最適経路を見つけるためのルーティングアルゴリズム(Link-State、Distance-Vector)を見ていきます。


参考資料

  • James F. Kurose, Keith W. Ross, "Computer Networking: A Top-Down Approach", 6th Edition, Chapter 4
  • RFC 791 - Internet Protocol (IPv4)
  • RFC 2460 - Internet Protocol Version 6 (IPv6)
  • RFC 2131 - Dynamic Host Configuration Protocol