LAN技術研究室(LANに関心がある人のために情報を提供しているサイト)

スポンサードリンク


LANの初歩

IPアドレスについて

IPアドレスは、クラスA、クラスB、クラスC、クラスD、クラスEまであります。
クラス分けすると、以下のような構成になります。

IPアドレスのクラス別構成表
クラスIPアドレスIPアドレスの範囲最大接続台数
クラスA
0 7ビット
ネットワーク部の下位
24ビット
ホスト部
10.0.0.0〜10.255.255.2551677214
クラスB
10 14ビット
ネットワーク部の下位
16ビット
ホスト部
172.16.0.0〜172.31.255.25565534
クラスC
110 21ビット
ネットワーク部の下位
8ビット
ホスト部
192.168.0.0〜192.168.255.255254
クラスD
1110 マルチキャスト・アドレス
224.0.0.0〜239.255.255.255
クラスE
1111 実験用に予約されているアドレス範囲
240.0.0.0〜247.255.255.255

上の表は、IPv4IPアドレスの場合です。
IPアドレスに関しては、IPv4以外にIPv6もありますがここでは説明の対象としません。
上の表では、「ネットワーク部の下位」と記載していますが、実際のネットワーク部は上位のクラスを識別するために割り当てられています。
例えば、クラスAでは1ビット割り当てられていて、0 と決まっていて、クラスBでは2ビット割り当てられていて、10 と決まっていて、クラスCでは3ビット割り当てられていて、110 と決まっていてます。
従って、先頭の1〜3のビット数の上位ビットも合わせてネットワーク部になります。
IPアドレスは、IPv4では内部的には4オクテットの長さになります。
オクテットはバイトと考えて下さい。
ネットワーク関連の文献では、バイトよりオクテットの方が多用されます。
表示上では2進数ではわかりにくいので、上の表の中のように3つのドットで区切った4つの10進数になっています。
IPアドレスでも、192.168.0.0のようなアドレスは、ネットワーク・アドレスと呼ばれ、ネットワークを参照するのに使われるため、ホストを識別するアドレスとして使用してはならないことになっています。
ネット・マスクという値を使って、192.168.0.1のような特定のホストを表すIPアドレスと論理演算をすると、ネットワーク・アドレスになります。
この場合の論理演算は、論理積です。
どこかのホストを表すIPアドレスネット・マスクで論理積の演算を行うと、特定のネットワークがわかり、そのホストかどのネットワークに属しているかがわかります。
ネット・マスクは、192.168.0.0では255.255.255.0という値を使います。
ネットワーク・アドレスによって、この値は変わります。
192.168.0.1のホストは、192.168.0.0ネットワークにあることがわかります。
LANやコンピュータの演算に関してまだ不慣れな人は、ピンとこない方もいるかもしれませんので、論理演算とネットワーク・アドレスの計算方法について説明しましょう。
しかし、現在皆さんが御読みのこの項目は、IPアドレスについてというタイトルなので、本筋から少しそれてしまうことから次の項目(ブール代数とは?)以降で解説することにしました。
従って、ブール代数などの計算の仕方がわからない方は、以下の二つの項目を先にクリックして勉強してから、行った先にある「戻る」のボタンをクリックして再びここに来て下さい。

ブール代数とは?
10進数・16進数・2進数の相互変換計算の方法について

これだけできると、ずいぶんIPアドレスの計算に強くなります。
ところで、IPでは、全体のネットワーク空間を、上の表中のネットワーク部の項目で示したように、複数のネットワーク・アドレスで分割してネットワークを利用します。
このような様々なIPアドレスから構成されている一つ一つのネットワーク空間は、さらに細かく分けることができます。
このようにより細かくネットワークを分割することをサブネッティングと言います。
そして、分割された一つ一つをサブネットと言います。
上記の表をまた御覧下さい。
クラスC以下ならどれを例にあげても良いのですが、クラスBがちょうどネットワーク部とホスト部が半分半分(16ビットずつ)になり、説明しやすいことから、クラスBを例にサブネットについて説明します。
今、ケロケロハウスという名前のソフトハウス(コンピュータソフトウェアを開発している会社)があったとします(^_^)
この会社は、ソフト開発部とソフト販売部と総務部から成っているとします。
この会社は、インターネットとの接続を前提にして、IPだけのLANにし、社内のネットワークをクラスBだけで構成していたとします。
この会社のネットワーク管理者は、この会社が3つの部に分かれるので、LANを作る際に、3つのネットワーク・アドレスを割り当てようと考えました。
そこで、上の表のネットワーク部の値を以下のように社内の部別に割り当てました。

