Linux道場ネットワーク編
第3回ネットワークに関連する用語とコマンド
はじめに
今までに「ネットワークの成り立ち」、「プロトコル」について取り上げました。 今回は、ネットワークに関連する用語についてと、実際にLinux OSを使用し、コマンドを入力してネットワークインターフェースの 設定状態の確認を行います。
ネットワークに関連する用語について
ネットワークでは数多くの用語が使われます。Linux OSを使用してコマンドを実行する前に、予め理解しておきたい用語について説明します。
IPアドレス(用語)について
TCP/IPのネットワークでは必ず「IPアドレス」という単語が出てきます。IPアドレスとは「アドレス」(address)の名が示す通り、TCP/IPネットワークに接続している各ホスト※の場所を示す(識別する)「住所・番地」です。IPアドレスにはバージョンがあり、現在の主流はIPv4というバージョンです。次のバージョンであるIPv6が、試験的に導入され始めています。
- ※TCP/IPネットワークではIPアドレスを持つ機器全般を「ホスト」とよびます。IPアドレスは、このホストのネットワークインターフェイス(NIC等)に割り当てられます。
ネットワークアドレスとホストアドレス
IPアドレスは「ネットワークアドレス」と「ホストアドレス」から成り立ちます。IPアドレスの中で、個々の組織が管理するネットワークを識別する部分を「ネットワークアドレス」といい、ホストを識別する部分を「ホストアドレス」といいます。
IPアドレス(IPv4)の表記について
IPアドレス(IPv4)は「ネットワークアドレス」と「ホストアドレス」を繋げた4バイト(32ビット(「0」と「1」(2進数)を使った32桁))で構成されます。通常IPアドレスは32桁の数列を8桁(8ビット)ずつ4つに区切り、10進数に変換して「.」(ドット)でつなげて表記します。(図1.参照)
図1.IPアドレスの表記
「IPアドレス」のクラスについて
IPアドレスはネットワーク部に使われるビット(桁数)よって「クラスA」「クラスB」「クラスC」「クラスD」「クラスE」に分類されます。クラスによってネットワークアドレスの先頭のビットの値が決まっており、その値によってIPアドレスのクラスを判断できます。このクラスを判断する先頭のビットをクラス識別ビットといいます。
(クラス識別ビット(ネットワークアドレスの先頭) クラスA 「0」、クラスB「10」、クラスC「110」、クラスD「1110」、クラスE「1111」)このクラス識別ビットを含んだネットワークアドレスが8ビットのアドレスを「クラスA」、16ビットを「クラスB」、24ビットを「クラスC」として分類します。「クラスD」と「クラスE」は特殊な場合のみ使われ、通常では使用されません。
クラスに応じて割り振ることのIPアドレス数は、ホストアドレスに割り当てられるビット領域分になります。理論上ではクラスAで「1677216」(2563)個、クラスBで「65536」(2562)個、クラスCで「256」(2561)個になるのですが、ネットワークを現すネットワークアドレスとネットワーク内に一斉送信を行なう為のブロードキャストアドレスとして予約されているので、「理論上割り当てられる個数-2」が、実際に割り当てられることのできるIPアドレスの個数になります。(表1参照 表1中にあるサブネットマスクについては後述参照)
表1.アドレスクラス
サブネットマスクについて
サブネットマスクはIPアドレスのネットワークアドレスとホストアドレスの切り分けに使用します。IPアドレスと同様に32ビット(「0」と「1」(2進数)を使った32桁)で構成されます。サブネットマスクはIPアドレスのネットワークアドレスを示すビットを「1」で示し、「ホストアドレス」を示すビットを「0」で示し、表記はIPアドレスと同様に、32桁の数列を8桁(8ビット)ずつ4つに区切り、10進数に変換して「.」(ドット)でつなげて表記します。図2ではクラスA(ネットワークアドレス8ビット+ホストアドレス24ビット)のサブネットマスクの表記について示しています。
図2.サブネットマスクの表記(クラスA)
ここで例としてクラスCのIPアドレス「192.168.1.100」のサブネットマスクについて考えてみます。
結論から言えばクラスCのIPアドレスは、ネットワークアドレスが24ビット、ホストアドレスが8ビットなのだからサブネットマスクは「255.255.255.0」になるのですが、なぜそうなるのかを確認してみたいと思います。
IPアドレス「192.168.1.100」(10進数)を2進数にすると「11000000101010000000000101100100」になります。クラスCの場合、 (クラス識別子を含めた)先頭24ビットをネットワークアドレスになり、残り8ビットがホストアドレスになります。
サブネットマスクはネットワークアドレスを示すビットを「1」、ホストアドレスを示すビットを「0」で表すので、クラスCのIPアドレスに当てはめた場合、先頭24ビットを「1」、残り8ビットを「0」、すなわち「11111111111111111111111100000000」になります。
サブネットマスクの表記については前述した通り、8ビットずつ区切り、「.」を加えて10進数に変換するので「11111111.11111111.11111111.00000000」 は 「255.255.255.0」になります。(表2参照)
(2進数「11111111」は10進数に変換すると「255」
( 27 +26 +25 +24 +23+22+21+20 = 128+64+32+16+8+4+2+1 = 255)
IPアドレスとサブネットマスクを10進数のまま理解しようとすると難しいですが、2進数に変換してみるとその本質が分かりやすくなると思います。(10 進数と2進数の変換はコンピュータを扱う上で必ず必要になりますので、変換方法が曖昧な場合は、これを機に10進数⇔2進数変換を復習することをお勧めします。)
表2.IPアドレスとサブネットマスク
グローバルアドレスとプライベートアドレス
IPアドレスは、「グローバルアドレス」と「プライベートアドレス」の2つに分類されます。ローカルエリアネットワーク内(LAN)で自由に使えるIPアドレスを「プライベートアドレス」といい、プライベートアドレスを除いたWAN(インターネット)で割り当てられるIPアドレスを「グローバルアドレス」といいます。グローバルアドレスはNIC(日本ではJPNIC※)よって割り当てるIPアドレスが重複しないように管理されています。
- ※JPNIC = Japan Network Information Center (日本ネットワークインフォメーションセンター)
IPアドレス等のネットワーク資源を扱う国内唯一の組織。
表3.プライベートアドレスの範囲
CIDRについて
CIDRとはClassless Inter-Domain Routingの略称で、前述したクラスに関係なくIPアドレスを割り当てる方法です。
ここでは、CIDRを使用したときの例として、ネットワークアドレス「200.170.70.16」、サブネットマスク「255.255.255.240」のネットワークについて確認してみます。まずサブネットマスク「255.255.255.240」を2進数に変換すると「11111111111111111111111111110000」になります。2進数のビットの値から下位4ビットがホストアドレスであることが分かります。この場合の理論上のホストアドレスの割当数は24 (4ビット)個 = 16個なります。
実際に割り当てることのできるホストアドレス数は、ネットワークアドレスとブロードキャストアドレスを引いた14個になります。
ネットワークアドレス「200.170.70.16」なので、ホストアドレスの割振り範囲としては「200.170.70.17」から〜「200.170.70.30」(14個)になり、ブロードキャストアドレスは末尾の「200.170.70.31」になります。今回は例として、サブネットマスクを「255.255.255.240」に設定(ホストアドレスに割り当てるビット数を少なく)した場合のネットワークについて取り上げましたが、ホストアドレスに割り当てるビット数を多くすれば、割り当てられるホストアドレス数は多くなります。実際にCIDRを使用したネットワークの構築を行なう場合、ネットワーク内に接続する最大ホスト数からサブネット値を算出し、設定を行います。
表4. CIDR使用時のサブネットマスク(ホストアドレスビット数8〜2)
「(デフォルト)ゲートウェイ(アドレス)」について
(デフォルト)ゲートウェイ(アドレス)とは、他のネットワークと通信を行なう為の出入り口です。LANとLANやLANとWANといった異なるネットワーク間で通信を行う場合、間に必ずゲートウェイ(機器)(ルーターと表記する場合もあり)が入ります。
図3は、ネットワークAのゲートウェイアドレスとして「192.168.0.1」をネットワークBのゲートウェイアドレスとして「192.168.1.1」にしています。ネットワークAにあるIPアドレス「192.168.0.100」のホストからネットワークBにあるIPアドレス「192.168.1.100」のホストに対して通信を行なう場合、データの流れは「192.168.0.100」→「192.168.0.1」(ネットワークAのゲートウェイ)→ 「192.168.1.1」(ネットワークBのゲートウェイ)→「192.168.1.100」になります。
- ※ROUTER(ルーター)とは異なるネットワーク間を接続するときに使用し、IPアドレスと経路制御表を参照してネットワーク間のデータ(パケット)を中継します。経路制御を「ルーティング」、経路制御表を「ルーティングテーブル」といいます。
表3.プライベートアドレスの範囲
「MACアドレス」について
ネットワーク接続に使用する機器には、識別を行なう為に重複しないハードウェア固有のアドレスを製造時に割り当てられます。これを「MACアドレス」といいます。
ネットワークに関連する「コマンド」について
ここからは実際にLinux OSを使用して、ネットワークの設定を確認するコマンドを実行したときの内容を取り上げます。
今回使用したLinux OSは「Linux version 2.6.18-6-686(Debian)」です。(使用しているLinuxのVersionは「uname -a」、または「cat /proc/version」コマンドで確認できます。)
「ifconfig」コマンドについて
「ifconfig」コマンドはネットワークインターフェースに設定されたIPアドレスやサブネットマスクなどの情報を表示します。
Linux OSにログインを行い、「/sbin/ifconfig」と入力します。図4は「ifconfig」コマンドを実行したときの画面です。
表5は出力項目について纏めた表です。
図4.「/sbin/ifconfig」実行画面
表5.ifconfigで出力される項目
「route」コマンドについて
「route」コマンドはホストに設定されているルーティングテーブル情報を表示します。ルーティングテーブル情報からデフォルトゲートウェイの設定状態を確認できます。図5は「route」コマンドを実行したときの画面です。
表6は出力項目について纏めた表です。(「netstat-r」コマンドもルーティングテーブル情報を表示します。)
図5.「route」実行画面
表6.ルーティングテーブル情報
おわりに
今回はネットワークに関する基本的な用語とネットワークの設定状態を確認する「ifconfig」と「route」コマンドについてとりあげました。次回は操作対象の端末を別の端末から操作する「リモート接続(TELNET・SSH)と、他のネットワークに関係するコマンドについて取り上げます。
補足
2進法について
コンピュータの世界では、全て2進数で表現されます。2進数とは「0」と「1」の二つの数字を使って数(数量)を表現することです。2進数では「2」になると桁上がりをします。
私たちが通常使用する10進数(「10」になると桁上がり)では、「0」(ゼロ)から順に1を加えていくと、「0」,「1」, 「2」, 「3」, 「4」, 「5」・・「10」,「11」・・・と続きますが2進数の場合、「0」,「1」の次は「2」ではなく、位が上がり、「10」になります。「10」の次は「11」になるのですが、その次は桁が上がり「100」になります。
2進数で「0」(ゼロ)から順に1を加えていくと「0」,「1」,「10」,「11」,「100」,「101」,「110」, 「111」,「1000」・・・のようになります。
(16 進数では「0」,「1」,「2」,「3」,「4」,「5」,「6」,「7」,「8」,「9」,「A」,「B」,「C」,「D」,「E」,「F」の16個の数字(アルファベット)を使って表現します。「A」は10進数の「10」を意味し、同様に「B」=「11」,「C」=「12」,「D」=「13」, 「E」=「14」,「F」=「15」を意味します。16進数では16になると桁上がりをします。「9」の次は「A」になり、「F」の次に「10」になります。2桁目以降も同様です。「19」の次は「1A」になり、「FF」の次は「100」になります。)
2進数から10進数への基数変換について
基数変換は「進数の重み」が重要になります。重みの例として10進数の「1021」という数字を考えています。
「1021」(10進)という数は1×103 + 0×102 + 2×101 + 1×100 と書き換えることができます。(または1×1000 + 0×100 + 2×10 + 1×0) 「進数の重み」とは格桁に掛けられる値(式中の赤文字(103(1000), 102(100)(10進数の場合))を指します。
10進数の各桁の重みは10の(n-1)乗になります。基数とはこの重みの基本の数値を言います。(10進数の重みは10)
2進数もでも考え方は10進数と同じです。2進数の場合、各桁の重みは2の(n-1)乗になります。
(累乗とは同じ数または文字を何度か掛け合わせる(掛け合わせた積の)ことです。「a」という数を3回掛けた場合、a×a×a = a3 (aの3乗)になります。 また、どの数でも0乗の値は1になります。)
2進数から10進数への基数変換は、格桁に2進数の重みを掛けて足すことで求めることができます。表7は2進数の各桁の重みと10進数で表した時の表です。
(表中にある桁数8のときの27 (2の7乗)とは「2」を7回掛けた時の値(2×2×2×2×2×2×2)なので「128」になります。)
表7. 2進数各桁の重みと10進数表示
実際に2進数から10進数の基数変換を行ってみます。例として2進数の「1111」という数字を10進数に基数変換してみます。表7を参照し、「1111」(2進)の各桁に重みをつけると1×23 +1×22 + 1×21 + 1×20 になります。
各桁の重みを10進数で表すと、1×8 +1×4 + 1×2 + 1×1 になり、結果として8 + 4 + 2 + 1 = 「15」になります。
この「15」が2進数「1111」の10進数での値になります。このようにして2進数から10進数の基数変換を行います。
10進数から2進数への基数変換について
次に10進数から2進数への基数変換について説明します。10進数から2進数に基数変換するには、10進数の数値を2で割り続け、最後の余りを先頭に下から順に余りを並べることで求めることができます。
10進数の「13」を2進数に基数変換してみます。計算の流れは図6を参照してください。
図6. 10進数から2進数への基数変換計算手順
10進数の「13」は2進数で「1101」になります。確認の為、2進数「1101」を10進数に基数変換してみます。
表7を参照し、重みをつけると1×23 +1×22 + 1×21 + 1×20 = 8 + 4 + 0 + 1 = 「13」になり、変換結果が正しいことが確認できます。
16進数の基数変換について
16進数への基数変換、16進数からの基数変換も重みが異なるだけで基本的な手順は同じです。
16進数の「ABCD」を10進数に基数変換してみます。16進数なので各桁の重みは16の(n-1)乗になります。
「ABCD」(16進数)に重みをつけると A×163 + B×162 + C×161 + D×160 になります。
但し、16進数の場合「A」=「10」,「B」=「11」,「C」=「12」,「D」=「13」を表すので、10×163 +11×162 +12×161 +13×160 になり、10×4096 +11×256 +12×16 +13×1 = 40960 + 2816 + 192 + 13 = 「43981」になります。
この「43981」が16進数「ABCD」の10進数での値になります。
10進数から16進数への基数変換の手順も10進数から2進数に基数変換と同じです。
10進数の数値を16で割り続け、最後の余りから下から順に余りを並べることで求めることができます。
ここで10進数の「15000」を16進数に基数変換してみます。計算手順は図7を参照してください。
図7.10進数から16進数への基数変換計算手順
10進数の「15000」は16進数で「3A98」になります。確認の為、16進数「3A98」を10進数に基数変換してみます。
3×163 + A×162 + 9×161 + 8×160 = 3×4096 +10×256 +9×16 +8×1 = 12288 + 2560 + 144 + 8 = 「15000」になり、変換結果が正しいことが確認できます。
IPアドレスの計算をはじめ、コンピュータを扱う上で基数変換は必ず必要になります。
任意に2進数⇔10進数⇔16進数の基数変換が行えるように慣れておくことをお勧めします。
表8は10進数/2進数/16進数の対応表です。
表8. 10進数 2進数 16進数対応表
コラム執筆/森谷 仁
マイクロテクノロジー株式会社 管理本部 情報システム室
〒101-0021
東京都千代田区外神田5-1-2末広ビル
TEL 03-3833-8080