ネットワーク層の仕事(IPアドレス)

ネットワーク層の仕事

ネットワーク層では、データリンク層以下のプロトコルを利用し、送信元からあて先へ到達するためのネットワークの経路を定義しています。ネットワーク層で使用されるプロトコルで、有名なのがIPとよばれるプロトコルです。IPアドレスを利用してどんなに遠く離れていてもデータを届けることができます。

データ送信を宅配便に例えるなら、ネットワーク層は送信元から宛先まで効率よく配達する役目を担います。効率よく配達を行うために集荷や配送の順番を決めたり、宛先までの最適な道順を決めたり、重い荷物と軽い荷物が合った場合に重い荷物を下に置いたりといったことを行います。これと同じようなことをネットワーク層では行っています。

ネットワーク層といえばIPアドレス

ネットワーク層の中心的プロトコルといえば「IP(internet protocol)」です。IPの通信は宛先を特定するのに「IPアドレス」といわれる固有の値を使用します。IPアドレスは、送信元のノードから通信したい宛先のノードを特定するのに用いるのに使用されます。ネットワークの世界では、このIPアドレスを使って宛先を特定するので当然全世界でユニーク(一意)な値でなければいけません。

ネットワーク層の代表プロトコルであるIP

IPアドレスのバージョンについて

IPアドレスにはIPv4(IPバージョン4)IPv6(IPバージョン6)という2種類が存在します。
現在広く普及しているのはIPv4アドレスですが、インターネットに接続されるノードが爆発的に増加し、IPv4アドレスの数が枯渇してきています。そのため、より多くのIPアドレスを割り振ることができるIPv6への対応が進められています。既に多くのOSやネットワーク機器がIPv6に対応しています。

自分のコンピュータのIPアドレスを調べてみよう。

コンピュータのIPアドレスを調べるにはWindowsの場合はコマンドプロンプトで、MACの場合はターミナルでそれぞれ以下のコマンドを実行します。

  • Windowsの場合

 「ipconfig」

実行結果

C:¥>ipconfig

Windows IP 構成

イーサネット アダプター イーサネット:

   接続固有の DNS サフィックス . . . . .: hoge.jp
   リンクローカル IPv6 アドレス. . . . .: fe80::40e9:8296:4ff9:dfbb%2
   IPv4 アドレス . . . . . . . . . . . .: 192.168.10.1
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 192.168.10.254

「IPv4アドレス」と「リンクローカル IPv6 アドレス」がご自身のIPアドレスになります。

  • MACの場合

 「ifconfig」

実行結果

$ ifconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether xx:xx:xx:xx:xx:xx
	inet6 fe80::bae8:56ff:fe46:a622%en0 prefixlen 64 scopeid 0x4
	inet 192.168.11.2 netmask 0xffffff00 broadcast 192.168.11.255
	nd6 options=1<PERFORMNUD>
	media: autoselect
	status: active
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
	options=60<TSO4,TSO6>
	ether xx:xx:xx:xx:xx:xx
	media: autoselect <full-duplex>
	status: inactive

「inet」がIPv4アドレス、「inet6」がIPv6アドレスになります。

IPv4

IPアドレスの表記方法

IPアドレスは32ビットからなる数値で、実際には2進数として使用されていますが、分かりやすいように1bytes(8bit)ごとに10進数に変換して、「.」(ピリオド)で区切って表記されます。

IPアドレスの書き方

また、IPアドレスは1bytes(8bit)ごとに分けている固まりを左から第1オクテット、第2オクテット、第3オクテット、第4オクテットと呼んでおります。

IPアドレスのオクテット表記

ネットワークアドレスとホストアドレス

IPアドレスは一見数字の羅列だけのように見えるかもしれませんが、「ネットワークアドレス」「ホストアドレス」に分けて考えることができます。

ネットワークアドレスはIPアドレスを構成するビットの中で、それぞれのネットワークを識別する値です。ネットワークアドレスが同一のグループは1つの同じ「ネットワーク」として扱われます。

ネットワークアドレスとホストアドレス

ホストアドレスは1つのネットワーク内で一意の値である必要があります。上図の例では第4オクテット部分の値がホストアドレスになります。このようにネットワークアドレスとホストアドレスの組み合わせにより、1つのIPアドレスになります。

学校の1つのクラス(1組、2組…)を1つのネットワークとすると、そのクラスの一人一人の名前がホストアドレスだと考えれば分かりでしょうか。