ネットワーク・アドレスネットワーク部数値表
ソフト開発部16
ソフト販売部17
総務部18

クラスBの場合、16〜31までのネットワーク・アドレスを割り当てられます。
以下の図を御覧下さい。

10 14ビット
ネットワーク部の下位
2ビット
サブネット
14ビット
ホスト部

サブネット部が2ビット分新たにできたため、ホスト部が16ビットから14ビットに減ってしまいました。
しかし、サブネットに分けたことによって、LANに接続するホストの台数は分散され、一つのネットワーク(ソフト開発部だけのネットワーク)の負荷も軽減されました。
サブネット部は、2ビットあるので、00,01,10,11の4つのビットパターンを使って2つのサブネットを作ることができます。
下のサブネットに分割したソフト開発部のネットワークの図を御覧下さい。
赤い字で書いた4つのサブネット・アドレスを見ると、一番下位のホスト部14ビットだけは0なので、その上位のビットをすべて1にすると、サブネット・マスクができます。
このサブネット・マスクと各ホストを示すIPアドレスの論理積を演算すると、そのホストが属するサブネット・アドレスを知ることができます。
下のサブネットに分割したソフト開発部のネットワークの図では、赤い字で書かれたアドレスの終わりに /18 という文字がありますが、これはサブネット・マスクのビットで1が連続してある上位ビットのビット数を表します。
従って、/に続く2桁の10進数を見て、16を引けばサブネット部のビット数になります。
上の図の例では、サブネット部のビット数は2ですが、クラスBなら3〜14にすることもできます。
あまりサブネット部のビット数が多すぎると、ホスト部のビット数が足りなくなり、各サブネットに接続できるホストの数が減ってしまいます。

ところで、この会社の3つの部の内、ソフト開発部だけは人数が多く、2つの課に分かれていたとします。
それぞれの課は、別なフロアーにわかれていて離れたところにあったとします。
そこで、ネットワーク管理者は、ソフト開発部のネットワークだけ、以下の図に示したように2つのサブネットに分割するサブネッティングを行いました。

サブネットに分割したソフト開発部のネットワーク
サブネットに分割したソフト開発部のネットワークの図

上の図のように、1台のルーターを使い、2つのサブネットに分けたので、2つのサブネット・アドレスができました。
上の図のように、サブネッティングするには、ちょうど2つの課にそれぞれ2つのサブネットを割り当てるだけで済むので、ホスト部のアドレスを上位2ビット分犠牲にします。
つまり、ホスト部のアドレスが上位2ビットだけホストを識別するためのアドレスとして使えなくなるわけです。
しかし、上の図を見ると、一見4つのサブネットに分割して3台のルーターLANを構成できそうにみえますが、黒の線で消したアドレスやルーターは使用できません。
まず、紫の[00]の部分を見て下さい。
サブネット部のビット数が2ビットなので、2進数2桁で書いてあります。
このIPアドレスは、サブネット部のビットが2ビット分すべて0なので、ネットワーク・アドレスと区別がつかないことから、サブネット・アドレスとして使えません。
次に、上の図の一番下の紫の[11]の部分を見て下さい。
このIPアドレスは、サブネット部のビットが2ビット分すべて1です。
ソフト開発部のネットワーク・アドレスは、ネットワーク部が16です。
従って、このサブネットでは、サブネットブロードキャストアドレス(172.16.255.255)と、ソフト開発部のネットワーク全体のブロードキャストアドレス(172.16.255.255)と区別がつかなくなります。
そのため、これも使えないのでバツをくれました。
ブロードキャストアドレスに関しては、このすぐ後で述べます。
なお、サブネット部のビット数は2〜14までしか取れません。
それは、1ビットだけのサブネット部では、前述のように2つの使えないアドレスがありできません。
15ビットのサブネット部だとホスト部が1ビットになってしまい、ホスト部の0はサブネット・アドレスとして使うのでホストを示すアドレスとしては使えませんし、ホスト部の1はブロードキャストアドレスの一部になるのでこれも使えません。
そのため、ホストのアドレスを割り当てられません。
だから、サブネット部のビット数は2〜14までになります。
サブネットに関しては、おわかり頂けましたでしょうか。
一般的な用途に使われるIPアドレスに関する説明は、これくらいにしておきます。
次に、特殊な用途にしか使われないIPアドレスについて説明します。

