■IPアドレスとプロトコル■
ネットワークを介して通信を行う上での約束事のことは「プロトコル」といいます。コンピューターなどのデバイス同士がデータをやりとりするためには、両者は同じプロトコルを使う必要があります。本節ではインターネットの標準プロトコルであるTCP/IPプロトコルの概要について説明します。
■TCP/IPはネットワークの標準プロトコル
初期のネットワークでは、ネットワークプロトコルの標準規格といったものは、あまり一般的ではありませんでした。一例を挙げれば「Windows」「Macintoch」のファイル共有機能にはそれぞれ独自のプロトコルが 使われていたため、たとえ同じLANに接続されていたとしても、それらの間でデータのやりとりを行うのは容易ではなかったのです。
それに大きな変革をもたらしたのがインターネットの爆発的な普及です。インターネットの世界では「TCP/IP」と呼ばれるプロトコルが使用されます。そのことは、インターネッにアクセスするためにはコンピューターにTCP/IPプロトコルを実装する必要があることを意味します。そのような経緯から次第にTCP/IPがインターネットに限らずにネットワークの世界における事実上の標準プロトコルとなってきました。現在ではほとんど全てのOSにTCP/IPが標準で組み込まれております。なお、TCP/IPという用語は(Transmission Control protocol)とIP(Internet Protocol)という2つのプロトコルの名称を組み合わせたものですが、実際には、その2つを中核とした多くのプロトコルから構成されるプロトコル群の総称です。そのことについてはのちほど説明します。
・TCP/IPのプロトコル構造
コンピューターの世界のネットワーク上で安定した通信を行うためにはプロトコルを詳細に決めて、それに従ってデータのやりとりをする必要があります。その際にプロトコルを複数の段階に分けて定義することが一般的に行われております。ネットワークプロトコルを階層化することによって、いずれかのレイヤーのプロトコルに変更があっても、他のレイヤーのプロトコルはそのまま使用することができるというメリットが生まれます。また、新たにプロトコルを作成する場合にも、上下のレイヤーのみを意識するだけですむのです。
一般的に使用されているTCP/IPプロトコル階層のモデルです。
TCP/IP階層モデル
・ネットワークアクセス層(Network Access Layer)
最もハードウェアに近いレイヤーで、実際のネットワークインターフェイス間のデータのやりとりを管理します。この代表的なプロトコルは、なんといってもLANの世界では広く利用されているイーサーネット(Ethernet)でしょう。また、電話回線を通してインターネットに接続するPPP(Point To Point Protcol)などもこのレイヤーの位置します。
・インターネット層(Internet Layer)
インターネット層は「IP層」とも呼ばれ、TCP/IPプロトコル群の中核の1つであるIP(Internet Protocol)と、それを補完するいくつかのプロトコルから構成されております。送信先のIPアドレスによって適切な経路を判断し、目的地までデータを運ぶというのが主な役割です。但し、このレイヤーでは単にデーターを送りだすだけで、データーが相手に確実に届いたかは保証されません。それは上位のプロトコルの役割になります。
・トランスポート層(Transport Layer)
トランスポート層は、TCP(Transmission Control Protocol)とUDP(User Datagram Protocol)という2つのプロトコルから構成され「TCP/UDP層」とも呼ばれています。両者の最も大きな相違はデーターの信頼性を確保するかどうかになります。TCPはデーターの検証を行うのに対してUDPは行いません。この下のレイヤーであるインターネット層のプロトコルは、データーが相手に届いたかなどの検証は行わないためデーターの伝達を保証するのがTCPの大切な役割になります。ただし、ケースによっては信頼性よりも速度が優先うされる場合もあるため、高速性を重視したUDPが用意されております。
・アプリケーション層(Application Layer)
アプリケーション層はユーザーに最も近いレイヤーです。その名の示す通りアプリケーションを構築するためのプロトコルと考えるとよいでしょう。このレイヤーには数多くのプロトコルがあり、その数は現在も増え続けています。例えば、Webで活躍するHTTP(HyperText Transfer Protocol)やメールの送受信を行うPOP(Post Office Protocol)やIMAP(Internet Messages Access Protocol)といったプロトコルが位置しております。
・TCP/IPプロトコル群
TCP/IPプロトコル群を細かく分けると100以上の種類があり、今でも新たなプロトコルが生み出されています。下記の図にTCP/IPにおける代表的なプロトコルを各階層的な概略図を示します。
TCP/IPのプロトコル群
・データーはパケットに分けて送られている
一般的にネットワークを流れるデーターの単位のことを「パケット」と呼ばれています。「パケット」とは日本語にすれば小包に値します。現在の世界の小包と同じように各パケットには送信先と送信元を示す「ヘッダー」が付けられております。「パケット」を小包の中身にたとえた場合、「ヘッダー」はその荷札のようなものになります。ネットワークプロトコルは、この「ヘッダー」の情報を頼りに「パケット」を正しい宛先に届ける仕組みになっております。
データーを送信する場合、アプリケーションプログラムのデーターは階層を下に移動します。このとき各層は自分の層に応じたヘッダーをふかしていきます。逆に受信する場合には、データーの下の層から上の層へ移動していきます。このとき各層は自分の層のヘッダーを解釈して上の層に渡す前に取り除き、最終的にアプリケーションプログラムにはデーターのみが渡されます。
なお、アプリケーションプログラムが送信したデーターが、必ず1つのパケットになるわけではありません。プロトコルで規定されているサイズによって複数のパケットに分割される場合も少なくありません。このときにTCPのパケットの場合には、ヘッダー部分にパケットの順番が記述されているのです。受信側ではそれを見て元のデーターを組み立てます。それに対して、UDPではヘッダー部分に順序は記述されていないためパケットが欠落する可能性があります。
■イーサーネットについて
現在LANの世界で最も広く使用されているネットワークプロトコルはイーサーネットになります。TCP/IPのプロトコル階層で言えば、イーサーネットはネットワークアクセス層を担当するインターフェースになります。
・イーサーネットの規格
近年、転送速度が100Mbpsの100Base-T(ファーストイーサーネット)という規格が主流でした。最大ケーブルの長さは100mです。販売されているほとんどのパソコンには100Base-T対応のネットワークポートが標準で用意されています。現在では1Gbpsを搭載する1000Base-T(ギガビットイーサーネット)も普及し始めております。いずれもケーブルとしてはコネクターにRJ-45を使用したツイストペアケーブルを使用します。これは普通のパソコンショップなどでLANケーブル(UTPケーブル)として販売されており、簡単に入手できます。但し、100Base-Tでは「カテゴリ5」、1000Base-tでは「カテゴリ5e」(エンハンストカテゴリ5)という規格以上のケーブルを使用する必要があります。このカテゴリーはLANケーブルの品質を示す用語で、数が多いほど品質が高くなっております。最近のケーブルのほとんどがカテゴリ5以上です。
・ハブについて
100Base-T、1000Base-TによるLANの接続形態は「スター型」と呼ばれるもので「ハブ」と呼ばれるネットワーク機器を中心として各マシンをLANケーブルで接続します。LANケーブルにはストレートケーブルとクロスケーブルがあります。ハブとコンピューターを接続する場合には、通常ストレートケーブルを使用します。また、2台のコンピューターを接続するだけならハブを使用しないのでクロスケーブルで直結することもできます。
・カスケード接続
ハブのポート数が足りない場合は複数台のハブを階層状に接続することができます。このことを「カスケード接続」と呼びます。カスケード接続を行うには、それぞれのハブの任意のポート間をクロスケーブルで接続します。ただし、たいていのハブはスイッチで極性を切り替えられるカスケード用のポート(アップリンクポート)が用意されているため、どちらか一方のハブはそのポートを使用すれば通常のストレートケーブルで接続することが可能です。
・スイッチングハブについて
「リピーターハブ」あるいは「ダムハブ」と呼ばれているタイプのハブでは、コンピューターが1対でやりとりをしているような場合でも、すべてのポートに信号が流れてしまうのです。その為に他のコンピューターはその間待たないと通信が行えません。その対策として開発されたのが「スイッチングハブ」です。「スイッチングハブ」ではどのポートにどのコンピューターが接続されているかをMACアドレスにより記憶しておいて、通信を行っているコンピューター同士を接続しているポートにしか信号を流しません。つまり、スイッチングハブを使用することにより、コリジョン(衝突)が起こりにくくなりネットワークを効率的に使用することが可能なのです。
また、イーサーネットは基本的に送信と受信を同時に行えない半二重通信(half-duplex)ですが、スイッチングハブは送信と受信に別ラインを使用しているため、全二重通信(full-duplex)が可能になっております。なお、最近のイーサーネットカード、ハブはネットワークスピードなどを自動的に切り替える機能(オートネゴシエーション機能)を持っており、10Base-t、100Base-T、1000Base-Tなどの速度の異なるインターフェイスをネットワーク内に共存させることができます。その場合、速度の遅い方に合わせられます。このことはカーネルのメッセージを表示する「dmesg」コマンドで確認できます。
・MACアドレスについて
イーサーネットではネットワーク内の個々のコンピューターを「MAC(Media Access Control)アドレス」と呼ばれているアドレスで識別されています。それぞれのコンピューターにはIPアドレスで区別されますから、それだけで十分かと思うかもしれません。ただし、IPアドレスはTCP/IPプロトコル階層でいうところのインターネット層のIPで管理されるアドレスです。その為にIPアドレスではその下のネットワークアクセス層での相手の特定ができなくなるのです。
したがって、1層のネットワークアクセス層でMACアドレスでコンピューターを識別し、2層のインターネット層でIPアドレスでコンピューターを識別するのです。
MACアドレスは6バイト(48ビット)の長さのハードウェアに固有のアドレスで、通常は1バイトごとに16進数で表記し、コロン「:」でつながれております。最初の3バイトは「ベンダーコード」と呼ばれIEEE(米国電気電子技術者協会)によって機器メーカーごとに割り当てられています。つまりベンダーコードを見ればメーカーが分かるようになっているのです。残りの3バイトはメーカーごとのシリアルナンバーのようなもので、同じ製品であっても重複しないようになっています。
Linuxの場合、「ifconfig」コマンドを実行するとMACアドレスを確認できます。「HWaddr」に続いて表示されるのがMACアドレスになります。
※MACアドレスは通常イーサーネットカード内のROMに書かれており、ユーザーが変更することはできません。ただし、当会員ページには書き換え方法を記載しております。
イーサーネットのパケットのことを「イーサーネットフレーム」と呼びます。イーサーネットパケットのヘッダーには送信先と送信元のMACアドレスが埋め込まれております。ここでMACアドレスはあくまでも同じネットワーク内のコンピューターを識別するためのアドレスです。ルーターで区切られた別のネットワークのコンピューターへネットワークフレームを送信することはできないのです。
・MACアドレスとIPアドレスの変換
送信先コンピューターは通常IPアドレスもしくはホスト名によって指定されております。そのために、なんらかの方法でIPアドレスとMACアドレスを変換する仕組みが必要となります。それを担当するのがインターネット層のARP(Address Resolution Protocol)プロトコルになります。変換テーブルは「ARPキャッシュ」と呼ばれるテーブルに保存されます。ARPキャッシュは「arp」コマンドで確認できます。
送信先のホストが変換テーブルに載っている場合には、その情報も使用してパケットを送ります。変換テーブルにない場合には、ネットワーク内の全てのホストにパケットを送る「ブロードキャスト」を使用してMACアドレスを問い合せます。逆にMACアドレスからIPアドレスへ変換を行うのがRARP(Reverse ARP)というプロトコルです。
■IPアドレスについて
インターネット層のプロトコル「IP」で相手のコンピューターを特定するのに使用されるIPアドレスの仕組みについて説明します。Webブラウザなどのクライアントでは、通常、相手のコンピューターをホスト名で指定しますが、そのホスト名はコンピューター内部ではIPアドレスに変換されているのです。
・IPアドレスの表記について
IPアドレスは32ビットのビットの並びです。ただし、そのままではとても分かりにくいので、通常は8ビットごとに区切られてピリオド「.」で区切った10進数で表記されているのが一般的です。
IPアドレスの表記
・ネットワークアドレスとホストアドレス
IPアドレスはネットワークを識別するネットワークアドレスと、そのネットワーク内のホストを識別するホストアドレスに分けることができます。例えば「192.168.1.10」というケースでは「192.168.1」がネットワークアドレスになり、残りの「10」がホストアドレスになります。
実際の世界にたとえれば、ネットワークアドレスの部分は町名までで、ホストアドレス部分は番地と覚えると分かりやすいでしょう。
・ネットワークを接続するルーター
IPアドレスのネットワークアドレスが同じ機器はデーターを直接やりとりすることが可能です。そのネットワーク範囲のことを「セグメント」と呼びます。それに対してIPアドレスのネットワークアドレスが異なるコンピューターは、異なるネットワークに属していると見なされ、それらが互いに通信するためには「ルーター」と呼ばれるネットワーク機器で仲介する必要があります。ルーターには通常2つ以上のネットワークポートが用意されており、それぞれのポートにIPアドレスが割り振られております。
また、ルーターはTCP/IP階層モデルでいえばインターネット層のパケット(IPパケット)を中継する装置です。イーサーネットのパケット(イーサーネットフレーム)を中継する装置ではないことに注意しておいて下さい。したがってIPアドレスによって送信先を判断します。
例えば、IPアドレス「192.168.0.10」のホストからルーターによって隔てられた「192.168.1.11」のホストへパケットを送るケースを取り上げます。この場合、IPパケットのヘッダーの送信先は「192.168.1.11」のままです。それに対してインフレームのヘッダー部分に埋め込められたMACアドレスは、ルーターを通過するたびに変更されるのです。まず「192.168.0.10」のホストから送信された段階ではルーターのMACアドレスが送信先になっておりますが、ルーターを通過した時点でホスト「192.168.1.11」のMACアドレスに付け替えられるのです。
・IPアドレスはネットワークインターフェースごとに割り振りられる
MACアドレスと同様に、正確にはIPアドレスもコンピューターごとではなくネットワークインターフェースごとに割り振られます。複数のネットワークインターフェースがあれば1台のコンピューターに複数のIPアドレスを割り振ることができるのです。そうすることでコンピューターをルーターとして使用することも可能です。
・サブネットマスク
IPアドレスの中のどこまでがネットワークアドレスで、どこからがホストアドレスであるかを示すのが「サブネットマスク」(ネットワークマスク)です。サブネットマスクは32ビットの中でネットワークアドレスのビットを「1」、ホストアドレスを「0」として表します。IPアドレスと同様に8ビットずつに分けてピリオド「、」でつないだ10進数で表記します。
例えば、IPアドレスが「192.168.1.10」、サブネットマスクが「255.255.255.0」であれば、ネットワークアドレスは「192.168.1」ホストアドレスは「10」になります。
この場合、32ビットのIPアドレスのうちネットワークアドレスに24ビット、ホストアドレスに残りの8ビットが使われています。そのためネットワーク内のホストに割り当てることができるIPアドレスは「192.168.1.0」~「192.168.1.255」の最大256個となります。
実際には「192.168.1.0」と「192.168.1.255」は特別のアドレスとして使用されるために、コンピューターに割り当てられるのは「256-2=254」となります。
なお、あるネットワークのセグメントを表す場合、ホストアドレスを「0」とし、その後に「/」で区切ってネットワークのビット数を記述する方法があります。たとえば、ネットワークアドレスが「192.168.1」で、サブネットマスクが「255.255.255.0」であるネットワークは、ネットワークアドレスが24ビットなので下記の通りに表記できます。
・ネットワークのクラス分けとCIDR
これまで述べたように、サブネットマスクはホストの最大数、つまりネットワークの規模を設定します。以前はネットワークはクラスA、クラスB、クラスCといったネットワークの規模に応じてクラスに分割されていました。下記の表がそれになります。
上記の表のように、IPアドレスの最初の4ビットを見れば、どのクラスに属しているのか、そしてネットワーク何ビットなのかは直ぐに分かります。ただし、この方式ではIPアドレスの割り当てが非効率になるという問題があります。例えば、1,000台程度のホストを接続したい組織の場合は256個のホストアドレスを使用可能なクラスCでは足りないために65,536個のホストアドレスを使用可能なクラスBとして登録をする必要があります。つまり、割り当て可能なIPアドレスが64,000個以上余ってしまいます。そこで最近ではクラスにとらわれないネットマスクを活用してネットワークを分割する「CIDR」(Classslessinter-Domain Routing)と呼ばれる方式が主流です。CIDRでは、IPアドレスを4、8、16、32・・・といった「2のn乗」個単位で割り当てられるためにIPアドレスの空間を効率よく使え、無駄が大幅に減りました。
・ネットワークアドレスとブロードキャストアドレス
IPアドレスには特別の意味を持つものがあります。ホストアドレスがすべて「0」のアドレスは「ネットワークアドレス」、ホストアドレスがすべて「1」のアドレスは「ブロードキャストアドレス」と呼ばれてコンピューターやネットワーク機器に割り当てることはできません。そのことを少し説明いたします。
・ネットワークアドレス
ビットが全て「0」ホストアドレスはネットワークそのものを表します。これを「ネットワークアドレス」と呼びます。たとえば、「192.168.1.0/8」のネットワークでは「192.168.1.0」がネットワークアドレスとなります。
・ブロードキャストアドレス
ビットが全て「1」のホストアドレスは「ブロードキャストアドレス」と呼ばれており、そのネットワークに属するすべてのホストに対して同時にデーターを送るために使用されま。たとえば、「192.168.1.0/24」のネットワークアドレスでは「192.168.1.255」がブロードキャストアドレスとなります。
・自分自身を示すループバックについて
自分自身を示すIPアドレスにループバックアドレスがあります。これはすべてのホストで共通で「127.0.0.0/8」が割り当てられていますが、通常は「127.0.0.0/8」が使用され、ホスト名は「localhost」になります。ループバックアドレスは主にネットワークサービスのテストなどに使用され、外部に送信されることはありません。※ループバックに宛てたパケットは自分自身に戻ってきます。
・グローバルIPアドレスとプライベートIPアドレスの役割
IPアドレスは「グローバルIPアドレス」と「プライベートIPアドレス」の2種類に分かれております。
「グローバルIPアドレス」は、インターネットに公開されているホストに割り振るユニークなIPアドレスです。「グローバルIPアドレス」には重複があってはいけないので、各自が勝手に割り振ることはできません。日本でIPアドレスの割り振りを管轄しているのはJPNIC(http://www.nic.ad.jp)です。JPNICは一定の条件を満たしたISP(Internet Service Provider)にIPアドレスの割り当て業務を委託しているので、一般にはISPと契約して、そこからIPアドレスの割り当てを受けることになります。もちろん、JPNICが管理されているのはIPアドレスのネットワークはアドレス部分のみなので、そのネットワーク内のホストアドレスは自由に割り当てることができます。一方、プライベートIPアドレスは、インターネットに流さないこと条件、LAN内に限って自由に割り振りかえってよいことになっているIPアドレスです。
プライベートIPアドレスの種類
上記は、通常、社内のファイアウォールの内部、家庭でもブロードバンドルーターの内部のコンピューターにはプライベートIPアドレスが割り当てられております。このケースのクラスCの「192.168.0.0/24」もしくは「192.168.1.0/24」を使用するように設定されております。
・プライベートIPアドレスとグローバルIPアドレスの変換
プライベートIPアドレスのパケットは、その性質上インターネット上に流すことはできません。そのために、LAN側のコンピューターをインターネットに接続するためには、プライベートIPアドレスとグローバルIPアドレスを変換する仕組みが必要になってきます。それには「NAT」「IPマスカレード」という方法があります。
「NAT」はグローバルアドレスとIPアドレスを1対1に変換します。また、「IPマスカレード」は1つのグローバルアドレスを複数のプライベートアドレスで共有します。
最近では、ルーターは業務用に限らず家庭用のブロードバンドルーターでも「NAT」や「IPマスカレード」といった機能が付いているものがほとんどです。特に「IPマスカレード」では、複数のコンピューターを同時にインターネットに接続するための必須の機能です。
・DHCPによるIPアドレスの自動割り当て
各コンピューターのIPアドレスは自分で設定するほかに、DHCP(Dynamic Host Configuration Protocol)というプロトコルによって自動設定することもできます。DHCPはLANネットワーク内のマシンが起動した際にあらかじめプールしてあるIPアドレスを割り振るサービスです。ブロードバンドルーターにはたいていの場合、DHCPサーバーの機能が付属されております。なお、サーバーとして運用するマシンの場合は一般的にDHCPによってIPアドレスを自動的に割り当てするべきではありません。それは、起動するたびにIPアドレスが変わってしまうとクライアントからアクセスができなくなってしまうからです。
・IPアドレスとホスト名
インターネット上のコンピューターには全てグローバルIPアドレスが割り振られております。ただし、ユーザーがネットワークを介してコンピューターにアクセスする場合は「209.218.xxx.29」のようなIPアドレスを直接指定するより「www.fxsl.biz」のようなホスト名を使用するケースがほとんどです。このIPアドレスとホスト名の変換は「DNS」という機能により集中管理する方法と、各コンピューターごとに「/etc/hosts」ファイルで管理する方法が一般的です。
・DNSについて
インターネット上のコンピューターのホスト名とIPアドレスの対応は「DNS」(Dynamic Name System)と呼ばれるデーターベースシステムによって管理されております。DNSデーターベースを管理するサーバーを「DNSサーバー」(ネームサーバー)と呼びます。ただし、すべてのコンピューターの名前を1つのDNSサーバーで管理していたのでは、とても世界中からの問い合わせに応じることは不可能です。また、刻々と変化するコンピューターの情報をリアルタイムで更新するということも難しいでしょう。そのためにDNSはルートサーバーを頂点とする階層構造の分散型データーベースシステムとして構築されております。各DNSサーバーは自分が管理するドメインの情報だけを持っております。それ以外のドメインの問い合わせに関しては、ほかのDNSサーバーと連携してクライアントに回答をするのです。
・/etc/hostsファイルによる管理
数台のマシンで構築されているLANのように、DNSサーバーを構築する必要もない小規模ネットワークのケースでは、個々のマシンでホスト名とIPアドレスの記述されているテキストファイルを用意する方法もしばしば使用されます。Linux等のUNIX系のOSでは、ホスト名とIPアドレスの対応を管理する「/etc/hosts」になります。実際に見てみましょう。
■ポート番号とサービスに関して
ネットワーク上の個々のコンピューターはIPアドレスで識別されております。コンピューター内で動作しているそれぞれのネットワークサービスはポート番号によって識別されております。例えば、マンションにたとえたケースではIPアドレスは住所、ポート番号は部屋番号のようなものです。
・ポート番号とは
TCP/IPの階層モデルでいえば、データーを目的のホストまで届けるのはインターネット層のIPが担当します。その後、データーを目的のアプリケーションに届けるのはトランスポート層のTCPとUDPの役割になります。サーバーとして使用されるコンピューターでは、Webサーバーやメールサーバーなど、さまざまなネットワークサービスが立ち上がっていることがあります。そのため、ホスト内に届けられたデーターはなんらかの方法で接続するサービスを識別する必要があります。その目的で使用されるのが「ポート番号」と呼ばれる番号です。ポート番号は16ビット長の数値(0~65535)で表します。
・Well-knownポートについて
前述のどのサービスが基本的にどのポートを使用しているかを決めておくと接続ポート番号を気にしなくするために、あらかじめ特定のサービスの為に予約されたポート番号があります。それらのポート番号のことを「Well-knownポート」と呼びます。Well-knownポートは0~1023番までの範囲となります。それらの例を下記に示します。
例えば、WebサイトにアクセスするためのWebブラウザではURLを指定しますが、URLは正式には次のような書式になります。
WebサーバーのWell-knownポートは「80」です。WebブラウザはそのWell-knownの番号を知っているポート番号を省略した場合には「80ポート」がアクセスされるわけです。
・クライアント側はランダムポートを使用する
Well-knownポートが使用されるのはサーバー側だけでクライアント側には一時的に使用される適当なポート番号が割り振られます。それには通常1024番以降のポート番号が使用され「ランダムポート番号」と呼ばれております。なおTCPやUDPのパケットのヘッダー部分には、送信先と送信元のポート番号が埋め込まれています。
・/etc/serviceについて
Well-knownポートを使用するサービス名と番号の対応は「/etc/services」で定義されております。さっそく、見てみましょう。
■TCPとUDPの相違について
TCP/IPのトランスポート層のプロトコルとしてはTCP(Tranmission Control Protocol)とUDP(User Datagram Protocol)の2種類があります。TCP/IPという名前からわかるようにTCP/IPという名前からわかるようにTCPが中心となりますが、ブロードバンドインターネットなどではUDPが活躍します。
・信頼性重視とTCPとスピード重視のUDP
TCPとUDPの相違は、簡単に言えばTCPの方がより信頼性が高いプロトコルであるのに対して、UDPは処理速度を優先したプロトコルであるという点にあります。TCPの場合、あらかじめ接続先の相手とコミュニケーションをはかり、相手の準備OKであればコネクション(接続)を確立し、データーの送信を開始します。TCPのようにコネクションを確立してからデーターを送信する方式を「コネクション型プロトコル」と呼びます。
それに対してUDPは、データーをいきなり送りつけます。相手にそれが届いたかどうか確認は行いません。このようにコネクションを確立しない方式を「コネクション型プロトコル」と呼びます。
また、ある一定量以上のデーターは複数のパケットに分割して送られるのですが、TCPの場合には一連のパケットに欠落があれば再送して順番送りに再構築されたデーターをアプリケーションに引き渡します。それに対してUDPの場合には、受け取ったパケットをそのままアプリケーションに渡します。したがって、エラー訂正を行うかどうかは、アプリケーション側の責任となるのです。
信頼性が重視されるコンピューターにUDPのようなプロトコルは無責任のように感じられるかもしれません。しかし、ネットワークの通信においては信頼性よりも高速性が重視されるケースもあるのです。例えば、ストリーミングビデオのサービスを考えてみましょう。再生中に映像のコマが少しぐらい抜けたとしても問題にはならないでしょう。それよりもリアルタイムに再生されることが求められます。UDPはその他にもデーター量が比較的少量でレスポンスが重要視されるDNSの名前解決要求などにも使用されます。
・TCPでデーターが保証される仕組み
TCPではコネクションを確立するとお互いのコンピューターのアプリケーションの間で「バーチャルサーキット」と呼ばれる仮想的な通信経路が作られます。例えば、Webサイトを閲覧しているときは、WebブラウザとWebサーバーとの間にバーチャルサーキットが確立され、データーがやりとりされるわけです。もちろん、ネットワーク事情によってはデーターが一度で届かない場合もありますから、データーを確実に届けるにはいろいろな仕組みが用意されております。基本的なものをいくつか紹介してみます。
・受け取ったことを相手に伝える
データーはパケット送られていると前述いたしましたが、受け取った側はその都度受け取ったことを送信側へ伝えるのです。送信側は、それを確認してから次のデーターを送ります。
・エラーの場合は再送する
パケットを送信後、決められた時間が経過しても応答が戻ってこない場合には再送されます。
・データーが間に合わなかった場合にはサイズを小さくする
送信側のデーターを送り出すスピードが、受信側の受け取る能力(サイズ)を超えている場合には、データーを取りこぼす可能性があります。そのケースでは受信側は「ウインドウサイズ」と呼ばれている、あとどれくらい受信が可能かという値を送信側に伝えるのです。そうすることにより送信側は次のデーター量を調節するわけです。このことを「フローコントロール」と呼びます。
■IPv6の基礎
現在主流となっているIPプロトコルはIPバージョン(IPv4)ですが、次世代IPプロトコルであるIPv6が実験段階になっております。TCP/IPの誕生時代には32ビットあれば十分と考えられていたIPアドレスも、インターネットの爆発的な普及によって足りなくなるのは時間という問題です。
そのため、「IPv6」では、IPアドレスの長さがIPv4の4倍の128ビットに拡大されています。つまり「2の128乗」個という、まさに天文学的な数字のアドレスが使用できるようになります。これだけあればコンピューターのみならず、家電製品や携帯電話などに割り当てても不足することはまずありません。(将来的にはもっと速度が速くなるでしょう)さらにIPv6ではセキュリティーなどの環境も強化されております。ただし、IPv6を使用するためにはOSの対応はもちろんのこと、それに対応したネットワーク機器が必要になるため、それほど普及していないのが現状です。
・IPv6の特徴について
IPv6の最大の特徴はなんといってもアドレス空間が利用できることですが、その他にも様々な特徴があるのです。代表的なものが「プラグアンドプレイ機能」と「セキュリティーの強化」です。
・プラグアンドプレイとは
IPv4ではIPアドレスの自動割り当てにDHCPなどの仕組みが必要でした。それに対してIPv6では各ホストがアドレスを自動設定できる機能が用意されております。また、接続されているネットワークセグメントルーターアドレスも自動的に取得できます。
・セキュリティーの強化
IPv4ではオプションであった「IPsec」と呼ばれる認証・暗号プロトコルが標準で組み込まれております。もちろん、同様な技術として現在でもSSLやSSHなどが広く使用されていますが、「IPsec」ではTCP/IPプロトコル階層モデルのインターネット層で使用されるためにアプリケーション自体は暗号化に関与せず安全な通信が行えるというメリットがあります。
・IPv6のアドレス表記について
IPv6のアドレスは全体で128ビットですが、通常16進数で表記します。16進数といっても128ビットもあると32桁が必要になります。そのため分かりやすくするために、4桁ずつ「:」コロンで区切って8つのブロックで表します。(IPv4アドレスは、8ビットごとに区切って、ピリオド「.」でつないだ10進数で表記していたことを思い出して下さい)。
IPv4の場合、サブネットマスクを使用して、ネットワーク部とホスト部を区別していました。それに対してIPv6では、前半の4つのブロックがネットワーク部(プレフィックス)、後半の4つのブロックがホスト部(インターフェースID)という明確に決められております。16進数にしても32ケタというのは人間にとってまだまだ長すぎると感じるでしょう。そのためIPv6では16進数32桁を短縮して表記するためのルールが用意されています。下記を確認してください。
(1)各ブロックの左側「0」は省略できる
(2)「0000」のブロックはブロックの区切りの「:」も省略できる。
これらのルールを適用することで、前述のIPv6アドレスは次のように表記されます。ただし、「0000」のブロックの連続箇所が離れた場所に複数ある場合には、省略できるのは1カ所だけです。
fe80:0000:0000:0000:020a:95ff:fea5:f576 ⇒ fe80::20a:95ff:fea5:f576
・IPv6アドレスのスコープ
IPv6のアドレスはスコープ(有効範囲)に応じて次の3種類があります。各ホストは少なくてもネットワークインターフェースのMACアドレスをもとに自動生成されたリンクローカルアドレスを持っています。
FedoraではIPv6をサポートしております。「ifconfig」コマンドで確認すると「inet6 addr:」にIPv6アドレスが表示されます。次の例はプリフィックスが「fe80::」で「Scope」が「Link」であることから、「eht0」には自動設定されたリンクローカルアドレスが割りつけられていることが確認できます。
・送信形態について
IPv4における送信形態は1対1の「ユニキャスト」と同時に複数のホストに送信する「マルチキャスト」(ブロードキャスト)に大別されます。それに対してIPv6では新たに「エニーキャスト」が定められており、エニキャストのアドレスは、マルチキャストのアドレスと同様に複数のホストに割り当てられます。ただし、そのすべてと通信するのではなく、経済的に最も近いホストが応答する仕組みになっております。
ネットワークを介して通信を行う上での約束事のことは「プロトコル」といいます。コンピューターなどのデバイス同士がデータをやりとりするためには、両者は同じプロトコルを使う必要があります。本節ではインターネットの標準プロトコルであるTCP/IPプロトコルの概要について説明します。
■TCP/IPはネットワークの標準プロトコル
初期のネットワークでは、ネットワークプロトコルの標準規格といったものは、あまり一般的ではありませんでした。一例を挙げれば「Windows」「Macintoch」のファイル共有機能にはそれぞれ独自のプロトコルが 使われていたため、たとえ同じLANに接続されていたとしても、それらの間でデータのやりとりを行うのは容易ではなかったのです。
それに大きな変革をもたらしたのがインターネットの爆発的な普及です。インターネットの世界では「TCP/IP」と呼ばれるプロトコルが使用されます。そのことは、インターネッにアクセスするためにはコンピューターにTCP/IPプロトコルを実装する必要があることを意味します。そのような経緯から次第にTCP/IPがインターネットに限らずにネットワークの世界における事実上の標準プロトコルとなってきました。現在ではほとんど全てのOSにTCP/IPが標準で組み込まれております。なお、TCP/IPという用語は(Transmission Control protocol)とIP(Internet Protocol)という2つのプロトコルの名称を組み合わせたものですが、実際には、その2つを中核とした多くのプロトコルから構成されるプロトコル群の総称です。そのことについてはのちほど説明します。
・TCP/IPのプロトコル構造
コンピューターの世界のネットワーク上で安定した通信を行うためにはプロトコルを詳細に決めて、それに従ってデータのやりとりをする必要があります。その際にプロトコルを複数の段階に分けて定義することが一般的に行われております。ネットワークプロトコルを階層化することによって、いずれかのレイヤーのプロトコルに変更があっても、他のレイヤーのプロトコルはそのまま使用することができるというメリットが生まれます。また、新たにプロトコルを作成する場合にも、上下のレイヤーのみを意識するだけですむのです。
一般的に使用されているTCP/IPプロトコル階層のモデルです。
TCP/IP階層モデル
|
・ネットワークアクセス層(Network Access Layer)
最もハードウェアに近いレイヤーで、実際のネットワークインターフェイス間のデータのやりとりを管理します。この代表的なプロトコルは、なんといってもLANの世界では広く利用されているイーサーネット(Ethernet)でしょう。また、電話回線を通してインターネットに接続するPPP(Point To Point Protcol)などもこのレイヤーの位置します。
・インターネット層(Internet Layer)
インターネット層は「IP層」とも呼ばれ、TCP/IPプロトコル群の中核の1つであるIP(Internet Protocol)と、それを補完するいくつかのプロトコルから構成されております。送信先のIPアドレスによって適切な経路を判断し、目的地までデータを運ぶというのが主な役割です。但し、このレイヤーでは単にデーターを送りだすだけで、データーが相手に確実に届いたかは保証されません。それは上位のプロトコルの役割になります。
・トランスポート層(Transport Layer)
トランスポート層は、TCP(Transmission Control Protocol)とUDP(User Datagram Protocol)という2つのプロトコルから構成され「TCP/UDP層」とも呼ばれています。両者の最も大きな相違はデーターの信頼性を確保するかどうかになります。TCPはデーターの検証を行うのに対してUDPは行いません。この下のレイヤーであるインターネット層のプロトコルは、データーが相手に届いたかなどの検証は行わないためデーターの伝達を保証するのがTCPの大切な役割になります。ただし、ケースによっては信頼性よりも速度が優先うされる場合もあるため、高速性を重視したUDPが用意されております。
・アプリケーション層(Application Layer)
アプリケーション層はユーザーに最も近いレイヤーです。その名の示す通りアプリケーションを構築するためのプロトコルと考えるとよいでしょう。このレイヤーには数多くのプロトコルがあり、その数は現在も増え続けています。例えば、Webで活躍するHTTP(HyperText Transfer Protocol)やメールの送受信を行うPOP(Post Office Protocol)やIMAP(Internet Messages Access Protocol)といったプロトコルが位置しております。
・TCP/IPプロトコル群
TCP/IPプロトコル群を細かく分けると100以上の種類があり、今でも新たなプロトコルが生み出されています。下記の図にTCP/IPにおける代表的なプロトコルを各階層的な概略図を示します。
TCP/IPのプロトコル群
|
・データーはパケットに分けて送られている
一般的にネットワークを流れるデーターの単位のことを「パケット」と呼ばれています。「パケット」とは日本語にすれば小包に値します。現在の世界の小包と同じように各パケットには送信先と送信元を示す「ヘッダー」が付けられております。「パケット」を小包の中身にたとえた場合、「ヘッダー」はその荷札のようなものになります。ネットワークプロトコルは、この「ヘッダー」の情報を頼りに「パケット」を正しい宛先に届ける仕組みになっております。
データーを送信する場合、アプリケーションプログラムのデーターは階層を下に移動します。このとき各層は自分の層に応じたヘッダーをふかしていきます。逆に受信する場合には、データーの下の層から上の層へ移動していきます。このとき各層は自分の層のヘッダーを解釈して上の層に渡す前に取り除き、最終的にアプリケーションプログラムにはデーターのみが渡されます。
なお、アプリケーションプログラムが送信したデーターが、必ず1つのパケットになるわけではありません。プロトコルで規定されているサイズによって複数のパケットに分割される場合も少なくありません。このときにTCPのパケットの場合には、ヘッダー部分にパケットの順番が記述されているのです。受信側ではそれを見て元のデーターを組み立てます。それに対して、UDPではヘッダー部分に順序は記述されていないためパケットが欠落する可能性があります。
■イーサーネットについて
現在LANの世界で最も広く使用されているネットワークプロトコルはイーサーネットになります。TCP/IPのプロトコル階層で言えば、イーサーネットはネットワークアクセス層を担当するインターフェースになります。
・イーサーネットの規格
近年、転送速度が100Mbpsの100Base-T(ファーストイーサーネット)という規格が主流でした。最大ケーブルの長さは100mです。販売されているほとんどのパソコンには100Base-T対応のネットワークポートが標準で用意されています。現在では1Gbpsを搭載する1000Base-T(ギガビットイーサーネット)も普及し始めております。いずれもケーブルとしてはコネクターにRJ-45を使用したツイストペアケーブルを使用します。これは普通のパソコンショップなどでLANケーブル(UTPケーブル)として販売されており、簡単に入手できます。但し、100Base-Tでは「カテゴリ5」、1000Base-tでは「カテゴリ5e」(エンハンストカテゴリ5)という規格以上のケーブルを使用する必要があります。このカテゴリーはLANケーブルの品質を示す用語で、数が多いほど品質が高くなっております。最近のケーブルのほとんどがカテゴリ5以上です。
・ハブについて
100Base-T、1000Base-TによるLANの接続形態は「スター型」と呼ばれるもので「ハブ」と呼ばれるネットワーク機器を中心として各マシンをLANケーブルで接続します。LANケーブルにはストレートケーブルとクロスケーブルがあります。ハブとコンピューターを接続する場合には、通常ストレートケーブルを使用します。また、2台のコンピューターを接続するだけならハブを使用しないのでクロスケーブルで直結することもできます。
・カスケード接続
ハブのポート数が足りない場合は複数台のハブを階層状に接続することができます。このことを「カスケード接続」と呼びます。カスケード接続を行うには、それぞれのハブの任意のポート間をクロスケーブルで接続します。ただし、たいていのハブはスイッチで極性を切り替えられるカスケード用のポート(アップリンクポート)が用意されているため、どちらか一方のハブはそのポートを使用すれば通常のストレートケーブルで接続することが可能です。
・スイッチングハブについて
「リピーターハブ」あるいは「ダムハブ」と呼ばれているタイプのハブでは、コンピューターが1対でやりとりをしているような場合でも、すべてのポートに信号が流れてしまうのです。その為に他のコンピューターはその間待たないと通信が行えません。その対策として開発されたのが「スイッチングハブ」です。「スイッチングハブ」ではどのポートにどのコンピューターが接続されているかをMACアドレスにより記憶しておいて、通信を行っているコンピューター同士を接続しているポートにしか信号を流しません。つまり、スイッチングハブを使用することにより、コリジョン(衝突)が起こりにくくなりネットワークを効率的に使用することが可能なのです。
また、イーサーネットは基本的に送信と受信を同時に行えない半二重通信(half-duplex)ですが、スイッチングハブは送信と受信に別ラインを使用しているため、全二重通信(full-duplex)が可能になっております。なお、最近のイーサーネットカード、ハブはネットワークスピードなどを自動的に切り替える機能(オートネゴシエーション機能)を持っており、10Base-t、100Base-T、1000Base-Tなどの速度の異なるインターフェイスをネットワーク内に共存させることができます。その場合、速度の遅い方に合わせられます。このことはカーネルのメッセージを表示する「dmesg」コマンドで確認できます。
|
・MACアドレスについて
イーサーネットではネットワーク内の個々のコンピューターを「MAC(Media Access Control)アドレス」と呼ばれているアドレスで識別されています。それぞれのコンピューターにはIPアドレスで区別されますから、それだけで十分かと思うかもしれません。ただし、IPアドレスはTCP/IPプロトコル階層でいうところのインターネット層のIPで管理されるアドレスです。その為にIPアドレスではその下のネットワークアクセス層での相手の特定ができなくなるのです。
したがって、1層のネットワークアクセス層でMACアドレスでコンピューターを識別し、2層のインターネット層でIPアドレスでコンピューターを識別するのです。
MACアドレスは6バイト(48ビット)の長さのハードウェアに固有のアドレスで、通常は1バイトごとに16進数で表記し、コロン「:」でつながれております。最初の3バイトは「ベンダーコード」と呼ばれIEEE(米国電気電子技術者協会)によって機器メーカーごとに割り当てられています。つまりベンダーコードを見ればメーカーが分かるようになっているのです。残りの3バイトはメーカーごとのシリアルナンバーのようなもので、同じ製品であっても重複しないようになっています。
|
Linuxの場合、「ifconfig」コマンドを実行するとMACアドレスを確認できます。「HWaddr」に続いて表示されるのがMACアドレスになります。
|
イーサーネットのパケットのことを「イーサーネットフレーム」と呼びます。イーサーネットパケットのヘッダーには送信先と送信元のMACアドレスが埋め込まれております。ここでMACアドレスはあくまでも同じネットワーク内のコンピューターを識別するためのアドレスです。ルーターで区切られた別のネットワークのコンピューターへネットワークフレームを送信することはできないのです。
・MACアドレスとIPアドレスの変換
送信先コンピューターは通常IPアドレスもしくはホスト名によって指定されております。そのために、なんらかの方法でIPアドレスとMACアドレスを変換する仕組みが必要となります。それを担当するのがインターネット層のARP(Address Resolution Protocol)プロトコルになります。変換テーブルは「ARPキャッシュ」と呼ばれるテーブルに保存されます。ARPキャッシュは「arp」コマンドで確認できます。
|
||||||||||||||||||||
送信先のホストが変換テーブルに載っている場合には、その情報も使用してパケットを送ります。変換テーブルにない場合には、ネットワーク内の全てのホストにパケットを送る「ブロードキャスト」を使用してMACアドレスを問い合せます。逆にMACアドレスからIPアドレスへ変換を行うのがRARP(Reverse ARP)というプロトコルです。
■IPアドレスについて
インターネット層のプロトコル「IP」で相手のコンピューターを特定するのに使用されるIPアドレスの仕組みについて説明します。Webブラウザなどのクライアントでは、通常、相手のコンピューターをホスト名で指定しますが、そのホスト名はコンピューター内部ではIPアドレスに変換されているのです。
・IPアドレスの表記について
IPアドレスは32ビットのビットの並びです。ただし、そのままではとても分かりにくいので、通常は8ビットごとに区切られてピリオド「.」で区切った10進数で表記されているのが一般的です。
IPアドレスの表記
|
||||||||||||||||
・ネットワークアドレスとホストアドレス
IPアドレスはネットワークを識別するネットワークアドレスと、そのネットワーク内のホストを識別するホストアドレスに分けることができます。例えば「192.168.1.10」というケースでは「192.168.1」がネットワークアドレスになり、残りの「10」がホストアドレスになります。
|
実際の世界にたとえれば、ネットワークアドレスの部分は町名までで、ホストアドレス部分は番地と覚えると分かりやすいでしょう。
・ネットワークを接続するルーター
IPアドレスのネットワークアドレスが同じ機器はデーターを直接やりとりすることが可能です。そのネットワーク範囲のことを「セグメント」と呼びます。それに対してIPアドレスのネットワークアドレスが異なるコンピューターは、異なるネットワークに属していると見なされ、それらが互いに通信するためには「ルーター」と呼ばれるネットワーク機器で仲介する必要があります。ルーターには通常2つ以上のネットワークポートが用意されており、それぞれのポートにIPアドレスが割り振られております。
また、ルーターはTCP/IP階層モデルでいえばインターネット層のパケット(IPパケット)を中継する装置です。イーサーネットのパケット(イーサーネットフレーム)を中継する装置ではないことに注意しておいて下さい。したがってIPアドレスによって送信先を判断します。
例えば、IPアドレス「192.168.0.10」のホストからルーターによって隔てられた「192.168.1.11」のホストへパケットを送るケースを取り上げます。この場合、IPパケットのヘッダーの送信先は「192.168.1.11」のままです。それに対してインフレームのヘッダー部分に埋め込められたMACアドレスは、ルーターを通過するたびに変更されるのです。まず「192.168.0.10」のホストから送信された段階ではルーターのMACアドレスが送信先になっておりますが、ルーターを通過した時点でホスト「192.168.1.11」のMACアドレスに付け替えられるのです。
・IPアドレスはネットワークインターフェースごとに割り振りられる
MACアドレスと同様に、正確にはIPアドレスもコンピューターごとではなくネットワークインターフェースごとに割り振られます。複数のネットワークインターフェースがあれば1台のコンピューターに複数のIPアドレスを割り振ることができるのです。そうすることでコンピューターをルーターとして使用することも可能です。
・サブネットマスク
IPアドレスの中のどこまでがネットワークアドレスで、どこからがホストアドレスであるかを示すのが「サブネットマスク」(ネットワークマスク)です。サブネットマスクは32ビットの中でネットワークアドレスのビットを「1」、ホストアドレスを「0」として表します。IPアドレスと同様に8ビットずつに分けてピリオド「、」でつないだ10進数で表記します。
|
||||||||||||||||
例えば、IPアドレスが「192.168.1.10」、サブネットマスクが「255.255.255.0」であれば、ネットワークアドレスは「192.168.1」ホストアドレスは「10」になります。
この場合、32ビットのIPアドレスのうちネットワークアドレスに24ビット、ホストアドレスに残りの8ビットが使われています。そのためネットワーク内のホストに割り当てることができるIPアドレスは「192.168.1.0」~「192.168.1.255」の最大256個となります。
実際には「192.168.1.0」と「192.168.1.255」は特別のアドレスとして使用されるために、コンピューターに割り当てられるのは「256-2=254」となります。
なお、あるネットワークのセグメントを表す場合、ホストアドレスを「0」とし、その後に「/」で区切ってネットワークのビット数を記述する方法があります。たとえば、ネットワークアドレスが「192.168.1」で、サブネットマスクが「255.255.255.0」であるネットワークは、ネットワークアドレスが24ビットなので下記の通りに表記できます。
|
・ネットワークのクラス分けとCIDR
これまで述べたように、サブネットマスクはホストの最大数、つまりネットワークの規模を設定します。以前はネットワークはクラスA、クラスB、クラスCといったネットワークの規模に応じてクラスに分割されていました。下記の表がそれになります。
|
上記の表のように、IPアドレスの最初の4ビットを見れば、どのクラスに属しているのか、そしてネットワーク何ビットなのかは直ぐに分かります。ただし、この方式ではIPアドレスの割り当てが非効率になるという問題があります。例えば、1,000台程度のホストを接続したい組織の場合は256個のホストアドレスを使用可能なクラスCでは足りないために65,536個のホストアドレスを使用可能なクラスBとして登録をする必要があります。つまり、割り当て可能なIPアドレスが64,000個以上余ってしまいます。そこで最近ではクラスにとらわれないネットマスクを活用してネットワークを分割する「CIDR」(Classslessinter-Domain Routing)と呼ばれる方式が主流です。CIDRでは、IPアドレスを4、8、16、32・・・といった「2のn乗」個単位で割り当てられるためにIPアドレスの空間を効率よく使え、無駄が大幅に減りました。
・ネットワークアドレスとブロードキャストアドレス
IPアドレスには特別の意味を持つものがあります。ホストアドレスがすべて「0」のアドレスは「ネットワークアドレス」、ホストアドレスがすべて「1」のアドレスは「ブロードキャストアドレス」と呼ばれてコンピューターやネットワーク機器に割り当てることはできません。そのことを少し説明いたします。
・ネットワークアドレス
ビットが全て「0」ホストアドレスはネットワークそのものを表します。これを「ネットワークアドレス」と呼びます。たとえば、「192.168.1.0/8」のネットワークでは「192.168.1.0」がネットワークアドレスとなります。
・ブロードキャストアドレス
ビットが全て「1」のホストアドレスは「ブロードキャストアドレス」と呼ばれており、そのネットワークに属するすべてのホストに対して同時にデーターを送るために使用されま。たとえば、「192.168.1.0/24」のネットワークアドレスでは「192.168.1.255」がブロードキャストアドレスとなります。
・自分自身を示すループバックについて
自分自身を示すIPアドレスにループバックアドレスがあります。これはすべてのホストで共通で「127.0.0.0/8」が割り当てられていますが、通常は「127.0.0.0/8」が使用され、ホスト名は「localhost」になります。ループバックアドレスは主にネットワークサービスのテストなどに使用され、外部に送信されることはありません。※ループバックに宛てたパケットは自分自身に戻ってきます。
・グローバルIPアドレスとプライベートIPアドレスの役割
IPアドレスは「グローバルIPアドレス」と「プライベートIPアドレス」の2種類に分かれております。
「グローバルIPアドレス」は、インターネットに公開されているホストに割り振るユニークなIPアドレスです。「グローバルIPアドレス」には重複があってはいけないので、各自が勝手に割り振ることはできません。日本でIPアドレスの割り振りを管轄しているのはJPNIC(http://www.nic.ad.jp)です。JPNICは一定の条件を満たしたISP(Internet Service Provider)にIPアドレスの割り当て業務を委託しているので、一般にはISPと契約して、そこからIPアドレスの割り当てを受けることになります。もちろん、JPNICが管理されているのはIPアドレスのネットワークはアドレス部分のみなので、そのネットワーク内のホストアドレスは自由に割り当てることができます。一方、プライベートIPアドレスは、インターネットに流さないこと条件、LAN内に限って自由に割り振りかえってよいことになっているIPアドレスです。
プライベートIPアドレスの種類
|
上記は、通常、社内のファイアウォールの内部、家庭でもブロードバンドルーターの内部のコンピューターにはプライベートIPアドレスが割り当てられております。このケースのクラスCの「192.168.0.0/24」もしくは「192.168.1.0/24」を使用するように設定されております。
・プライベートIPアドレスとグローバルIPアドレスの変換
プライベートIPアドレスのパケットは、その性質上インターネット上に流すことはできません。そのために、LAN側のコンピューターをインターネットに接続するためには、プライベートIPアドレスとグローバルIPアドレスを変換する仕組みが必要になってきます。それには「NAT」「IPマスカレード」という方法があります。
「NAT」はグローバルアドレスとIPアドレスを1対1に変換します。また、「IPマスカレード」は1つのグローバルアドレスを複数のプライベートアドレスで共有します。
最近では、ルーターは業務用に限らず家庭用のブロードバンドルーターでも「NAT」や「IPマスカレード」といった機能が付いているものがほとんどです。特に「IPマスカレード」では、複数のコンピューターを同時にインターネットに接続するための必須の機能です。
・DHCPによるIPアドレスの自動割り当て
各コンピューターのIPアドレスは自分で設定するほかに、DHCP(Dynamic Host Configuration Protocol)というプロトコルによって自動設定することもできます。DHCPはLANネットワーク内のマシンが起動した際にあらかじめプールしてあるIPアドレスを割り振るサービスです。ブロードバンドルーターにはたいていの場合、DHCPサーバーの機能が付属されております。なお、サーバーとして運用するマシンの場合は一般的にDHCPによってIPアドレスを自動的に割り当てするべきではありません。それは、起動するたびにIPアドレスが変わってしまうとクライアントからアクセスができなくなってしまうからです。
・IPアドレスとホスト名
インターネット上のコンピューターには全てグローバルIPアドレスが割り振られております。ただし、ユーザーがネットワークを介してコンピューターにアクセスする場合は「209.218.xxx.29」のようなIPアドレスを直接指定するより「www.fxsl.biz」のようなホスト名を使用するケースがほとんどです。このIPアドレスとホスト名の変換は「DNS」という機能により集中管理する方法と、各コンピューターごとに「/etc/hosts」ファイルで管理する方法が一般的です。
・DNSについて
インターネット上のコンピューターのホスト名とIPアドレスの対応は「DNS」(Dynamic Name System)と呼ばれるデーターベースシステムによって管理されております。DNSデーターベースを管理するサーバーを「DNSサーバー」(ネームサーバー)と呼びます。ただし、すべてのコンピューターの名前を1つのDNSサーバーで管理していたのでは、とても世界中からの問い合わせに応じることは不可能です。また、刻々と変化するコンピューターの情報をリアルタイムで更新するということも難しいでしょう。そのためにDNSはルートサーバーを頂点とする階層構造の分散型データーベースシステムとして構築されております。各DNSサーバーは自分が管理するドメインの情報だけを持っております。それ以外のドメインの問い合わせに関しては、ほかのDNSサーバーと連携してクライアントに回答をするのです。
・/etc/hostsファイルによる管理
数台のマシンで構築されているLANのように、DNSサーバーを構築する必要もない小規模ネットワークのケースでは、個々のマシンでホスト名とIPアドレスの記述されているテキストファイルを用意する方法もしばしば使用されます。Linux等のUNIX系のOSでは、ホスト名とIPアドレスの対応を管理する「/etc/hosts」になります。実際に見てみましょう。
|
|
■ポート番号とサービスに関して
ネットワーク上の個々のコンピューターはIPアドレスで識別されております。コンピューター内で動作しているそれぞれのネットワークサービスはポート番号によって識別されております。例えば、マンションにたとえたケースではIPアドレスは住所、ポート番号は部屋番号のようなものです。
・ポート番号とは
TCP/IPの階層モデルでいえば、データーを目的のホストまで届けるのはインターネット層のIPが担当します。その後、データーを目的のアプリケーションに届けるのはトランスポート層のTCPとUDPの役割になります。サーバーとして使用されるコンピューターでは、Webサーバーやメールサーバーなど、さまざまなネットワークサービスが立ち上がっていることがあります。そのため、ホスト内に届けられたデーターはなんらかの方法で接続するサービスを識別する必要があります。その目的で使用されるのが「ポート番号」と呼ばれる番号です。ポート番号は16ビット長の数値(0~65535)で表します。
・Well-knownポートについて
前述のどのサービスが基本的にどのポートを使用しているかを決めておくと接続ポート番号を気にしなくするために、あらかじめ特定のサービスの為に予約されたポート番号があります。それらのポート番号のことを「Well-knownポート」と呼びます。Well-knownポートは0~1023番までの範囲となります。それらの例を下記に示します。
|
例えば、WebサイトにアクセスするためのWebブラウザではURLを指定しますが、URLは正式には次のような書式になります。
|
WebサーバーのWell-knownポートは「80」です。WebブラウザはそのWell-knownの番号を知っているポート番号を省略した場合には「80ポート」がアクセスされるわけです。
・クライアント側はランダムポートを使用する
Well-knownポートが使用されるのはサーバー側だけでクライアント側には一時的に使用される適当なポート番号が割り振られます。それには通常1024番以降のポート番号が使用され「ランダムポート番号」と呼ばれております。なおTCPやUDPのパケットのヘッダー部分には、送信先と送信元のポート番号が埋め込まれています。
・/etc/serviceについて
Well-knownポートを使用するサービス名と番号の対応は「/etc/services」で定義されております。さっそく、見てみましょう。
|
|
■TCPとUDPの相違について
TCP/IPのトランスポート層のプロトコルとしてはTCP(Tranmission Control Protocol)とUDP(User Datagram Protocol)の2種類があります。TCP/IPという名前からわかるようにTCP/IPという名前からわかるようにTCPが中心となりますが、ブロードバンドインターネットなどではUDPが活躍します。
・信頼性重視とTCPとスピード重視のUDP
TCPとUDPの相違は、簡単に言えばTCPの方がより信頼性が高いプロトコルであるのに対して、UDPは処理速度を優先したプロトコルであるという点にあります。TCPの場合、あらかじめ接続先の相手とコミュニケーションをはかり、相手の準備OKであればコネクション(接続)を確立し、データーの送信を開始します。TCPのようにコネクションを確立してからデーターを送信する方式を「コネクション型プロトコル」と呼びます。
それに対してUDPは、データーをいきなり送りつけます。相手にそれが届いたかどうか確認は行いません。このようにコネクションを確立しない方式を「コネクション型プロトコル」と呼びます。
また、ある一定量以上のデーターは複数のパケットに分割して送られるのですが、TCPの場合には一連のパケットに欠落があれば再送して順番送りに再構築されたデーターをアプリケーションに引き渡します。それに対してUDPの場合には、受け取ったパケットをそのままアプリケーションに渡します。したがって、エラー訂正を行うかどうかは、アプリケーション側の責任となるのです。
信頼性が重視されるコンピューターにUDPのようなプロトコルは無責任のように感じられるかもしれません。しかし、ネットワークの通信においては信頼性よりも高速性が重視されるケースもあるのです。例えば、ストリーミングビデオのサービスを考えてみましょう。再生中に映像のコマが少しぐらい抜けたとしても問題にはならないでしょう。それよりもリアルタイムに再生されることが求められます。UDPはその他にもデーター量が比較的少量でレスポンスが重要視されるDNSの名前解決要求などにも使用されます。
・TCPでデーターが保証される仕組み
TCPではコネクションを確立するとお互いのコンピューターのアプリケーションの間で「バーチャルサーキット」と呼ばれる仮想的な通信経路が作られます。例えば、Webサイトを閲覧しているときは、WebブラウザとWebサーバーとの間にバーチャルサーキットが確立され、データーがやりとりされるわけです。もちろん、ネットワーク事情によってはデーターが一度で届かない場合もありますから、データーを確実に届けるにはいろいろな仕組みが用意されております。基本的なものをいくつか紹介してみます。
・受け取ったことを相手に伝える
データーはパケット送られていると前述いたしましたが、受け取った側はその都度受け取ったことを送信側へ伝えるのです。送信側は、それを確認してから次のデーターを送ります。
・エラーの場合は再送する
パケットを送信後、決められた時間が経過しても応答が戻ってこない場合には再送されます。
・データーが間に合わなかった場合にはサイズを小さくする
送信側のデーターを送り出すスピードが、受信側の受け取る能力(サイズ)を超えている場合には、データーを取りこぼす可能性があります。そのケースでは受信側は「ウインドウサイズ」と呼ばれている、あとどれくらい受信が可能かという値を送信側に伝えるのです。そうすることにより送信側は次のデーター量を調節するわけです。このことを「フローコントロール」と呼びます。
■IPv6の基礎
現在主流となっているIPプロトコルはIPバージョン(IPv4)ですが、次世代IPプロトコルであるIPv6が実験段階になっております。TCP/IPの誕生時代には32ビットあれば十分と考えられていたIPアドレスも、インターネットの爆発的な普及によって足りなくなるのは時間という問題です。
そのため、「IPv6」では、IPアドレスの長さがIPv4の4倍の128ビットに拡大されています。つまり「2の128乗」個という、まさに天文学的な数字のアドレスが使用できるようになります。これだけあればコンピューターのみならず、家電製品や携帯電話などに割り当てても不足することはまずありません。(将来的にはもっと速度が速くなるでしょう)さらにIPv6ではセキュリティーなどの環境も強化されております。ただし、IPv6を使用するためにはOSの対応はもちろんのこと、それに対応したネットワーク機器が必要になるため、それほど普及していないのが現状です。
・IPv6の特徴について
IPv6の最大の特徴はなんといってもアドレス空間が利用できることですが、その他にも様々な特徴があるのです。代表的なものが「プラグアンドプレイ機能」と「セキュリティーの強化」です。
・プラグアンドプレイとは
IPv4ではIPアドレスの自動割り当てにDHCPなどの仕組みが必要でした。それに対してIPv6では各ホストがアドレスを自動設定できる機能が用意されております。また、接続されているネットワークセグメントルーターアドレスも自動的に取得できます。
・セキュリティーの強化
IPv4ではオプションであった「IPsec」と呼ばれる認証・暗号プロトコルが標準で組み込まれております。もちろん、同様な技術として現在でもSSLやSSHなどが広く使用されていますが、「IPsec」ではTCP/IPプロトコル階層モデルのインターネット層で使用されるためにアプリケーション自体は暗号化に関与せず安全な通信が行えるというメリットがあります。
・IPv6のアドレス表記について
IPv6のアドレスは全体で128ビットですが、通常16進数で表記します。16進数といっても128ビットもあると32桁が必要になります。そのため分かりやすくするために、4桁ずつ「:」コロンで区切って8つのブロックで表します。(IPv4アドレスは、8ビットごとに区切って、ピリオド「.」でつないだ10進数で表記していたことを思い出して下さい)。
|
IPv4の場合、サブネットマスクを使用して、ネットワーク部とホスト部を区別していました。それに対してIPv6では、前半の4つのブロックがネットワーク部(プレフィックス)、後半の4つのブロックがホスト部(インターフェースID)という明確に決められております。16進数にしても32ケタというのは人間にとってまだまだ長すぎると感じるでしょう。そのためIPv6では16進数32桁を短縮して表記するためのルールが用意されています。下記を確認してください。
(1)各ブロックの左側「0」は省略できる
(2)「0000」のブロックはブロックの区切りの「:」も省略できる。
これらのルールを適用することで、前述のIPv6アドレスは次のように表記されます。ただし、「0000」のブロックの連続箇所が離れた場所に複数ある場合には、省略できるのは1カ所だけです。
fe80:0000:0000:0000:020a:95ff:fea5:f576 ⇒ fe80::20a:95ff:fea5:f576
・IPv6アドレスのスコープ
IPv6のアドレスはスコープ(有効範囲)に応じて次の3種類があります。各ホストは少なくてもネットワークインターフェースのMACアドレスをもとに自動生成されたリンクローカルアドレスを持っています。
|
FedoraではIPv6をサポートしております。「ifconfig」コマンドで確認すると「inet6 addr:」にIPv6アドレスが表示されます。次の例はプリフィックスが「fe80::」で「Scope」が「Link」であることから、「eht0」には自動設定されたリンクローカルアドレスが割りつけられていることが確認できます。
|
・送信形態について
IPv4における送信形態は1対1の「ユニキャスト」と同時に複数のホストに送信する「マルチキャスト」(ブロードキャスト)に大別されます。それに対してIPv6では新たに「エニーキャスト」が定められており、エニキャストのアドレスは、マルチキャストのアドレスと同様に複数のホストに割り当てられます。ただし、そのすべてと通信するのではなく、経済的に最も近いホストが応答する仕組みになっております。