学校のクラスでIPアドレスを考えて見る

IPアドレスの中で、どこまでがネットワークアドレスで、どこまでがホストアドレスになるのかを決めるのが、次に説明する「アドレスクラス」「サブネットマスク」になります。

アドレスクラス

アドレスクラスとは、「IPアドレスの中で、どこまでがネットワークアドレスで、どこまでがホストアドレスになるのか取り決めている考え方」です。

アドレスクラスにはAからEまで5つあり、それぞれネットワークアドレスとホストアドレスがどこで分かれるかが決められています。

どのIPアドレスがどのクラスに属しているかを識別するには、先頭から4ビットまでのビット列の組み合わせによって判断できます。

クラスA

クラスAは最上位のビットが「0」で始まり、続く7ビットがネットワークアドレスになります。

IPアドレスのクラスA

先頭が0で、残り7ビットがネットワークアドレスになるので、クラスAのネットワークアドレスは0から127までとなります。ただし0と127については、特定の用途として予約されているため使用できません。したがって実際にネットワークアドレスとして使用できるのは、

1から126までの126個

となります。

つづいてホストアドレスですが、ネットワークアドレスから後ろの部分がホストアドレスになりますので、残りの24ビット

「00000000.00000000.00000000」 ~ 「11111111.11111111.11111111」

までがホストアドレスとなりますので、224 = 16777216個となるのですが、全て0のものと、全て1のものについては、予約済みとなっており使用できません。よってホストアドレスは

16777216 - 2 = 16777214個

となります。

クラスB

クラスBは最上位から2ビットが「10(2進数)」で始まり、続く14ビットがネットワークアドレスになります。

IPアドレスのクラスB

先頭から2ビットが「10」で、残り14ビットですので、クラスBのネットワークアドレスは「128.0」から「191.255」までとなります。

ただし128.0と191.255については、特定の用途として予約されているため使用できません。したがって実際にネットワークアドレスとして使用できるのは、

128.1から191.254までの、16382個となります。

つづいてホストアドレスですが、ネットワークアドレスから後ろの部分がホストアドレスになりますので、残りの16ビット

「00000000.00000000」 ~ 「11111111.11111111」

までがホストアドレスとなりますので、216 = 65536個となるのですが、そのうち、全て0のものと全て1のものについては、予約済みとなっており使用できません。よってホストアドレスは   65536 - 2 = 65534個

となります。

クラスC

クラスCは最上位から3ビットが「110(2進数)」で始まり、続く21ビットがネットワークアドレスになります。

IPアドレスのクラスC

先頭から3ビットが「110」で、残り21ビットですので、クラスCのネットワークアドレスは「192.0.0」から「223.255.255」までとなります。

ただしこれも他のクラスと同様に、「192.0.0」と「223.255.255」については、特定の用途として予約されているため使用できません。したがって実際にネットワークアドレスとして使用できるのは、

192.0.1から223.255.254までの2097150個となります。

つづいてホストアドレスですが、ネットワークアドレスから後ろの部分がホストアドレスになりますので、残りの8ビット

「00000000」 ~ 「11111111」

までがホストアドレスとなりますので、28 = 256個となるのですが、そのうち全て0のものと、全て1のものについては、予約済みとなっており使用できません。よってホストアドレスは

256 - 2 = 254個  となります。

クラスD

クラスDは最上位から4ビットが「1110(2進数)」で始まり、続く28ビットがネットワークアドレスになります。つまり残り全てのビットがネットワークアドレスになります。

IPアドレスのクラスD

このクラスDは特殊な使い方をしていて、IPマルチキャストと呼ばれています。通常IPは1対1の通信を行うのが常識ですが、IPマルチキャストは1対多の通信を行うときに使用されます。マルチキャストは「1:特定のグループ」の通信を行う場合に使用され、ストリーミング配信などに使用されています。通常パソコンなどにクラスDのIPアドレスを付与することはありません。

クラスE

クラスEは最上位から5ビットが「1111」で始まります。

IPアドレスのクラスE

クラスEのIPアドレスは将来の実験用の目的のため実際には使われていません。

以上5つのアドレスクラスをまとめると以下のようになります。