255.255.255.255という特別なIPアドレスもあります。
このアドレスは、ブロードキャストアドレスと言って、MACアドレスの場合と似たようにLAN上の全部の通信機器に対してパケットを送信する時に利用されます。
255の場合、2進数ではビットがすべて1になります。
また、前述のソフト開発部のネットワークでは、172.16.255.255というソフト開発部だけのブロードキャストアドレスもあります。
ソフト開発部を他の部とネットワークを分けたため、IPアドレスネットワーク部を16としました。
前述のように、ソフト販売部では17、総務部では18にしたことを思い出して下さい。
つまり、社内の部ごとにネットワーク・アドレスが分かれているわけですから、ネットワークごとのブロードキャストアドレスもあるわけです。
ソフト販売部のブロードキャストアドレスなら、172.17.255.255となり、総務部のブロードキャストアドレスなら、172.18.255.255となります。
また、これ以外に、ホスト部のビットだけがすべて1となっているサブネットごとのブロードキャストアドレスもあります。
上のサブネットに分割したソフト開発部のネットワークの図にある172.16.128.0サブネットの場合は、172.16.191.255がこのサブネットブロードキャストアドレスになります。
ちょっと10進数では、わかりにくいので、2進数で172.16.128.0サブネットを表すことにします。

172.16.128.0サブネット

10
ネットワーク部の下位14ビット
10 1100 0001 0000
サブネット部の2ビット
10
ホスト部の14ビット
00 0000 0000 0000

上の172.16.128.0サブネットの2進数表記を御覧下さい。
これならわかりやすいでしょう。
御覧のように、サブネット・アドレスなのでホスト部の14ビットは全部ゼロです。
ネットワーク部の上位は2ビット、下位は14ビットで合計16ビットで計算すると、172.16.128.0サブネットの場合、172.16までの値になります。
サブネット部の2ビットがあるため、本来クラスBのホスト部は16ビットで、その内の上位2ビットが削られ、ホスト部は14ビットに縮まります。
サブネット部の2ビットは、10になり、ホスト部と繋ぎ合わせて16ビットの2進数になるので、これを2オクテットに区切って、区切りにドットを入れて、1000 0000 . 0000 0000 になり、各オクテットごとに10進数に変換すると、残りの128.0になります。
オクテットは8ビットですから16ビット長ならちょうど2つに分けられます。
このように計算しやすいので、ホスト部が16ビットのクラスBを例にあげました。
それでは、サブネット・アドレスを求めるために、サブネット・マスクを計算するにはどうしたら良いでしょうか。
今度は、上記の172.16.128.0サブネットの例ですと、ネットワーク部の16ビットと、サブネット部の2ビットをすべて1にしてしまいます。
そうすると、以下のようになります。

172.16.128.0サブネット・マスク

11
ネットワーク部の下位14ビット
11 1111 1111 1111
サブネット部の2ビット
11
ホスト部の14ビット
00 0000 0000 0000

172.16.128.0サブネット・マスクは2進数で上記のようになりました。
これを10進数に変換すると、255.255.128.0になります。
サブネット・アドレスに関してはこれでおわかり頂けたと思います。
クラスAの場合やクラスCの場合も、暇な時に御自分で計算して見て下さい。
前述しましたが、172.16.191.255172.16.128.0サブネットブロードキャストアドレスです。
一目見た感じ何で172.16.191.255172.16.128.0サブネットブロードキャストアドレスなのかがよくわかりません。
今度は、これを2進数で見てみましょう。

