ネットワーク層では、データリンク層以下のプロトコルを利用し、送信元からあて先へ到達するためのネットワークの経路を定義しています。ネットワーク層で使用されるプロトコルで、有名なのがIPとよばれるプロトコルです。IPアドレスを利用してどんなに遠く離れていてもデータを届けることができます。
データ送信を宅配便に例えるなら、ネットワーク層は送信元から宛先まで効率よく配達する役目を担います。効率よく配達を行うために集荷や配送の順番を決めたり、宛先までの最適な道順を決めたり、重い荷物と軽い荷物が合った場合に重い荷物を下に置いたりといったことを行います。これと同じようなことをネットワーク層では行っています。
ネットワーク層の中心的プロトコルといえば「IP(internet protocol)」です。IPの通信は宛先を特定するのに「IPアドレス」といわれる固有の値を使用します。IPアドレスは、送信元のノードから通信したい宛先のノードを特定するのに用いるのに使用されます。ネットワークの世界では、このIPアドレスを使って宛先を特定するので当然全世界でユニーク(一意)な値でなければいけません。
IPアドレスにはIPv4(IPバージョン4)とIPv6(IPバージョン6)という2種類が存在します。
現在広く普及しているのはIPv4アドレスですが、インターネットに接続されるノードが爆発的に増加し、IPv4アドレスの数が枯渇してきています。そのため、より多くのIPアドレスを割り振ることができるIPv6への対応が進められています。既に多くのOSやネットワーク機器がIPv6に対応しています。
コンピュータのIPアドレスを調べるにはWindowsの場合はコマンドプロンプトで、MACの場合はターミナルでそれぞれ以下のコマンドを実行します。
「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アドレスになります。
「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アドレスになります。
IPアドレスは32ビットからなる数値で、実際には2進数として使用されていますが、分かりやすいように1bytes(8bit)ごとに10進数に変換して、「.」(ピリオド)で区切って表記されます。
また、IPアドレスは1bytes(8bit)ごとに分けている固まりを左から第1オクテット、第2オクテット、第3オクテット、第4オクテットと呼んでおります。
IPアドレスは一見数字の羅列だけのように見えるかもしれませんが、「ネットワークアドレス」と「ホストアドレス」に分けて考えることができます。
ネットワークアドレスはIPアドレスを構成するビットの中で、それぞれのネットワークを識別する値です。ネットワークアドレスが同一のグループは1つの同じ「ネットワーク」として扱われます。
ホストアドレスは1つのネットワーク内で一意の値である必要があります。上図の例では第4オクテット部分の値がホストアドレスになります。このようにネットワークアドレスとホストアドレスの組み合わせにより、1つのIPアドレスになります。
学校の1つのクラス(1組、2組…)を1つのネットワークとすると、そのクラスの一人一人の名前がホストアドレスだと考えれば分かりでしょうか。
IPアドレスの中で、どこまでがネットワークアドレスで、どこまでがホストアドレスになるのかを決めるのが、次に説明する「アドレスクラス」と「サブネットマスク」になります。
アドレスクラスとは、「IPアドレスの中で、どこまでがネットワークアドレスで、どこまでがホストアドレスになるのか取り決めている考え方」です。
アドレスクラスにはAからEまで5つあり、それぞれネットワークアドレスとホストアドレスがどこで分かれるかが決められています。
どのIPアドレスがどのクラスに属しているかを識別するには、先頭から4ビットまでのビット列の組み合わせによって判断できます。
クラスAは最上位のビットが「0」で始まり、続く7ビットがネットワークアドレスになります。
先頭が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は最上位から2ビットが「10(2進数)」で始まり、続く14ビットがネットワークアドレスになります。
先頭から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は最上位から3ビットが「110(2進数)」で始まり、続く21ビットがネットワークアドレスになります。
先頭から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は最上位から4ビットが「1110(2進数)」で始まり、続く28ビットがネットワークアドレスになります。つまり残り全てのビットがネットワークアドレスになります。
このクラスDは特殊な使い方をしていて、IPマルチキャストと呼ばれています。通常IPは1対1の通信を行うのが常識ですが、IPマルチキャストは1対多の通信を行うときに使用されます。マルチキャストは「1:特定のグループ」の通信を行う場合に使用され、ストリーミング配信などに使用されています。通常パソコンなどにクラスDのIPアドレスを付与することはありません。
クラスEは最上位から5ビットが「1111」で始まります。
クラス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アドレスを見直すことになり、新たに新設された3つの部署にはクラスCのアドレス「192.168.1.0」を分割して、3つのネットワークアドレスにして使用することとしました。それぞれの部署の端末台数は以下の通りです。
3つの部署に効率よく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アドレスが足りませんので、経理部のサブネットは
としましょう。
総務部の端末は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アドレスが足らなくなるので、総務部のサブネットは以下とします。
営業部の端末は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個
となり、足らなくなってしまいます。ということで営業部は
としましょう。以上で3つの部署のアドレスを192.168.1.0のアドレス範囲の中で、すべて割り振ることができました。
ここまでをまとめると以下のようになります。
となります。ちょっと分かりにくいサブネットワークという概念ですが、理解できましたでしょうか?サブネットアドレスはホストアドレス部分の上位ビットをサブネットアドレスとして扱うことで使用します。このサブネットワークをうまく活用することで、ネットワークの構成に応じて効率の良いネットワーク設計が可能になります。
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アドレスやネットワークがわからないときに使用されます。
逆に自分が所属していないネットワークアドレスのブロードキャストアドレスを、ダイレクト・ブロードキャストアドレスといいます。
ブロードキャストアドレスと名がつくだけに、ネットワーク内の全てのホストを意味しますので、メッセージは全てのホストに届きます。ただし「ローカル・ブロードキャストアドレス」と「リミテッド・ブロードキャストアドレス」は、ルータを越えることは出来ません。つまり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にて規定されています。
プライベートアドレスに範囲内であればユーザーが好きなように割り振ることが出来ます。ただしプライベートアドレスを使用したネットワークをインターネットに接続することはできません。
逆にインターネットに直接接続されているコンピュータなどが使用するIPアドレスは、ICANNというインターネット上で利用されるアドレス資源の標準化や割り当てを行なっている組織で一元管理されています。このようなIPアドレスのことを「グローバルアドレス」といいます。
グローバルアドレスは公衆の電話番号で、プライベートアドレスは会社の内線番号のようなものと言えば分かりやすいかもしれません。インターネットに接続しない社内ネットワークでは、基本的にすべてプライベートアドレスを使用するのが一般的です。プライベートアドレスを使用しているネットワークをインターネットに接続する場合はアドレス変換(NAT)機能を使用してグローバルアドレスに変換する必要があります。
IPを基にしたネットワークでは、データを「パケット」と呼ぶ固まりに格納します。そしてこのIPパケットは大きく分けてIPヘッダ(IP Header)とIPデータ(IP Data)の2つに分けることが出来ます。このうちIPヘッダの中にIPの情報が全て格納されています。IPヘッダの中身は以下のような形式で情報が入っています。
IPヘッダ内の主な情報は以下の通りです。
IPのバージョンを表します。IPv4であれば「4」が入りますし、IPv6であれば「6」が入ります。
TOS(Type of Service)ビットには、IPパケットの優先度などパケットの品質を決める情報が入ります。
IPヘッダとデータを含めたパケット全体の長さを表します。
大きなデータを運ぶときは、複数のIPパケットに分けてデータを送信します。その時に、分割したデータなのか、全く別のデータのパケットなのかを識別するために使用できます。
IPパケットの分割を制御する時に使用します。各値の意味は以下の通りです。
分割されたパケットが、元のデータのどこに位置しているかを表します。
単位は8オクテットで最大8×8192=65536オクテットです。
Time to Live(TTL)。パケットが通過可能なルータの数を表します。
ルータを経由するたびに1づつ減っていき、0になった時点でこのパケットは破棄されます。
もし何らかの設定ミスなどで目的地に到着せず、ネットワーク内をぐるぐると転送され続けてしまった場合、TTLが無ければ無限ループに陥ってしまいます。こうした状態になるのを防ぐためにTTLという機能が設けられました。
TTLフィールドは8ビットなので最大で255となり、255台より先のルーターにはパケットは届きません。現実的に255台ものルーターを経由することはありえないため問題はありません。
IPの上位プロトコルを表します。主要なプロトコルには以下のようなものがあります。
IPヘッダのチェックサム。IPパケットの伝送エラーがないかチェックするためにあります。IPヘッダ内のTTL値はルータを経由するたびに変わるため、各ルータでは転送する前にヘッダチェックサムの再計算を行っています。
送信元のIPアドレスがセットされています。
宛先のIPアドレスがセットされています。
IPヘッダにある、IdentificationとFlags、Flagment Offsetの3つのフィールドは、パケットのフラグメンテーション(断片化)に関連したフィールドです。IPは大きなデータを送信するとき、データを複数のパケットに分割して送信します。このパケットの分割をフラグメンテーションといいます。
ネットワークはイーサネットや無線LAN、WAN回線などさまざまな回線で構成されています。回線ごとに仕組みも帯域も異なり、一度のは個別データのサイズも異なります。例えばイーサネットであれば、フレームに入れることができるIPパケットのサイズは最大で1500バイトと決められています。この最大サイズのことを「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データの中のどの位置にあったのかをしますデータの位置が値として入ります。
インターネットの爆発的な成長によって、IPv4アドレスの枯渇が懸念されるようになり、新たなIPとしてIPv6(IPバージョン6)が標準化されました。この章ではIPv6はIPv4と比較してどのような違いがあるのかを簡単に説明していきます。
IPv6の使用はRFC1883で規格化されて、RFC2460で改訂されています。IPv6主な特徴は以下の通りです。
IPv6とIPv4の違いとして一般的に知られているのが、アドレス数の違いです。IPv4アドレスは32 ビットで構成されていますが、IPv6は128ビットと大幅に拡張されています。
IPv6はDHCPサーバなどを用意しなくてもステートレスにIPアドレスを自動設定してくれる機能を実装しています。IPv6アドレスの割り振りを希望するノードがネットワークプレフィックスを要求すれば、そのネットワーク上に存在しているIPv6ルータがネットワークプレフィックスを提供してくれます。
この情報を元にノードは自身のMACアドレスや適当なランダムな値から一意のIPv6アドレスを自動的に設定します。この機能を実装することで、運用者は余計な運用コストが必要なくなり、利用者もIPアドレスを意識することなく使用することができます。
IPv6のヘッダはIPv4に比べて非常に簡略化されました。ヘッダサイズは固定長で40バイトとなっています。IPv4ヘッダにはオプションフィールドがあるため、ヘッダ長が可変でしたが、IPv6 ヘッダにはオプションフィールドを拡張ヘッダと呼ばれるフィールドに移動させることで処理の高速化を実現させています。
IPv4にはヘッダにオプションフィールドを設けて様々なオプションに対応させてきましたが、IPv6 では必要な時のみ拡張ヘッダというヘッダを設定しています。これにより転送効率の向上やオプション拡張の容易性を実現させています。
IPsecとは暗号技術を使って、IPケット単位でデータの改竄防止や秘匿機能を提供するプロトコルです。IPsecはIPv4でも使用可能でしたが、IPv4が広く使われるようになってからIPsecが導入されたため、IPv4の実装を改造し埋め込む必要がありました。しかしIPv6では、プロトコルの中にIPsec機能を搭載しているため、容易に使用することが可能になっています。
IPv4ではIPレベルでエラー検出していたのに対し、IPv6はレイヤ4以上の上位層にてエラー検出を実施させています。
アドレス構造の階層を厳密に決めることで、インターネットのバックボーンなどで効率的な集約を可能としています。
ブロードキャストを廃止し、同様の仕様はマルチキャストの中の1つのサービスとして定義しています。
以上のようにIPv6は、単純にアドレス空間を増やしているわけではなく、様々な機能を拡張させています。
IPv6アドレスは、128ビットに拡張されているため、使用できるアドレス数も増えています。IPv6アドレス「は128ビットを先頭から16ビットごとに「:」(コロン)で区切って表記します。
「2001:1111:2222:3333:4444:5555:6666:7777」
IPv6アドレスの表記はIPv4に比べて長くなってしまうため、以下の条件でアドレス表記を圧縮することが 可能です。
「2001:0000:0000:0000:0044:5555:0000:7777」
上記アドレスは、以下のように圧縮が可能です。 「2001:0:0:0:44:5555:0:7777」
これでだいぶすっきりしますが、さらに以下の条件で 圧縮が可能です。
さきほどの条件でアドレスを以下のように圧縮しました。
「2001:0:0:0:44:5555:0:7777」
さらにここから、0が連続しているブロックの省略が可能です。
「2001::44:5555:0:7777」
注意点としては、省略が可能なのはアドレス内で1カ所だけだということ。
2カ所以上で省略してしまうと、それぞれ「0:」をいくつ省略したのか判別できないため、1 カ所だけという決まりがあります。
IPv4アドレスの枯渇とともに、IPv6への移行は徐々にですが始まっています。すでにほとんどのOSはIPv6に対応しており、インターネット事業者ではIPv6がかなり使われてきています。ただしいきなり全てのIPv4がIPv6に置き換わると言うことはなく、当分の間はIPv4とIPv6の併存が続くと見られています。
MACアドレスもIPアドレスも送信元のノードとあて先のノードを指定するという意味では同じです。
ただし、IPアドレスは「最終的なあて先」を指定するのに対して、MACアドレスは「最終的なあて先に向かうまでの途中の装置間のやりとり」に使われます。
IPパケット内にセットされた送信元と宛先のIPアドレスは、基本的に変わることはありません。しかしMACアドレスはネットワークを越えるたびに変わります。MACアドレスはデータリンク層で動作しますので、同一ネットワーク内での通信を行う時に使用します。例えば以下のようにルータBからルータAへ通信をした時の各ヘッダ情報は以下のようになります。
次に以下のようにルータBからルータCへ通信をしたい場合はどうなるでしょう?
まずルータBは送信元IPアドレスに自身のIPアドレス(192.168.10.1)、宛先IPアドレスにRTC(192.168.50.2)をセットします。送信元MACアドレスには自身のMACアドレスをセットします。宛先MACアドレスにはルータCではなくルータAのMACアドレスをセットします。
こうすることで、このパケットはルータAへと送られます。パケットを受け取ったルータAは、以下のように宛先のMACアドレスを付け替えてパケットを送り出します。
このようにIPアドレスは変わらないのですが、MACアドレスはネットワークを越えていくたびに付け替えられていきます。