クラス  開始IPアドレス  終了IPアドレス  ネットワークアドレス  ホストアドレス  最大ネットワークアドレス数  最大ホストアドレス数
クラスA 0.0.0.0 127.255.255.255 8ビット 24ビット 124 16777216
クラスB 128.0.0.0 191.255.255.255 16ビット 16ビット 16384 65536
クラスC 192.0.0.0 223.255.255.255 24ビット 8ビット 2097152 256
クラスD 224.0.0.0 239.255.255.255 マルチキャスト用アドレス
クラスE 240.0.0.0 255.255.255.255 実験用アドレス

サブネットマスク

アドレスクラスの概念は、IPアドレスの先頭から数ビットの値によって5つの種類に分けるという概念で
した。アドレスクラスは各クラスごとに使用できるネットワーク数とホスト数が決められています。そのため、たとえばあるネットワークの端末台数が10台しかないのに、別のネットワークでは250台の端末があるような場合、クラスCを利用するかクラスBを利用するか悩むところです。

このようにアドレスクラスを利用すると、実際のネットワークの実情に即したきめ細かいIPアドレス管理が難しい場合があります。そこで新たに考え出された概念が、「サブネット」という概念です。

サブネットを利用すると、アドレスクラスごとのホストアドレスの範囲をさらに細かく分割することができます。そのためIPアドレスの無駄を無くすことができます。このサブネットワークを理解するために必須の知識が「ネットマスク」です。

ネットマスク

Windowsで設定されている「ネットマスク」を調べるコマンドはIPアドレスを調べる時に使用した「ipconfig」コマンドを使用します。

C:¥>ipconfig

Windows IP 構成

イーサネット アダプター イーサネット:

   接続固有の DNS サフィックス . . . . .: hoge.jp
   リンクローカル IPv6 アドレス. . . . .: fe80::40e9:8296:4ff9:dfbb%2
   IPv4 アドレス . . . . . . . . . . . .: 10.1.1.15
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 10.1.1.254

上記結果の場合、「255.255.255.0」がネットマスクです。ネットマスクはIPアドレスと同じように、32ビットで表される情報で、「1」
で表される部分がネットワークアドレスを、「0」で表される部分がホストアドレスを意味します。

アドレスクラスの場合、「10.1.1.15」はクラスAのアドレスなので、ネットワークアドレスは「10.0.0.0」でホストアドレスが「0.1.1.15」となるのですが、ネットマスクを用いた場合はどのようになるのでしょうか。

ネットマスクの計算

IPアドレスとネットマスクの情報から、ネットワークアドレスとホストアドレスを取り出すには、AND演算を用います。

AND演算とは2つの値のうち、両方の値が「1」であれば、答えは必ず「1」になり、どちらかが「0」の場合は答えは必ず「0」になる演算方法です。

ネットマスク計算

これを踏まえて以下のIPアドレスとネットマスクからネットワークアドレスとホストアドレスを取り出してみます。

IPアドレス : 192.168.10.1
ネットマスク : 255.255.255.0

まずそれぞれを2進数に変換します。

ネットマスクの計算手順

ネットワークアドレスを取り出してみましょう。ネットワークアドレスを取り出すには、IPアドレスとネットマスクを単純にAND演算すれば出てきます。

ネットマスクの計算手順

結果を10進数に直すと「192.168.10.0」となり、これがネットワークアドレスになります。

続いてホストアドレスを取り出してみましょう。ホストアドレスを取り出すにはIPアドレスと「ネットマスクの逆数」をAND演算します。

ネットマスクの計算手順

結果を10進数に直すと「0.0.0.1」となり、この値がホストアドレスになります。

プレフィックス表記

ネットワークアドレスとホストアドレスを取り出すのに使用したネットマスクはIPアドレスと同じ32ビットで表されます。それぞれのビットで「1」の箇所がネットワークアドレスで、「0」の箇所がホストアドレスになります。ネットマスクはそれ単体で使われることはなく、つねにIPアドレスにくっついて初めて意味をもつ情報です。

ネットワークアドレスの表記方法は、下記のように後ろに「/」を付けてネットマスクのビット数を表記するのが一般的です。

「192.168.10.0/24」

この表記方法を「プレフィックス表記」といいます。

最後にサブネットマスクの違いによって、割り当てることができるホスト数の違いについて以下にまとめておきます。

ネットマスク(実践編)

実際にネットマスクを使ったサブネットワークについて解説していきましょう。

ネットマスクはIPアドレスと同じように、32ビットで表される情報で、「1」で表される部分がネットワークアドレスを、「0」で表される部分がホストアドレスを意味します。