172.16.128.0サブネットブロードキャストアドレス

10
ネットワーク部の下位14ビット
10 1100 0001 0000
サブネット部の2ビット
10
ホスト部の14ビット
11 1111 1111 1111

サブネット・アドレスと変わる部分は、ホスト部だけです。
サブネット・アドレスのホスト部がすべて0なのに対して、サブネットブロードキャストアドレスの場合、ホスト部がすべて1になります。
注意しなければならないのは、サブネット部はそのままの値です。
サブネット・アドレスの計算を既に上でやったのでもう簡単ですよね。
サブネット・アドレスの場合と同様に、サブネット部の2ビットとホスト部の14ビットを連結して16ビットにし、2つのオクテットに分離して、区切りにドットを入れると、1011 1111 . 1111 1111 になり、各オクテットごとに10進数に変換すると、サブネット部とホスト部が191.255になります。

他にも幾つか特殊なIPアドレスがあります。
上の「IPアドレスのクラス別構成表」のクラスDを見て下さい。
マルチキャスト・アドレスとは、224.0.0.0〜239.255.255.255までの範囲内の特別なIPアドレスで、この範囲内のIPアドレスを使用することで、特定のグループだけを対象にして、複数箇所に送信できます。
ちなみに、特定のグループだけを対象にして、複数箇所に送信することをマルチキャストと言い、一定の範囲内の制限を設けることはあっても、すべてのノードに一斉に送信することをブロードキャストと言い、単一ノードにしか送信しないことをユニキャストと言います。
文中に出てきたノードとは、通信の対象を指し、それがコンピュータやルーターなどだったりします。
ルーターに関しては、ルーターの項目で説明しているので、左の下線のルーターの文字列をクリックして参照できます。
ルーターは、異なるネットワークサブネットを中継する装置です。
マルチキャストの最大の利点は、一つ一つのノードに対して1回1回送らず、前述のマルチキャスト・アドレスのように例えば224.0.0.1という特別なIPアドレスに1回送信するだけで特定のグループに属するすべてのノードに1回で動画や音声などのデータを送信できてしまうことです。
これによって、ネットワークトラフィックが大幅に軽減できます。
この場合、トラフィックとはネットワークの交通量を言います。
もし100個のノードがあったら100回送らずに1回で済むので、トラフィックはだいぶ少なくなります。
この方が効率的です。
同じLANで大勢が複数のパソコンで同じ動画を見ていたら、大変なトラフィックです。
このIPマルチキャストでは、前述の例で登場した224.0.0.1のような特別なIPアドレス(グループ・アドレス)だけではなく、IGMPInternet Group Management Protocol)やIPマルチキャスト・ルーティング・プロトコルが利用されます。
IGMPは、マルチキャスト環境でのグループ管理に使われるプロトコルです。
IGMPを使用することで、IPマルチキャストを利用するために、グループへの参加や離脱が行えます。
グループへの参加や離脱の情報は、このプロトコルを使用することでルーターに通知されます。
IGMPについての詳細は、IGMPInternet Group Management Protocolをクリックして参照できます。
一方、IPマルチキャスト・ルーティング・プロトコルとは、マルチキャストパケットを送信する送信元のコンピュータからこれを受信する受信側のコンピュータまでの経路を作る仕組みを言います。
例えば、今IPマルチキャストを実現して動画の配信サービスでも行おうとするならば、IPマルチキャストに対応したルーターが必要となります。
このようなルーターでは、ネットワークからネットワークIPマルチキャストパケットを転送できるように中継できなければなりません。
マルチキャスト・アドレスでも、224.0.0.0〜224.0.0.255の範囲内のIPアドレスだけは、ルーティングできないので注意が必要です。
マルチキャスト・アドレスなら何でも良いというわけではありません。
ルーターは、マルチキャストの宛先グループ・アドレスで指定されたグループのメンバーとなっているコンピュータがネットワーク上に1台以上ある場合、ネットワークIPマルチキャストパケットを転送します。
ルーターにとって、IPマルチキャストパケットの送信元のIPアドレスと宛先グループ・アドレスの情報だけあれば転送できます。

ところで、このような特別なIPアドレスは他にもまだあります。
その内の一つにループバック・アドレスがあります。
ループバック・アドレスは、以下のように最初のオクテットが127で最後のオクテットが1で間のオクテットがすべて0というIPアドレスのことを言います。

127.0.0.1

このIPアドレスは、自分のホストを指しているもう一つのIPアドレスとなります。
複数のプログラムで自分のIPアドレスを使いたい時に便利です。
例えば、あるプログラムがメールを受信して何らかのチェックを行って、このプログラムをプログラムAとしてプロキシサーバーのようにメールを中継して、同じホストにある別なプログラムが再び同じメールを受信するような処理をしたい場合に使えます。
後者のプログラムをプログラムBとすると、プログラムAはホストに割り当てられた普通のIPアドレスを利用してメールを受信し、メールのチェック処理をした後、ループバック・アドレスに対して送信します。
続いて、プログラムBがループバック・アドレスで受信待機していて、ループバック・アドレスでチェック後のメールを受信します。
いかがですか。
こんな使い方もできます。
この例では、プログラムBをメーラーにすることができ、プログラムAをスパムメールやウィルスのチェックプログラムにでもできます。

これでIPアドレスに関する説明は終わりとします。

ページトップ



プライベートIPアドレスグローバルIPアドレスについて

IPアドレスに関して、もう一つ忘れてはならない重要なことがあります。
それは、LANとインターネットを中継できるグローバルIPアドレス(global IP address)と、それができないプライベートIPアドレス(private IP address)がクラスA〜クラスCにあります。
グローバルアドレスとかプライベートアドレスと呼んでもかまいません。
以下の表に示したプライベートIPアドレスだけがインターネットに対してルーティング不可能なIPアドレスとなります。
これら以外はグローバルIPアドレスとなり、ルーターを使用してインターネットに対してルーティングできます。

プライベートIPアドレス
クラスネットワークネットワーク番号IPアドレスの範囲
10.0.0.0 10.0.0.110.255.255.255
16 172.16.0.0172.31.0.0 172.16.0.1172.31.255.255
256 192.168.0.0192.168.255.0 192.168.0.1192.168.255.255

これらのプライベートIPアドレスは、組織内部で利用されます。
つまり、プライベートIPアドレスの範囲のIPアドレスは、インターネットで使用しないことを前提とします。
インターネットの急速な発展と普及のために、グローバルIPアドレスが枯渇してしまうという問題が出てきました。
この問題は、IPv6というビット長の長い新しいIPアドレスを使用するという方法で解決できると思われます。
しかし、現行のIPv4のまま、組織内や家庭内では可能な限りプライベートIPアドレスを使用するということでも、グローバルIPアドレスの枯渇の問題を少しでも緩和できると思われます。
前述のようにプライベートIPアドレスは、インターネットでは利用できないのですが、NAT対応のルーターを通して、プライベートIPアドレスグローバルIPアドレスを相互変換して使用することもできます。
これならインターネットに接続することができるようになります。
ルーター側でプライベートIPアドレスへの着信設定ができますので、プライベートIPアドレスが割り当てられているサーバーを公開することもできます。
NATNetwork Address Translation)とは、プライベートIPアドレスグローバルIPアドレスを相互変換する技術を指します。
具体的には、NAT対応のルーターを使用することで実現できます。
また、余談ですが、LinuxなどのUNIX系を導入している場合は、自分でをNAT対応のルーターにしてしまうこともできます。
Linuxの場合、iptablesという仕組みを利用してNAT対応のルーターとして機能させることができます。

一方、グローバルIPアドレスは、主にインターネットで利用されます。
サーバーを公開したい場合は、通常グローバルIPアドレスを使用します。
インターネットにパソコンなどのコンピュータを接続するためには、グローバルIPアドレスを使用する必要があるので、NICNetwork Information Center)という組織から正式にIPアドレスを取得しなければなりません。

ページトップ