サブネットワークはクラスごとに決められているホストアドレスの範囲の一部をネットワークアドレスとして使用することにより、ネットワークアドレスとホストアドレスの範囲を細かく設定します。

例えば、クラスCのIPアドレス192.168.1.100に対して、アドレスクラスの概念だとクラスCとなりますので、ネットワークアドレスは192.168.1.0となります。
ではサブネットワークを使用した場合どうなるかというと、例えばネットマスクを拡張して以下のようにした場合、

IPアドレス:192.168.1.100
ネットマスク:255.255.255.240

それぞれを2進数に変換すると、

ネットマスクの計算手順

この場合のネットワークアドレスはAND演算すると、

ネットマスクの計算手順

となるので、ネットワークアドレスは192.168.1.96になります。
ホストアドレスは、“ネットマスクの逆数”をAND演算しますので、

ネットマスクの計算手順

となり、0.0.0.4がホストアドレスになります。このときの最大のホスト数は、

24 - 2 = 14

となります。10台以下のホストしかないような端末であれば十分ですね。

この拡張したビット部分、(今回の例ですと第4オクテットの上位4ビット部分)のことを、サブネットアドレスと呼びます。

ネットマスクの計算手順

実際にサブネットワークを使用したIPアドレスを設計してみよう。

サブネットワークは現場でも多く利用していますし、実際にサブネットワークの設計を行う場面もあると思います。ここまで、サブネットワークについて解説してきましたが、理解するには実際にIPアドレスの割り振りを経験してみることが近道です。そこで例題を元に実際に割り当てを考えてみましょう。

例題

○△株式会社が業績拡大のため、新たに大阪支社を新設することになりました。事務所新設により、社内ネットワークのIPアドレスを見直すことになり、新たに新設された3つの部署にはクラスCのアドレス「192.168.1.0」を分割して、3つのネットワークアドレスにして使用することとしました。それぞれの部署の端末台数は以下の通りです。

  • 経理部:100台
  • 総務部:50台
  • 営業部:20台

3つの部署に効率よくIPアドレスを割り当てるにはどうすればよいでしょうか?

ネットマスクの計算問題

経理部のIPアドレス

経理部は端末が100台ですので、100個のホストアドレスがあれば良いわけです。第4オクテットのホストアドレス部分のうち、1ビットを拡張してみましょう。

  • IPアドレス
    11000000 10101000 00000001 00000000 (192.168.1.0)

  • ネットマスク
    11111111 11111111 11111111 10000000 (255.255.255.128)

この場合の最大ホスト数は

27 - 2 = 126個

となります。IPアドレスの範囲は、192.168.1.1 ~ 192.168.1.126です。仮にもう1ビット拡張したとすると、

26 - 2 = 62個

となり、IPアドレスが足りませんので、経理部のサブネットは

  • ネットワークアドレス:192.168.1.0
  • サブネットマスク  :255.255.255.128

としましょう。

総務部のIPアドレス

総務部の端末は50台です。経理部ですでに、192.168.1.0 ~ 192.168.1.127までを確保していますので、それ以降のアドレス(192.168.1.128以降)を使用しないといけません。経理部で指定したサブネットマスクからさらにもう1ビット拡張してみましょう。

  • IPアドレス
    11000000 10101000 00000001 10000000 (192.168.1.128)

  • ネットマスク
    11111111 11111111 11111111 11000000 (255.255.255.192)

この場合の最大ホスト数は

26 - 2 = 62個

となります。IPアドレスの範囲は、192.168.1.129 ~ 192.168.1.190です。

仮にもう1ビット拡張したとすると、

25 - 2 = 30個

となり、IPアドレスが足らなくなるので、総務部のサブネットは以下とします。

  • ネットワークアドレス:192.168.1.128
  • サブネットマスク  :255.255.255.192
営業部のIPアドレス

営業部の端末は20台です。経理部、総務部ですでに、192.168.1.0 ~ 192.168.1.191までを確保していますので、それ以降のアドレス(192.168.1.192以降)を使用しないといけません。総務部で指定したサブネットマスクからさらにもう1ビット拡張してみましょう。

  • IPアドレス
    11000000 10101000 00000001 11000000 (192.168.1.192)

  • ネットマスク
    11111111 11111111 11111111 11100000 (255.255.255.224)

この場合の最大ホスト数は

25 - 2 = 30個

となります。IPアドレスの範囲は、192.168.1.193 ~ 192.168.1.222です。仮にもう1ビット拡張したとすると、