ブール代数とは?

この項目は、「ブール代数とは?」というタイトルですが、ジョージ・ブールGeorge Boole)という人を御存知でしょうか。
ジョージ・ブッシュではありませんよ(^_^;
ジョージ・ブールは、英国の数学者でブール代数の生みの親です。
ジョージ・ブール(1815〜1864)の時代はまだコンピュータが存在しませんでしたが、ブール代数はコンピュータの演算になくてはならぬ存在です。
ブール代数についてこれから説明していきます。
ブール代数は、0と1の組み合わせだけで演算する代数です。
このような演算で真か偽かを判断することができます。
真か偽の2値しかないので、2進数で演算することになります。
これだけ説明しただけで、コンピュータには必要不可欠な存在であることがおわかり頂けるでしょう。
われわれが、毎日お世話になっている加算・減算・乗算・除算から成る四則演算とは異なり、ブール代数では、論理積(AND)、論理和(OR)、論理否定(NOT)から成るコンピュータプログラムでも良く使う三つの基本的な論理演算を行います。
また、電子回路には、論理回路というものがありまして、三つの基本的な論理回路に基本論理ゲートがあります。
それらは、AND回路、OR回路、及び、NOT回路の三つです。
これらの論理回路の基礎もブール代数です。
これらの三つの演算に加えて、コンピュータプログラムで良く使う排他的論理和(XOR)を加えると、四つの論理演算があります。
まず、論理積(AND)から以下の真理値表で見ていきましょう。
以下の演算では、aとbの二つの変数を使います。
ただし、論理否定(NOT)だけはaしか使いません。
以下の表の演算結果を見て下さい。このように演算されます。

a AND bの真理値表
演算結果

次は、論理和(OR)です。

a OR bの真理値表
演算結果

次は、論理否定(NOT)です。

NOT aの真理値表
演算結果

次は、排他的論理和(XOR)です。
XORは、eXclusive ORの略です。

a XOR bの真理値表
演算結果

こういう演算をコンピュータの内部で行っています。
論理演算がイメージでわかるように昔懐かしいベン図venn diagram)で表してみましょう。

ベン図
ベン図

ベン図では、集合で使う記号を使っています。
懐かしい記号が出てきましたが、真ん中の論理和のA∪BはAカップBと読み、一番下の論理積のA∩BはAキャップBと読みます。
上の図では、緑の領域が真(1)になり、水色の領域が偽(0)になります。
上の図の論理否定では、Aの値が0であることになります。このAの論理否定は1になります。

次に、ブール代数の主な公式について以下の表にまとめておきます。

ブール代数の主な公式
名称数式
交換法則 A∪B=B∪A
A∩B=B∩A
分配法則 A∪(B∩C)=(A∪B)∩(A∪C)
A∩(B∪C)=A∩B∪A∩C

 論理和(∪)より論理積(∩)の方が演算の優先順位が高い。
結合法則 A∪(B∪C)=(A∪B)∪C
A∩(B∩C)=(A∩B)∩C
ド・モルガンの定理de Morgan's theorem
アーガスタス・ド・モルガンAugustus de Morgan)が考案した有名なブール代数の定理
ド・モルガンの定理(1)
ド・モルガンの定理(2)

ところで、このようなブール代数LANではどのような演算に使われるでしょうか。
ネットワーク・アドレスサブネット・アドレスを求めるために論理積(AND)が使われます。
ホストアドレスとネット・マスクの論理積(AND)を行ってネットワーク・アドレスを求めることができ、ホストアドレスとサブネット・マスクの論理積(AND)を行ってサブネット・アドレスを求めることができます。


ページトップ



10進数・16進数・2進数の相互変換計算の方法について

LANでは、ネットワーク・アドレスサブネット・アドレスの計算を行ったり、LANを流れるフレームやパケットを分析する時に16進数や2進数を見ることがあります。
Windows®などに付いている電卓やヘキサ電卓を頼るのも良いのですが、やはりネットワーク技術者なら、10進数や16進数や2進数の相互変換計算ぐらい自分でも計算できる必要があるでしょう。
私(ケロ丸)は、昔制御系のコンピュータプログラマーでもあったので、ヘキサ電卓をよく持ち歩いていました。
これを持っていると、いつでも10進数や16進数や2進数の相互変換計算が楽にできます。
仕事の能率も上がります。
ヘキサと言いましたが、ヘキサデシマルの略で、hexadecimal number(16進数)のことです。
16を基数にする数を言います。
2進数なら2を基数にします。
10進数なら10を基数にします。
16進数は、1〜9までは10進数と同じですが、10〜15がA,B,C,D,E,Fの順になり、10進数で16になると桁上がりして16進数で10になります。
ネットワーク技術者や情報処理技術者なら、手計算でもできるようにしましょう。
まず、365という10進数の数は、10進数ではどのような数の組み合わせから成り立っているのかを見ましょう。

365

次に、365を16進数に変換します。
変換するには、以下の図のように計算するとできます。

上の図を見ると割り算とその余りの手計算を10進数で行っています。
上の図の赤い矢印の方向に数を並べれば変換でき、赤い16Dという数字が変換後の16進数です。
10進数の時と同様に16進数ではどのような数の組み合わせから成り立っているのかを見ましょう。

16D

この式を知っていると、16進数から10進数に変換するのが容易です。

今度は10進数を2進数に変換してみましょう。
35を2進数に変換します。
変換するには、以下の図のように計算するとできます。

上の図を見ると2進数でも割り算とその余りの手計算を10進数で行っています。
上の図の赤い矢印の方向に数を並べれば変換でき、赤い100011という数字が変換後の2進数です。
0001という2進数で、先頭の赤い1が最上位桁でMost Significiant DigitMSD)と呼ばれ、最後の青い1が最下位桁でLeast Significiant DigitLSD)と呼ばれます。
これとは逆に2進数を10進数に変換するには、以下の式から容易に変換できます。



ページトップ



1の補数2の補数の計算方法について

まず、最初に1の補数の計算方法について説明します。
例えば、IPパケットに含まれるIPヘッダーのチェックサムだったら16ビットなので、16進数で最大値はFFFFです。
2進数なら16ビット分全部1です。
今ある数の1の補数を求めたいわけですから、そのある数をaとすると、aのすべてのビット(16ビット分全部)反転させると1の補数が求まります。

b=aの全ビット反転
例えば、aが2進数で0000 0000 0000 0101だったとします。この値は10進数でです。
すべてのビットを全部反転させると、以下のようになります。

b=1111 1111 1111 1010

上記のように反転すると、0は1、1は0というにように全部置き換えます。
2進数の1桁がビットという情報の最小単位となります。
これでbが1の補数になります。
今度は、2の補数です。
1の補数さへわかればこれは簡単です。
1の補数に1を足すと、2の補数になります。
つまり、2の補数は、5だったら−5になるので、ある正の数があったらその負の数は、2の補数を計算すれば求まります。
これでおわかり頂けたと思います。



ページトップ



チェックサムの具体的な計算方法の紹介

この項目では、TCP/IPにおけるチェックサムについて説明します。
チェックサムは、IPヘッダー、TCPヘッダー、及び、UDPヘッダーに含まれています。
IPヘッダーにあるチェックサムは、ヘッダーだけしか保証しませんが、TCPヘッダーとUDPヘッダーにあるチェックサムは、ヘッダーだけではなく、データも保証します。
また、IPヘッダーやTCPヘッダーにあるチェックサムを無効にすることはできませんが、UDPヘッダーにあるチェックサムだけは、不要なら無効にできます。
次に、チェックサムの計算方法について説明しますが、この項目ではIPヘッダーにあるチェックサムを対象とします。
実際にIPヘッダーの各フィールドにデータを入れてみます。
IPヘッダーの後ろにUDPヘッダーが続くと仮定すると、8バイトなので、これを計算に入れてパケット長の値を入れました。