24 - 2 = 14個

となり、足らなくなってしまいます。ということで営業部は

  • ネットワークアドレス:192.168.1.192
  • サブネットマスク  :255.255.255.224

としましょう。以上で3つの部署のアドレスを192.168.1.0のアドレス範囲の中で、すべて割り振ることができました。

ここまでをまとめると以下のようになります。

  • 経理部:192.168.1.1 ~ 192.168.1.126
  • 総務部:192.168.1.129 ~ 192.168.1.190
  • 営業部:192.168.1.193 ~ 192.168.1.222
  • 残り :192.168.1.225 ~ 192.168.1.254

となります。ちょっと分かりにくいサブネットワークという概念ですが、理解できましたでしょうか?サブネットアドレスはホストアドレス部分の上位ビットをサブネットアドレスとして扱うことで使用します。このサブネットワークをうまく活用することで、ネットワークの構成に応じて効率の良いネットワーク設計が可能になります。

特殊なアドレス

IPアドレスは32ビットであれば、どれでも使用できるかというとそうではありません。事前に用途が決められているものがいくつかあります。

ネットワークアドレス

ホストアドレス部分が全て「0」のIPアドレスを「ネットワークアドレス」といいます。ネットワークアドレスが同一のグループは1つのネットワークとして扱われます。ネットワークアドレスは、それぞれのネットワークを識別する値です。「192.168.1.0/24」のネットワークアドレスは「192.168.1.0」になります。

ネットワークアドレス

ブロードキャストアドレス

IPアドレス全てが「1」のIPアドレスを「ブロードキャストアドレス(255.255.255.255)」といいます。このアドレスのことを一般的に、「ブロードキャストアドレス」と呼ばれるのですが、正式には「リミテッド・ブロードキャストアドレス」といいます。
リミテッド・ブロードキャストアドレスは同一ネットワーク上のすべてのホストに対して通信を行う場合に宛先アドレスとして使用されます。

さらにIPアドレス全てではなく、ホストアドレス部分のみが全て「1」のアドレスは「ローカル・ブロードキャストアドレス」「ダイレクト・ブロードキャストアドレス」の2種類があります。

自分が所属しているネットワークアドレスのブロードキャストアドレスを、ローカル・ブロードキャストアドレスといいます。

ブロードキャストアドレス

ローカル・ブロードキャストアドレスは、リミテッド・ブロードキャストアドレスと同様に、同じネットワーク内の全ノードに対してパケットが送信されます。リミテッド・ブロードキャストアドレスは自分のIPアドレスやネットワークがわからないときに使用されます。

逆に自分が所属していないネットワークアドレスのブロードキャストアドレスを、ダイレクト・ブロードキャストアドレスといいます。

ダイレクト・ブロードキャストアドレス

3種類のブロードキャストアドレスの違い

ブロードキャストアドレスと名がつくだけに、ネットワーク内の全てのホストを意味しますので、メッセージは全てのホストに届きます。ただし「ローカル・ブロードキャストアドレス」と「リミテッド・ブロードキャストアドレス」は、ルータを越えることは出来ません。つまり1つのネットワーク内でのみ完結する通信になります。

なぜルータを越えることができないのでしょうか?それはもし仮にブロードキャストがルータを越えてしまうと、インターネットに繋がる全てのホストにブロードキャストが届いてしまいます。これではインターネットはブロードキャストだらけになってしまいます。そんなことにならないために、ブロードキャストはルータを越えられないようにしています。

ループバックアドレス

127から始まるIPアドレスのことを、「ループバックアドレス」といいます。ループバックアドレスは、「自分自身の仮想的なアドレス」を示しています。コンピュータ自身がループバック宛に通信を行った場合、その通信は外部に送出されません。アドレスの範囲は「127.0.0.0 ~ 127.255.255.255」となります。

リンクローカルアドレス

インターネットに接続しようとしたんだけどうまく繋がらない。色々調べてみると、自分のIPアドレスが「169.254.1.1」になっていた。なぜこんなアドレスが設定されているのだろう?なんて疑問に感じたことはありませんか?

この「169.254」から始まるアドレスは、WindowsでDHCPによるIPアドレスの取得に失敗した場合に、自動的に割り振られるアドレスです。このアドレスのことを「リンクローカルアドレス」といいます。
リンクローカルアドレスの範囲は「169.254.1.0~169.254.254.255」となります。