一般的なIPヘッダー(オプションなしのケース)
フィールド名称【フィールドサイズ:単位はビット】設定するデータ(16進数表示)
バージョン【4】
ヘッダー長【4】
サービスタイプ【8】
パケット長【16】1C
識別子【16】
フラグ【3】
フラグメント・オフセット【13】
TTL【8】40
プロトコル番号【8】11
ヘッダー・チェックサム【16】
送信元IPアドレス【32】C0A80002
宛先IPアドレス【32】C0A80001

送信元IPアドレスは、上の例だと10進数で192.168.0.2です。
また、宛先IPアドレスは、上の例だと10進数で192.168.0.1です。
ヘッダー・チェックサムのフィールドは、チェックサムの計算前は赤字で示したようにゼロにしておきます。

チェックサムの計算方法について説明します。
IPヘッダーの各フィールドを16ビットずつ変数に入れて、全部足します。ただし、16進数で計算します。
足した結果はオーバーフローしないように32ビットの変数に入れます。
ここまでの計算を16進数で書くと以下のようになります。

4500+001C+0000+0000+4011+0000+C0A8+0002+C0A8+0001=20680

計算結果が16進数で0680になりました。
今度は、16ビットとしてオーバーした(桁上がりした)分の値が16進数でであることがわかります。
この桁上がり分をカットして、カットした値に以下のように加算します。

06800682

加算結果の06821の補数和と言います。
この0682は16進数なのでわかりやすく2進数にすると、0000 0110 1000 0010になるので、この値を反転すると1111 1001 0111 1101になります。
1111 1001 0111 1101を16進数にすると、F97Dになり、この値がチェックサムになります。
最後に、F97Dをヘッダー・チェックサムのフィールドに設定します。
これで送信します。

今度は、このIPヘッダーを含むIPパケットを受信します。
受信したら早速正しくデータが送られてきたかどうかをチェックします。
今度は、IPヘッダーの内容が以下のようになっているはずです。

一般的なIPヘッダー(オプションなしのケース)
フィールド名称【フィールドサイズ:単位はビット】設定するデータ(16進数表示)
バージョン【4】
ヘッダー長【4】
サービスタイプ【8】
パケット長【16】1C
識別子【16】
フラグ【3】
フラグメント・オフセット【13】
TTL【8】40
プロトコル番号【8】11
ヘッダー・チェックサム【16】F97D
送信元IPアドレス【32】C0A80002
宛先IPアドレス【32】C0A80001

送信側と同様に計算すればチェックできます。

4500+001C+0000+0000+4011+F97D+C0A8+0002+C0A8+0001=2FFFD

計算結果が16進数でFFFDになりました。
16ビットとしてオーバーした(桁上がりした)分の値がまた16進数でであることがわかります。
この桁上がり分をカットして、カットした値に以下のように加算します。

FFFDFFFF

御覧のように結果はFFFFになりました。
FFFFになれば、IPヘッダーにエラーがなかったことになります。
FFFFでないと通信中にエラーが発生したことになります。



ページトップ



ネットワーク・バイト・オーダーNetwork Byte Order)について

インテル系CPUでは、リトル・エンディアンlittle endian)という下位バイトから転送する形式を採用しています。
従って、2バイト整数で16進数で1E3Fがあったとすると、3F1Eの並びで転送されます。
ところが、上位バイトから転送するビッグ・エンディアンbig endian)という形式もあり、こちらはアップルのPowerPC搭載のMacintoshで採用されています。
このビッグ・エンディアンは、ネットワークを利用するソフトウェアなどではネットワーク・バイト・オーダーNetwork Byte Order)とも呼ばれています。
LANでは、イーサーネットの場合、MACフレームの先頭バイトからすべて上位バイトから転送されるので、ネットワーク・バイト・オーダーが使用されます。
ただし、この場合のイーサーネットとは、ファーストイーサーネットギガビットイーサーネットも含みます。
リトル・エンディアンを使用しているインテル系CPUを対象にしたプログラムをC言語で作成している場合、ソケットAPIhtons()htonl()という変換関数が用意されています。


ページトップ
IP関連補足[メニュー]へ戻る
サイトマップ(LAN技術研究室の案内図)
ネットワーク技術用語集へ行く
LAN技術研究室のトップページ

© 2007 Toyozi Masuda All rights reserved.