この自動で割り振られる機能を「APIPA(Automatic Private IP Addressing)」といいます。 便利そうなこの機能ですが、実は自動で割り振られるのはIPアドレスのみでデフォルトゲートウェイは設定されません。そのためそのままではルータを越えた通信は出来ません。

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

プライベートアドレス

IPアドレスはネットワーク内で一意で無ければいけませんでした。インターネットの世界でも同じで、インターネットという巨大なネットワークであっても、そこで使われるIPアドレスは一意で無ければいけません。
しかし、社内ネットワークなどインターネットに接続していない完全に閉ざされたネットワークなのに、世界で一意のIPアドレスを割り当てるというのは非効率的です。そこで社内のネットワークなど閉ざされたネットワークでのみ使用できるIPアドレスというものをRFCで標準化しています。この自由に割り当てることができるIPアドレスを「プライベートアドレス」といいます。プライベートアドレスは以下の範囲がRFC 1918にて規定されています。

  • 10.0.0.0~10.255.255.255 (10.0.0.0/8)
  • 172.16.0.0~172.31.255.255(172.16.0.0/12)
  • 192.168.0.0~192.168.255.255(192.168.0.0/16)

プライベートアドレスに範囲内であればユーザーが好きなように割り振ることが出来ます。ただしプライベートアドレスを使用したネットワークをインターネットに接続することはできません。

グローバルアドレス

逆にインターネットに直接接続されているコンピュータなどが使用するIPアドレスは、ICANNというインターネット上で利用されるアドレス資源の標準化や割り当てを行なっている組織で一元管理されています。このようなIPアドレスのことを「グローバルアドレス」といいます。

グローバルアドレスは公衆の電話番号で、プライベートアドレスは会社の内線番号のようなものと言えば分かりやすいかもしれません。インターネットに接続しない社内ネットワークでは、基本的にすべてプライベートアドレスを使用するのが一般的です。プライベートアドレスを使用しているネットワークをインターネットに接続する場合はアドレス変換(NAT)機能を使用してグローバルアドレスに変換する必要があります。

グローバルアドレス

IPパケットの中身

IPを基にしたネットワークでは、データを「パケット」と呼ぶ固まりに格納します。そしてこのIPパケットは大きく分けてIPヘッダ(IP Header)とIPデータ(IP Data)の2つに分けることが出来ます。このうちIPヘッダの中にIPの情報が全て格納されています。IPヘッダの中身は以下のような形式で情報が入っています。

IPパケット

IPヘッダ内の主な情報は以下の通りです。

IPヘッダ

Version(4ビット)

IPのバージョンを表します。IPv4であれば「4」が入りますし、IPv6であれば「6」が入ります。

TOS(8ビット)

TOS(Type of Service)ビットには、IPパケットの優先度などパケットの品質を決める情報が入ります。

Total Length(16ビット)

IPヘッダとデータを含めたパケット全体の長さを表します。

Identification(16ビット)

大きなデータを運ぶときは、複数のIPパケットに分けてデータを送信します。その時に、分割したデータなのか、全く別のデータのパケットなのかを識別するために使用できます。

Flags(3ビット)

IPパケットの分割を制御する時に使用します。各値の意味は以下の通りです。

  • ビット0:予約(未使用)
  • ビット1:分割を許可するかしないかを表す値
    (値が0だと分割可、値が1だと分割不可)
  • ビット2:フラグメントが最後かどうかを表す値
    (値が0だと最後のフラグメント、値が1だと後続のパケットが存在する)

Flagment Offset(13ビット)

分割されたパケットが、元のデータのどこに位置しているかを表します。
単位は8オクテットで最大8×8192=65536オクテットです。

TTL(8ビット)

Time to Live(TTL)。パケットが通過可能なルータの数を表します。
ルータを経由するたびに1づつ減っていき、0になった時点でこのパケットは破棄されます。
もし何らかの設定ミスなどで目的地に到着せず、ネットワーク内をぐるぐると転送され続けてしまった場合、TTLが無ければ無限ループに陥ってしまいます。こうした状態になるのを防ぐためにTTLという機能が設けられました。

TTLの動作

TTLフィールドは8ビットなので最大で255となり、255台より先のルーターにはパケットは届きません。現実的に255台ものルーターを経由することはありえないため問題はありません。

Protcol(8ビット)

IPの上位プロトコルを表します。主要なプロトコルには以下のようなものがあります。

  • 1:ICMP (Internet Control Message Protocol)
  • 6:TCP (Transmission Control Protocol)
  • 17:UDP (User Datagram Protocol)

Header Checksum(16ビット)

IPヘッダのチェックサム。IPパケットの伝送エラーがないかチェックするためにあります。IPヘッダ内のTTL値はルータを経由するたびに変わるため、各ルータでは転送する前にヘッダチェックサムの再計算を行っています。

Source Address(32ビット)

送信元のIPアドレスがセットされています。

Destination Address(32ビット)

宛先のIPアドレスがセットされています。

パケットが大きい場合は分割処理を行う

IPヘッダにある、IdentificationとFlags、Flagment Offsetの3つのフィールドは、パケットのフラグメンテーション(断片化)に関連したフィールドです。IPは大きなデータを送信するとき、データを複数のパケットに分割して送信します。このパケットの分割をフラグメンテーションといいます。

ネットワークはイーサネットや無線LAN、WAN回線などさまざまな回線で構成されています。回線ごとに仕組みも帯域も異なり、一度のは個別データのサイズも異なります。例えばイーサネットであれば、フレームに入れることができるIPパケットのサイズは最大で1500バイトと決められています。この最大サイズのことを「MTU」といいます。このMTUよりも大きなデータを送るときは、パケットを分割して送信します。

MTUの動作

分割したパケットを受信側ノードで1つのデータに戻すために、IPヘッダーのIdentificationとFlags、Flagment Offsetの3つのフィールドが使われます。
Identificationは、IPパケットを特定するためのID番号でIPデータごとに任意の値が入ります。IPデータが分割されて複数のパケットになったとしても、その分割されたパケットのIDは同じ値になるため、受信側では同じIDの分割されたパケットを集めて1つのIPデータとして構成するということが分かります。

Flagsにはデータが分割されているのかどうかを示す情報が挿入されています。このフィールドは3ビットあり、1ビット目は未使用で必ず「0」になります。2ビット目が「0」の場合は分割可能、「1」の場合は分割禁止を意味します。3ビット目が「1」の場合,後に分割されたパケットが続く、つまり途中のパケットを意味します。「0」の場合には、そのパケットが分割されていないか、分割されたパケットの最後のパケットであることを意味します。

Flagment Offsetにはこのパケットが何番目の分割されたパケットなのかが挿入されています。ここに入る値は元のIPデータの中のどの位置にあったのかをしますデータの位置が値として入ります。

IPv6

インターネットの爆発的な成長によって、IPv4アドレスの枯渇が懸念されるようになり、新たなIPとしてIPv6(IPバージョン6)が標準化されました。この章ではIPv6はIPv4と比較してどのような違いがあるのかを簡単に説明していきます。

IPv6の特徴

IPv6の使用はRFC1883で規格化されて、RFC2460で改訂されています。IPv6主な特徴は以下の通りです。

IPv6は128ビット

IPv6とIPv4の違いとして一般的に知られているのが、アドレス数の違いです。IPv4アドレスは32 ビットで構成されていますが、IPv6は128ビットと大幅に拡張されています。

IPアドレスの自動設定

IPv6はDHCPサーバなどを用意しなくてもステートレスにIPアドレスを自動設定してくれる機能を実装しています。IPv6アドレスの割り振りを希望するノードがネットワークプレフィックスを要求すれば、そのネットワーク上に存在しているIPv6ルータがネットワークプレフィックスを提供してくれます。

この情報を元にノードは自身のMACアドレスや適当なランダムな値から一意のIPv6アドレスを自動的に設定します。この機能を実装することで、運用者は余計な運用コストが必要なくなり、利用者もIPアドレスを意識することなく使用することができます。

ヘッダ形式の単純化

IPv6のヘッダはIPv4に比べて非常に簡略化されました。ヘッダサイズは固定長で40バイトとなっています。IPv4ヘッダにはオプションフィールドがあるため、ヘッダ長が可変でしたが、IPv6 ヘッダにはオプションフィールドを拡張ヘッダと呼ばれるフィールドに移動させることで処理の高速化を実現させています。

拡張ヘッダとオプションヘッダの強化

IPv4にはヘッダにオプションフィールドを設けて様々なオプションに対応させてきましたが、IPv6 では必要な時のみ拡張ヘッダというヘッダを設定しています。これにより転送効率の向上やオプション拡張の容易性を実現させています。

IPsecを標準装備

IPsecとは暗号技術を使って、IPケット単位でデータの改竄防止や秘匿機能を提供するプロトコルです。IPsecはIPv4でも使用可能でしたが、IPv4が広く使われるようになってからIPsecが導入されたため、IPv4の実装を改造し埋め込む必要がありました。しかしIPv6では、プロトコルの中にIPsec機能を搭載しているため、容易に使用することが可能になっています。

エラー検出方法の変更

IPv4ではIPレベルでエラー検出していたのに対し、IPv6はレイヤ4以上の上位層にてエラー検出を実施させています。

アドレス構造の階層を厳密化

アドレス構造の階層を厳密に決めることで、インターネットのバックボーンなどで効率的な集約を可能としています。

ブロードキャストの廃止

ブロードキャストを廃止し、同様の仕様はマルチキャストの中の1つのサービスとして定義しています。

以上のようにIPv6は、単純にアドレス空間を増やしているわけではなく、様々な機能を拡張させています。

IPv6 アドレスの表記方法

IPv6アドレスは、128ビットに拡張されているため、使用できるアドレス数も増えています。IPv6アドレス「は128ビットを先頭から16ビットごとに「:」(コロン)で区切って表記します。

「2001:1111:2222:3333:4444:5555:6666:7777」

IPv6アドレスの表記はIPv4に比べて長くなってしまうため、以下の条件でアドレス表記を圧縮することが 可能です。

  • 0が連続しているブロックを省略可能
  • 0が連続しているブロックを省略可能(ただしアドレス内で1カ所だけ)

0が連続しているブロックを省略可能

「2001:0000:0000:0000:0044:5555:0000:7777」

上記アドレスは、以下のように圧縮が可能です。   「2001:0:0:0:44:5555:0:7777」

これでだいぶすっきりしますが、さらに以下の条件で 圧縮が可能です。

0が連続しているブロックを省略が可能

さきほどの条件でアドレスを以下のように圧縮しました。

「2001:0:0:0:44:5555:0:7777」

さらにここから、0が連続しているブロックの省略が可能です。

「2001::44:5555:0:7777」

注意点としては、省略が可能なのはアドレス内で1カ所だけだということ。

2カ所以上で省略してしまうと、それぞれ「0:」をいくつ省略したのか判別できないため、1 カ所だけという決まりがあります。

IPv6って本当に必要なの?

IPv4アドレスの枯渇とともに、IPv6への移行は徐々にですが始まっています。すでにほとんどのOSはIPv6に対応しており、インターネット事業者ではIPv6がかなり使われてきています。ただしいきなり全てのIPv4がIPv6に置き換わると言うことはなく、当分の間はIPv4とIPv6の併存が続くと見られています。

MACアドレスとIPアドレスの違い

MACアドレスもIPアドレスも送信元のノードとあて先のノードを指定するという意味では同じです。
ただし、IPアドレスは「最終的なあて先」を指定するのに対して、MACアドレスは「最終的なあて先に向かうまでの途中の装置間のやりとり」に使われます。

MACアドレスとIPアドレスの違い

ネットワークを越えるたびに変わるMACアドレス

IPパケット内にセットされた送信元と宛先のIPアドレスは、基本的に変わることはありません。しかしMACアドレスはネットワークを越えるたびに変わります。MACアドレスはデータリンク層で動作しますので、同一ネットワーク内での通信を行う時に使用します。例えば以下のようにルータBからルータAへ通信をした時の各ヘッダ情報は以下のようになります。

ネットワークを越えるたびに変わるMACアドレス1

次に以下のようにルータBからルータCへ通信をしたい場合はどうなるでしょう?

ネットワークを越えるたびに変わるMACアドレス2

まずルータBは送信元IPアドレスに自身のIPアドレス(192.168.10.1)、宛先IPアドレスにRTC(192.168.50.2)をセットします。送信元MACアドレスには自身のMACアドレスをセットします。宛先MACアドレスにはルータCではなくルータAのMACアドレスをセットします。

ネットワークを越えるたびに変わるMACアドレス3

こうすることで、このパケットはルータAへと送られます。パケットを受け取ったルータAは、以下のように宛先のMACアドレスを付け替えてパケットを送り出します。

ネットワークを越えるたびに変わるMACアドレス4

このようにIPアドレスは変わらないのですが、MACアドレスはネットワークを越えていくたびに付け替えられていきます。

関連記事