LANの仕組み

ネットワークのLANについて勉強したのでメモしておきます。画像を作るのが面倒だったので参考にさせていただいた各サイト様から引用させていただきました。

LANとWAN

ネットワークは大きくLANとWANの2つに大別されています。

LAN

Local Area Network(ローカル・エリア・ネットワーク)とは、広くても一施設内程度の規模で用いられるコンピュータネットワークのことです。その頭文字をつづったLANと書かれる場合も多く、一般家庭、企業のオフィスや研究所、工場等で広く使用されています。LANでは、イーサネットという技術規格によって通信を実現しています。

WAN

Wide Area Network(ワイド・エリア・ネットワーク)は、LANと比較して広い範囲(市街地を越え郊外、県外や国際の範囲)におよぶネットワークのことです。広義には、非常に広大な面的広がりを持つインターネットとほぼ同義の言葉として使われます。一方、狭義には、点在するLANとLANを接続する線としてのネットワークというような意味合いでも使われます。

用法としては、LANの対義語として良く用いられます。例えば、LANとISP(インターネットサービスプロバイダ)への回線とを結ぶルータは、WANルータと言われ、ISPへの回線側をWAN側と言います。

Image_wideareanetwork2

イーサネットとは

イーサネット(Ethernet)は、コンピューターネットワークの規格の1つです。世界中のオフィスや家庭で一般的に使用されている有線のLANで最も使用されています。

イーサネットは、IEEE(アイトリプルイー、Institute of Electrical and Electronics Engineers)という団体によって定義されました。
IEEEは、アメリカ合衆国に本部を置く世界規模の電気工学・電子工学の学会です。電気工学や電子工学に関する標準化などを行っており、IT分野についてもデータの伝送方式やネットワーク技術の標準を定義しています。

LANで使用されているイーサネット規格はIEEE 802.3系とIEEE 802.11系の2つに大別することができます。

  • IEEE 802.3系
    ネットワークケーブル用の技術規格です。以下のような種類があります。
規格 イーサネット名 最大通信速度
802.3 10BASE-T(イーサネット) 10Mbps
802.3u 100BASE-T(ファストイーサネット) 100Mbps
802.3ab 1000BASE-T(ギガビットイーサネット) 1000Mbps
802.3z 1000BASE-LX(ギガビットイーサネット) 1000Mbps
802.3an 10GBASE-T(10ギガビットイーサネット) 10Gbps
  • IEEE 802.11系
    無線LAN用の技術規格です。以下のような種類があります。
規格 周波数帯 最大通信速度 特徴
802.11 2.4 - 2.5GHz 2Mbps IEEE 802.11系の元祖。
802.11a 5GHz 54Mbps 電波干渉を受けにくい。障害物に弱い。
802.11b 2.4GHz 11Mbps 電波干渉を受けやすい。障害物に強い。
802.11g 2.4GHz 54Mbps 電波干渉を受けやすい。障害物に強い。
802.11n 2.4GHz
/ 5GHz
600Mbps 電波干渉を受けやすい。障害物に強い。
802.11ac 5GHz 6.9Gbps 電波干渉を受けにくい。障害物に弱い。

通信速度の読み方

ネットワークで扱われる情報の最小単位はビット(bit)です。ビットは2進数(0と1)で表されます。通信速度には、bps(bit per second)という表記が使用されますが、これは1秒間当たりに何ビットを転送することができるかを表しています。

さらに、k(キロ)、M(メガ)、G(ギガ)という単位もよく使用されます。kが1000倍、Mが100万倍、Gが10億倍を表します。

これらを組み合わせて、ネットワークの通信速度を「1Gbps」などと表記することができます。

1Gbpsを各単位に直すと
「1Gbps = 1000Mbps = 1000000kbps = 1000000000bps」になります。

イーサネットの発展

1980年代に10BASE-5、1990年代に100BASE-TXと1000BASE-x、2000年代には10GBASE-xというように時代が進むにつれて、どんどん伝送速度が上がっていきました。

Ethernet_history

イーサネットでLANを構築する場合

イーサネットでLANを構築する場合、一般的には「IEEE 802.3系、もしくはIEEE 802.11系 + イーサネットⅡ規格のフレームフォーマット + TCP/IP」で構築します。TCP/IPについては後で詳しく説明します。

次にイーサネットのフレームフォーマットについて説明します。

イーサネットのフレームフォーマットについて

イーサネット上で流れるデータのことをフレームと呼んでいます。後で詳しく説明しますが、これはOSI参照モデルのデータリンク層のPDU(Protocol Data Unit)の名前です。

先に結論を言ってしまうと、現在のフレームフォーマットの主流はイーサネットⅡ規格です。これは歴史的な経緯も関係しますが、TCP/IPがこのフレームフォーマットを採用しているからというのが主な理由となっています。

フレームフォーマットには次の4つの種類があります。説明に「ネットワーク層」や「プロトコル」という言葉が登場しますが、これらについては後で説明します。

  • イーサネットⅡ規格
    イーサネットⅡ規格は、DECとインテル、ゼロックスが策定したため、3社の頭文字を取って通称DIX規格と呼ばれることが多いです。つまり、正式にはIEEEで規格化されていないフレーム形式になります。1980年にバージョン1が公開され、1982年にバージョン2であるイーサネットⅡ規格が公開されました。

frame1

  • 802.3 Raw
    イーサネットⅡ規格を基にして作られた規格です。しかし、このフレームフォーマットには上位のネットワーク層のプロトコル(TCP/IP)を識別することができないという欠点があります。

frame2

  • 802.3 with LLC
    802.3 Rawの欠点を克服するために802.3 Rawを拡張して作られた規格です。具体的には802.3 RawにLLCという規格を付け加えたものになります。ネットワーク層のプロトコルを識別するための情報をデータフィールドに持っています。しかし、これもまた128種類のプロトコルしか識別できないため、各ベンダ固有のプロトコルを作りたい場合は、これだけでは足りなくなってきてしまいます。

frame3

  • 802.3 with SNAP
    802.3 with LLCの欠点を克服するために802.3 with LLCを拡張して作られた規格です。具体的には802.3 RawにLLCとSNAPという2つの規格を付け加えたものになります。フレームフォーマットに組織IDやタイプというフィールドを追加したことで十分な数のプロトコルを識別できるようになりました。

frame4

ネットワークの図

下の図を見てください。

network-diagram

この中で、モデム・ONU・ルータ・スイッチングハブがいわゆるネットワーク機器で、それぞれをネットワークケーブルで繋ぎます。

以下より、各ネットワーク機器とネットワークケーブルの役割について説明します。

モデム

モデムとは、電話回線(アナログ回線)を使ってインターネットに接続するときに必要な機器です。パソコンの中のデータは、全てデジタル形式になっていますが、電話回線は通常、アナログ形式の音声しか送ることができません。そのため、デジタルのデータをアナログに変換するのがモデムの役目です。

モデムは他にも種類があり、CATV(ケーブルテレビ)を利用する場合のケーブルモデムや、ADSLを利用する場合のADSLモデムなどがあります。これらは電話回線に対応した従来のモデムとは別ものなので流用はできません。

伝送路に電気信号を流す方式としては、主にベースバンド方式とブロードバンド方式があります。

ベースバンド方式

ベースバンド方式は、デジタル信号をそのままの形で伝送路に流します。伝送路の物理的な影響を受けやすく遠距離通信に向いていないという面はありますが、非常に単純な方式で、現在のLANのほとんどがこの方式を採用しています。

ブロードバンド方式

ブロードバンド方式は、デジタル信号をアナログ信号に変換して送信し、受信側でアナログ信号を再びデジタル信号に戻す、いわゆる変調・復調という作業を伴う伝送方式です。電話回線を使用してインターネットにアクセスする場合は、この伝送方式になります。この方式は、伝送路の物理的な影響を受けにくく、遠距離通信に向いているという特徴があります。

ブロードバンド方式において、変調したり、復調したりする装置がモデムです。

ONU

ONU(光回線終端装置、Optical Network Unit)とは、光ファイバーの通信回線を利用するとき必要な機器です。ONUは、光ファイバーの中を流れてきた光の信号を電気信号に変えたり、光ファイバーへ送り出す電気信号を光の信号に変える働きをします。光ファイバーを使ったインターネット接続サービスを利用するときはONUが必要になります。

まずは光ファイバーをオフィスや住宅まで引き込みます。そして、光ファイバーにONUを接続し、その先にイーサネット方式でLANやパソコンを接続するのが一般的です。

なお、NTTは従来、電話局から電柱までは光ファイバー、電柱から住宅までは従来の銅線で接続する方式(πシステム)を提供してきました。この場合は、電柱の上にONUが置かれています。

ルータ

大きなネットワークを分断し、お互いのサブネットワーク同士での独立性を保つための機器です。必要なデータしか通さず、遠く離れたサブネットワークに接続するときに、次にどのルータに接続すべきかという情報を持っており、次のルータにデータを送るルーティングという機能を持っています。
家庭用のルータは概ね、家庭内や事務所内のLANをインターネットに接続するために使われています。

図には出ていませんが、最近のルータはケーブルを引かずに無線でネットワークを構築することができる「無線LANアクセスポイント」という機能を持っています。単体の無線LANアクセスポイントは、ケーブルでスイッチングハブに接続しますが、最近では無線LANルータが普及しています。無線LANに接続するためには、無線LAN子機をコンピュータに接続する必要があります。

スイッチングハブ

多くのネットワークケーブルを接続口(ポート)につないで、ネットワーク内でのデータのやり取りを行う機器をハブと言います。
昔のハブ(リピーターハブ)は、単純に、一つのポートから入ったデータを、他のすべてのポートに送信していましたが、スイッチングハブは、つながっている機器を識別して、必要なポートにしかデータを送信しない機能を持っており、ネットワーク上でのデータの衝突を避けることができるようになっています。

ネットワークケーブル

ネットワークケーブルとは、LANのネットワーク機器同士を物理的に接続するケーブルです。ネットワークケーブルにはいくつか種類があり、データの送受信方法に違いがあります。
現在、LANで使用されている、ほとんどのケーブルはツイストペアケーブルです。過去には同軸ケーブルも使用されていましたが、ツイストペアケーブルが普及したことで、今はあまり見なくなりました。
また、最近では光ファイバーケーブルの普及が進んでいます。

同軸ケーブル

同軸ケーブルは伝送用の銅線を絶縁体で囲み、さらに外側をコーティングしたケーブルです。LANケーブルとして見る機会は減りましたが、テレビのアンテナ配線のケーブルに用いられています。

dojiku

同軸ケーブルでは、データを流す、つまり電流を流す回路はひとつしかありません。そのため、ある瞬間には、送信か受信どちらかだけしか行うことができません。
もし、1つしかない回路に同時に複数のコンピュータがデータを送信すると、その回路上で電気信号がコリジョン(衝突)してしまい、正しくデータを送ることができません。

イーサネットは、CSMA/CD(Carrier Sense Multiple Access with Collision Detection)という方式を利用しており、コリジョンを検知した際に、ジャム信号(1と0が交互に現れる96bitのパターン信号)を全てのノード(ネットワークに繋がる機器)に対して送出した後、バックオフアルゴリズムによって決定されるランダムな時間を待った後に再送します。このような仕組みのおかげで片方向にしかデータが流せないケーブルでも擬似的に両方向にデータを流すことができます。

このようにデータの送信と受信を同時に行えず、時間を区切って片方向からの送信しかできない通信方式のことを半二重通信と呼びます。

ツイストペアケーブル

ツイストペアケーブルには、UTP(Unshielded Twisted-Pair)とSTP(Shielded Twisted-Pair)の2種類がありますが、ケーブルの役割はほぼ同じです。

STPケーブルは金属箔のシールドで保護されているケーブルで、UTPに比べてノイズに強く、高価です。ノイズが多い工場などに用いられます。

UTPケーブルはSTPなどの他のケーブルに比べ安価な価格で手に入れられる、シールドで保護されていないケーブルです。日本で広く普及しています。

UTP-CAT5

同軸ケーブルでは、データ(電流)を流す電気回路がひとつしかなかったので、片方向にしかデータが流せない半二重通信でした。対して、ツイストペアケーブルでは、8本の線を2本ずつ4組持っており、この1組ずつが1つの電気回路になります。つまり、複数の電気回路を持っているので送信と受信を同時に行うことができます。

このようにデータの送信と受信を双方から同時に行える通信方式のことを全二重通信と呼びます。

光ファイバーケーブル

ここでは紹介のみに留めますが、同軸ケーブルやツイストペアケーブルよりも伝送速度が速いケーブルとして、光ファイバーケーブルがあります。

fromcover-01

同軸ケーブルやツイストペアケーブルの中には電流が流れているのに対して、光ファイバーケーブルには文字通り光が流れています。

ツイストペアケーブルの接続口について

ツイストペアケーブルを接続するネットワークインタフェース(接続口)は、「MDI」と「MDI-X」の2種類があります。

どちらのインタフェースもツイストペアケーブルの8本の線を接続するための8本のピンを持っています。

mdi_mdi-x

MDIは、コンピュータやルータなどが持つネットワークインタフェースであり、(1,2)の組でデータの送信を行い、(3,6)の組でデータの受信を行います。

対して、MDI-Xは、ハブやスイッチのインタフェースで、MDIインタフェースとは逆に、(1,2)の組でデータの受信を行い、(3,6)の組でデータの送信を行います。

残りの4,5,7,8の口は基本的には何にも使いませんが、ベンダ独自の拡張によっては使っている場合があります。

ツイストペアケーブルのピンについて

ツイストペアケーブルには、ストレートケーブルとクロスケーブルという2種類があり、これらはケーブルの両端で対応するピンに違いがあります。

ストレートケーブルは、ケーブルの両端の受信ピンと送信ピンの対応付けが同じになっている真っ直ぐなケーブルです。もう一方のクロスケーブルは、ケーブルの両端で受信ピンと送信ピンがクロスしているケーブルです。

ethernet2

先ほど、MDIとMDI-Xについて説明しましたが、「MDIとMDI-X」を接続する場合はストレートケーブルを使用します。また、「MDIとMDI」や「MDI-XとMDI-X」を接続する場合はクロスケーブルを使用します。

この法則は次のように言い換えることもできます。「コンピュータとハブ」など違う機器同士を接続する場合はストレートケーブルを使用し、「コンピュータとコンピュータ」や「ハブとハブ」など同じ機器同士を接続する場合はクロスケーブルを使用します。

しかし、現在ではAuto MDI/MDI-Xという機能が登場したことにより、ケーブルの種類を区別する必要がなくなりました。

Auto MDI/MDI-X

Auto MDI/MDI-Xは、スイッチングハブが持つ機能の1つで、ポートのMDIとMDI-Xを自動で切り替える機能です。MDIは(1,2)の口で送信、(3,6)の口でデータの受信を行います。MDI-Xはその逆です。この違いにより、ストレートケーブルとクロスケーブルを使い分ける必要がありましたが、Auto MDI/MDI-X機能により、スイッチングハブが自動で送受信口の切替を行うので、機器やケーブルを区別しなくても相互通信が可能になりました。

このため、現在ではネットワークケーブルにクロスケーブルを使うことはほぼ無くなり、ストレートケーブルが用いられます。

イーサネットの種類

イーサネット規格では、ネットワークケーブルの種類も定義されています。例えば、10BASE-2という規格は「帯域幅が10Mbpsのベースバンド方式で接続する最大長185メートルの同軸ケーブル」という意味になります。このように命名規則によって種類が分かれます。

ccent2014_4c

イーサネット規格には次のようなものがあります。

イーサネット名 規格 速度
10BASE-T(イーサネット) 802.3 10Mbps
100BASE-T(ファストイーサネット) 802.3u 100Mbps
1000BASE-T(ギガビットイーサネット) 802.3ab 1000Mbps
1000BASE-LX(ギガビットイーサネット) 802.3z 1000Mbps
10GBASE-T(10ギガビットイーサネット) 802.3an 10Gbps

ここまでネットワーク機器とネットワークケーブルについて見てきましたが、これまで紹介した規格とネットワーク機器とネットワークケーブルを用いて機器の間でデータの送受信が行われます。

LANを構築するにはイーサネット規格に沿ってネットワークケーブル(もしくは無線LAN)を使用して物理的な接続を行いますが、このネットワークケーブルでの機器の接続形態にも種類があります。ネットワーク上の機器とネットワークの経路との相関をダイアグラムで抽象化した概念のことをトポロジと呼びます。ちなみに現在の一般的な家庭用ルータではスター型のトポロジで機器を接続することが多いです。

以下より、トポロジの種類について説明します。

トポロジの種類

図には7つのトポロジが載っていますが、過去にLANでよく使用されていたバス型とリング型、そして現在のLANの主流になっているスター型と拡張スター型について説明します。

NetworkTopologies

バス型

バス型は、1本の基幹線があって、そこに各パソコンがぶら下がっているイメージです。実際には、隣り合ったパソコン同士を順次つないでいく形になります。以前は、よく使われていたものの最近は減っています。この方式だと、途中で 1台のパソコンがトラブルを起こすと、そこから先が機能しなくなるという問題があります。

networking5

過去には、バス型のトポロジで同軸ケーブルを用いてノード(コンピュータ)を繋いでいましたが、データのコリジョン(衝突)が発生しやすいのが難点でした。そこで登場したのが次に説明するリング型(トークンリング)です。

リング型(トークンリング)

リング型は、主にIBMが開発したトークンリングと呼ばれる技術規格で使用されるトポロジです。バス型の基幹線がループ状になったものです。つまり、基幹線が輪になっています。そして、トークンリングでは、その輪の中をデータ送信用のトークンと呼ばれる信号が常に回っていて、その信号に乗せてデータが送られます。

networking8

トークンリングがデータを送受信する手順を説明します。

  1. データを送信するノード(コンピュータ)は、まず空いているトークンを捕まえて、それにデータを搭載して送り出します。
  2. ノードでは、回ってくるデータを監視していて、データのヘッダに自分宛のアドレスが記載されている場合にのみ、データを取り込みます。自分宛ではないデータは、そのまま次のノードに回します。
  3. 宛先不明のデータなどが永久に回り続けるのを防ぐため、データは何周かすると破棄されます。

このような仕組みで片方向にトークンが回り続けるため、同軸ケーブルを用いてノードを繋いでも、データのコリジョン(衝突)が発生しません。

しかし、これもまた、リングのどこかに問題が発生するとトークンが回らずに、全体が機能しなくなってしまうという欠点があるため、現在では使用されていません。

スター型

スター型は1つの集線装置(スイッチングハブ)に複数のノードを接続しているトポロジーのことです。
バス型トポロジーとは異なり、1本のケーブルに障害が発生した場合でも他のノード通信に影響は出ませんが、集線装置に障害が発生すると全てのノードの通信に影響が発生します。現在、LANの主流になっているトポロジーです。

networking6

拡張スター型

スター型のスイッチングハブに、さらに別のスイッチングハブを接続するような構成は拡張スター型と呼ばれています。

networking7

プロトコルの責任範囲

ここまではイーサネットや物理的な通信機器に注目しながらLANについて説明してきましたが、ここからは階層モデルを用いながら、通信で使用される約束事(プロトコル)の責任範囲について説明します。

OSI参照モデル

OSI参照モデルは、コンピュータの持つべき通信機能を階層構造に分割したモデルです。ISO(国際標準化機構)によって策定されました。通信機能(通信プロトコル)を7つの階層に分けて定義しています。

以下がOSI参照モデルにおける各層の役割です。

階層 名称 役割
第7層 アプリケーション層 具体的な通信サービス(例えばファイル・メールの転送、遠隔データベースアクセスなど)を提供。HTTPやFTP等の通信サービス。
第6層 プレゼンテーション層 データの表現方法(例えばEBCDICコードのテキストファイルをASCIIコードのファイルへ変換する)。
第5層 セッション層 通信プログラム間の通信の開始から終了までの手順(接続が途切れた場合、接続の回復を試みる)。
第4層 トランスポート層 ネットワークの端から端までの通信管理(エラー訂正、再送制御等)。
第3層 ネットワーク層 ネットワークにおける通信経路の選択(ルーティング)。データ中継。
第2層 データリンク層 直接的(隣接的)に接続されている通信機器間の信号の受け渡し。
第1層 物理層 物理的な接続。コネクタのピンの数、コネクタ形状の規定等。銅線-光ファイバ間の電気信号の変換等。

networking14

補足ですが、OSI(開放型システム間相互接続、Open Systems Interconnection)とは、ネットワーク上の異なるコンピュータシステムでのデータ通信を可能にするプロトコル体系のことです。異種コンピューター間や異種ネットワーク間の接続ができるように、1977年にISO(国際標準化機構)によって制定され、後に国際電気通信連合(ITU-T)によって勧告されました。

OSI参照モデルは、本来はOSIというコンピュータネットワーク標準に準拠した製品用の参照モデルであり、OSIプロトコルスイートと呼ばれる、OSIのプロトコル(ルール)群の説明に使用されていました。これから説明する規格やプロトコルは現在のネットワークにおけるデファクトスタンダードとなっているものですが、OSI参照モデルに準拠して作られたわけではなく、あくまで「仮にOSIで言えばどの層に相当すると思われる」程度の参考となっています。

以下が現在のネットワークにおけるデファクトスタンダードとなっている規格やプロトコルをOSI参照モデルに当てはめたものです。

階層 名称 プロトコル
第7層 アプリケーション層 HTTP, DHCP, SMTP, SNMP, SMB, FTP, Telnet, AFP X.500
第6層 プレゼンテーション層 SMTP, SNMP, FTP, Telnet, AFP
第5層 セッション層 TLS, NetBIOS, NWLink, DSI, ADSP, ZIP, ASP, PAP, 名前付きパイプ
第4層 トランスポート層 TCP, UDP, SCTP, DCCP, SPX, NBF, RTMP, AURP, NBP, ATP, AEP
第3層 ネットワーク層 IP, ARP, RARP, ICMP, IPX, NetBEUI, DDP, AARP
第2層 データリンク層 イーサネット, トークンリング, アークネット, PPP, フレームリレー
第1層 物理層 RS-232, RS-422 (EIA-422、TIA-422), 電話線・UTP, ハブ, リピータ, 無線, 光ケーブル

今のところは、このような技術が各層の責任範囲(役割)に沿って使用されているという認識だけを持っていただければ大丈夫です。この表に載っているいくつかの技術名称については後で解説します。

MAC副層・LLC副層

第2層のデータリンク層は、MAC副層とLLC副層という2つの層に分割されています。先ほど、イーサネットの項でイーサネットのフレームフォーマットについて説明しました。その中でIEEE 802.3 RawがMAC副層に当たります。そして、IEEE 802.3 with LLCとIEEE 802.3 with SNAPはIEEE 802.3を拡張したものだと説明しました。この拡張に使用したLLCとSNAPがLLC副層に当たります。

図では、IEEE 802.2がLLCとSNAPです。

ether3

データリンク層が2つに分割されている理由に注目して説明しましたが、2019年現在のフレームフォーマットの主流はイーサネットⅡ(DIX)規格であり、イーサネットⅡ(DIX)規格ではネットワーク層をMAC副層とLLC副層に分割する必要がありません。
なので、この知識はあまり一般的には使用しないマニアックなものだと考えてもらって構いません。

ここまでOSI参照モデルについて説明してきましたが、実はOSI参照モデルはインターネットの普及に伴い台頭してきたTCP/IPプロトコル・スイートに標準仕様の座を奪われ、あまり使用されていません。ここでOSI参照モデルを学習したのは、次に説明するTCP/IPプロトコル・スイートの理解を助けるための参考程度と思ってください。

TCP/IPプロトコル・スイート

TCP/IPプロトコルスイートとは、インターネットおよびインターネットに接続する大多数の商用ネットワークで利用できる通信規約(protocol)一式(suite)のことです。単にTCP/IPと呼ばれることもあります。インターネットの黎明期に定義され、現在でも標準的に用いられている2つのプロトコル、TCP(Transmission Control Protocol)とIP(Internet Protocol)にちなんで、TCP/IPプロトコル・スイートと呼ばれます。

OSI参照モデルが通信機能を7つの階層で定義していたのに対して、TCP/IPプロトコル・スイートでは通信機能を4つの階層で定義しています。

以下がTCP/IPプロトコル・スイートです。

階層 名称 プロトコル
第4層 アプリケーション層 HTTP, SMTP, POP3, FTP, SSH, RIP, SNMP, SSH, DHCP
第3層 トランスポート層 TCP, UDP
第2層 インターネット層 IP, ICMP
第1層 ネットワークインターフェース層
(リンク層)
Ethernetケーブル, 無線LAN

さらに、OSI参照モデルとTCP/IPプロトコル・スイートの対応関係は以下になります。

osiandtcpip

OSI参照モデルでは階層を細かく規定しすぎており、層ごとの責任範囲に沿った実装が困難でした。対して、TCP/IPプロトコル・スイートでは各プロトコルの責任範囲が、より実際に沿ったものになっており、実装が容易です。

カプセル化

2台のコンピュータ間でデータの送受信を行う場合には、データをカプセル化する必要があります。通信におけるカプセル化は、通信プロトコルの設計技法であり、上位のオブジェクトを下位の構造から隠蔽または内包させることで、ネットワークでの論理的に独立した機能を抽象化することです。

上記の説明だけでは分かりづらいので具体的に説明します。

例えば、アプリケーション層でカプセル化したデータに対して、データリンク層で内容に変更を加えてはいけません。このような誤った処理が行われないように各層でヘッダを付与することで情報を隠蔽します。

実際の通信では、データの送信側がカプセル化を行い、データの受信側が非カプセル化を行います。これからカプセル化と非カプセル化について説明します。

カプセル化(データの送信側)

データの送信側が、OSI参照モデルやTCP/IPプロトコル・スイートの各層において、ヘッダと呼ばれる制御情報をデータに付加することをカプセル化と呼びます。

encapsulation-transmission

第7層から第1層まで、各層をデータが通るごとにデータに対してヘッダが付与されます。

非カプセル化(データの受信側)

データの受信側がOSI参照モデルやTCP/IPプロトコル・スイートの各層で付加されたヘッダを取り外すことを非カプセル化と呼びます。

encapsulation-reception

第1層から第7層まで、各層をデータが通るごとにデータに付与されたヘッダを取り外していきます。

これから説明することは教科書的な内容になってしまいますが、各層でカプセル化されたデータの単位には固有名が存在します。これをPDU(Protocol Data Unit)と呼びます。

PDU(Protocol Data Unit)

PDU(Protocol Data Unit)とは、OSI参照モデルやTCP/IPプロトコル・スイートの各層でカプセル化されたデータの単位のことです。

また、送信・受信側の同じ階層のプロトコル同士が1対1で通信することをピアツーピア(peer to peer)通信と呼びます。ピアツーピア通信で使用されるデータ単位がPDUです。

PDUのデータ単位の呼び方はOSI参照モデルやTCP/IPプロトコル・スイートの層ごとに異なります。

OSI参照モデルにおけるPDUの呼び方は以下になります。

階層 名称 PDU
第4層 トランスポート層 セグメント
第3層 ネットワーク層 パケット
第2層 データリンク層 フレーム

これ以外にも第1層の物理層では、2進数でデータをやり取りするのでPDUをビットと呼ぶことがあります。

pdu

TCP/IPプロトコル・スイートにおけるPDUの呼び方は以下になります。

階層 名称 PDU
第4層 アプリケーション層 データ
第3層 トランスポート層 セグメント
第2層 インターネット層 パケット
第1層 ネットワークインターフェース層
(リンク層)
フレーム

ここまでは階層モデルによるプロトコルの責任範囲とカプセル化・非カプセル化による各階層間でのデータの流れ方について説明しました。
ここからは各ネットワーク機器の役割をOSI参照モデルに当てはめながら説明したあとに、MACアドレスとIPアドレスについて説明します。

ネットワーク機器が送受信を行うには

ネットワークにおいて、一意のコンピュータを見つけるためにはMACアドレスとIPアドレスが必要です。どちらか一方だけでは一意のコンピュータを見つけることはできません。例え話として、MACアドレスは「氏名」のようなもの、IPアドレスは「住所」のようなものとよく説明されます。

MACアドレスはコンピュータの製造時に割り振られますが、製造後のコンピュータは各国に出荷されるため、世界中に広がるインターネットの中ではMACアドレスだけでコンピュータの場所を特定することは困難です。IPアドレスを使用すると、各国にIPアドレスの管理団体が存在するため、場所の特定が可能になります。

では、MACアドレスは必要なのか?という疑問がありますが、MACアドレスは必要です。DHCPによってプライベートIPアドレスを割り当てるときはMACアドレスでコンピュータを識別してから割り当てることになります。このほかにも各ネットワーク機器はMACアドレスを使用します。

OSI参照モデルでは、MACアドレスはデータリンク層(第2層)、IPアドレスはネットワーク層(第3層)で使用されます。これは下位層(物理側)に近いイーサネットではMACアドレスを使用し、上位層(論理側)に近いIP(インターネットプロトコル)ではIPアドレスを使用するということです。

表を見てください。これは各ネットワーク機器がOSI参照モデルで担当する層と、扱っている情報です。

層番号 層名 機器名 情報
第3層 ネットワーク層 ルータ/L3スイッチ IPアドレス
第2層 データリンク層 L2スイッチ/ブリッジ MACアドレス
第1層 物理層 リピータ/リピータハブ 電気信号(2進数)

表では層ごとに扱う情報が違うことが分かると思います。注意したいのはL2スイッチ(第2層 データリンク層に属するスイッチ)とL3スイッチ(第3層 ネットワーク層に属するスイッチ)は明確に分けて考える必要があることです。

リピータ/リピータハブの仕組み

リピータは電気信号の増幅器です。電気信号は伝送距離が長いと減衰しますが、リピータでは信号を増幅し、伝送距離を延長することができます。現在はリピータとしての機能がL2スイッチ・L3スイッチに含まれているので、使用されることは少なくなりましたが、過去には10BASE-5や10BASE-2で同軸ケーブルと共に使用されていました。

リピータハブ(ハブ)は、リピータに集線装置としての役割を持たせたものです。1つのポートから受信したデータをそのまま他のポート全てに送信します。従来型の信号を増幅して中継するタイプのハブとスイッチングハブを区別するために用いられる呼び方です。

L2スイッチ/ブリッジの仕組み

L2スイッチとブリッジはOSI参照モデルのデータリンク層で動作する機器です。リピータと同様に電気信号の波形の増幅、整形を行えるだけでなく、イーサネットフレームのヘッダを理解することができます。これはイーサネットフレームのヘッダに含まれる宛先MACアドレスを見て、適切なポートにフレームを転送することができるということです。

スイッチとブリッジの役割は同じです。L2スイッチはハードウェア(ASIC)で処理するので、ブリッジと比べて高速で、ハブ(集線装置)を持っています。一方、ブリッジはソフトウェア(CPU、メモリ、プログラム)で処理するので、スイッチと比べて低速で、ハブ(集線装置)を持っていません。

動作は以下となります。今回はブリッジを例に説明しますが、スイッチも動作原理は同じです。

ethernet26

ブリッジは、フレームが通過するとコンピュータが接続されているポートとコンピュータのMACアドレスを学習し、MACアドレステーブルに書き込みます。この時点ではブリッジはホストBのMACアドレスを知らないので、ポート2からフレームのコピーを各コンピュータに送信します。このようにすべての接続したノード(ポート)へパケットを転送することをフラッディングと言います。ホストCとホストDはフレームのヘッダを確認し、MACアドレスが自分宛てではないのでフレームを破棄します。

上図の動作ではまだブリッジの利点は見えませんが、次のフィルタリングで利点が分かります。

ethernet27

上図のとおり、ブリッジはホストBのMACアドレスを学習するとMACアドレステーブルに従い、フラッディングを行いません。この仕組みにより、フレームを転送するための無駄なトラフィックの発生を防ぐので、コリジョンが発生しにくくなります。つまり、ブリッジ(スイッチ)はコリジョンの発生範囲(コリジョンドメイン)を分割できるデバイスということです。

コリジョンドメインとカスケード接続

コリジョン(通信の衝突)が発生する範囲のことをコリジョンドメインと呼びます。そして、ハブ(集線装置)同士を階層的に接続することをカスケード接続と呼びます。

例えば、以下の場合、2台のリピータハブがカスケード接続されており、コリジョンドメインは分割されていません。

cable09

ここにさらにリピータハブをカスケード接続して台数を増やしていくとコリジョンドメインが分割されないまま、コリジョンドメインが増大していくことになり、コリジョンが発生する可能性がどんどん高まっていきます。

これを解決するために開発されたのがスイッチとブリッジです。

スイッチやブリッジを介してリピータハブを接続することで、スイッチやブリッジはコリジョンドメインを分割し、コリジョンドメインを小さくすることができます。

図は、リピータハブ、スイッチ、ブリッジを接続したものです。赤枠の範囲がコリジョンドメインです。

ハブ(リピータハブ)はコリジョンドメインを分割しません。対して、スイッチとブリッジはポート単位でコリジョンドメインを分割します。ポート単位でコリジョンドメインを分割することをマイクロセグメンテーションと呼びます。

ccent2015_10b

フレームの転送方式

L2スイッチやブリッジがフレームを転送するための方式には、ストアアンドフォワード、フラグメントフリー、カットスルーの3つがあります。

transmode

名称 チェック部分 FCSエラーチェック 信頼性
ストアアンドフォワード 全部 する 高(転送遅延大)
フラグメントフリー 64Byte しない
カットスルー 6Byte しない

図と表の通り、ストアアンドフォワード、フラグメントフリー、カットスルーの順番に信頼性が高いです。現在のフレーム転送方式の主流はストアアンドフォワードです。

FCS(CRC)とは、イーサネットⅡ(DIX)規格のフレームのデータ内容の誤りを検出・訂正するための部分で、フレームの末尾に4バイトで付加されています。物理層レベルでデータがやりとりされているとき、すなわち、信号データがケーブルなどの伝送媒体上を伝わっているときに、 雑音などの影響を受けて、データが変化してしまうことがあります。このような信号データの誤りを検出し、可能な限りエラーを訂正するために用いられる情報が、FCS(Frame Check Sequennse)です。

ルータの仕組み

ルータはOSI参照モデルのネットワーク層で動作する機器です。ネットワーク層で動作する機器とはいえ、ルータは物理層では電気信号の送受信を行い、データリンク層では、フレームヘッダのタイプをみることにより上位層のプロトコルを識別をして、IPパケットの場合、ネットワーク層でパケットヘッダの「宛先IPアドレス」を確認し、ルーティングテーブル(経路情報)に従ってパケットを転送します。

ルータの動作は以下になります。

ethernet29

図には載っていませんが、最初にDHCPサーバからIPアドレスが各コンピュータに割当てられます。家庭用ルータのほとんどがDHCPサーバとしての機能を持っているので、ルータからIPアドレスが割り当てられていると考えていただいて大丈夫です。
その後、OSPFプロトコルに従って、ルータはネットワーク全体の地図(トポロジマップ)を作成します。この地図はネットワーク内の全てのルータで共有されます。作成した地図をもとに、ルータはSPF(Shortest Path First、最短パス優先)アルゴリズムによって、宛先ネットワークに対する最短経路を計算し、ルーティングテーブルに宛先IPアドレス、ネクストホップ、インターフェースなどの情報を書き込みます。OSPFの詳細仕様については割愛します。

ここからは上図について説明します。まずはルーティングテーブルに注目してください。ルーティングテーブルには宛先ネットワーク、ネクストホップ、インターフェースなどの情報が書き込まれています。
現在、3つのネットワークが存在しているので各ルータのルーティングテーブルに3つのレコードが書き込まれています。「宛先ネットワーク」は存在している3つのネットワークのことです。「ネクストホップ」はSPFアルゴリズムで学習した、目的ネットワークに辿り着くまでの最短経路を通る場合の次の宛先です。ネクストホップがConnectedとなっているのは直接接続しているネットワークということを表しています。「インターフェース」は機器とケーブルが接続する部分のことで、「ポート」と呼ばれたり「I/F」と略したりします。

ホストA(192.168.0.1)からホストB(192.168.2.1)宛てに送られたパケットがルータAに到着すると、ルータAは自身のルーティングテーブルを参照します。ルータAのルーティングテーブルには、宛先ネットワークに192.168.2.0/24が記録されており、ネクストホップは192.168.1.2なので、ルータAはルータB(192.168.1.2)にパケットを送信します。パケットを受信したルータBは自身のルーティングテーブルを参照します。ルータBのルーティングテーブルには、宛先ネットワークに192.168.2.0/24が記録されており、ネクストホップはConnectedなのでパケットはホストBが存在する192.168.2.0/24のネットワークに渡されます。その後はパケットの宛先IPアドレスをもとに、ホストBにパケットが届けられます。

L3スイッチの仕組み

L3スイッチはOSI参照モデルのネットワーク層で動作します。L3スイッチはL2スイッチの機能に加え、各ポートがルーティングできる機能を有しています。また、ルータよりもパケット処理能力が高く、企業内のLANネットワークのコア機器として位置づけられるのが一般的です。ただし、ルータのようにWAN接続(シリアルやISDN)などの機能や暗号化処理など高度なソフトウェア処理を行うことは出来ません。

ルーティングテーブルの更新方法(スタティック/ダイナミック)

各ルータはそれぞれが持つルーティングテーブルに従ってデータを転送します。
ルーティングの方法には、スタティックルーティング(静的ルーティング)とダイナミックルーティング(動的ルーティング)の2種類があります。

スタティックルーティングは、ルータに固定的に経路情報を設定する方法であり、その設定は人間の手で行います。しかし、経路情報が固定されているため、ネットワークに障害が生じたときに自動的に障害地点を避けて、別の経路を探したりすることはできません。スタティックルーティングでは障害が起こる度に人間がルーティングテーブルを設定しなおす必要があります。
また、ルータにつながっているネットワークが非常に多いような場合、繋がっているネットワークの数だけルーティングテーブルを設定する必要があるので、これは大変な作業になります。

一方、ダイナミックルーティングは、人間が経路情報を設定するのではなく、ルーティングプロトコルによってルータ同士が通信を行い、経路情報を自動的に作成します。ルーティングプロトコルには、RIP、OSPF、BGPなどのいくつかの種類があります。

ダイナミックルーティングを用いた場合、新しいネットワークが追加されても、自動的にルーティングテーブルが変更されるという利点があります。また、その一方でルーティングテーブルを常に更新するために各ネットワーク間には、常にある程度のトラフィックが生じることになります。

ユニキャスト/マルチキャスト/ブロードキャスト

ネットワーク内のノード(コンピュータ)とデータの送受信を行う時には、IPアドレスを指定する必要があります。通常の場合、1対1での通信になりますが、特別なIPアドレスを指定することで、ネットワーク内の「全てのノード宛て」や「特定のグループに属するノード宛て」といった通信を行うことができます。

名称 説明
ユニキャスト 特定のノード宛て。1対1。
マルチキャスト 特定のグループ宛て。1対グループ。
ブロードキャスト ネットワーク内の全員宛て。1対全員。

ブロードキャストドメイン

ブロードキャストが届く範囲のことをブロードキャストドメインと呼びます。

スイッチを何台もカスケード接続すると、ブロードキャストドメイン内のコンピュータの接続台数も増加します。それに伴い、フラッディング(ルータがブロードキャストで全てのノードにパケットを送ること)も増加し、ブロードキャストドメイン内の帯域が無駄に消費され、各ノードにも無駄な処理が発生してしまいます。

l_ccent2015_10c

ルータを用いることでブロードキャストドメインを分割することができます。図では一番上にルータを配置し、ブロードキャストドメインを分割しています。

MACアドレス

MACアドレス(マックアドレス、Media Access Control address)とは、ネットワーク上で、各ノード(コンピュータやネットワーク機器など)を識別するために設定されているLANカードなどのネットワーク機器のハードウェアに一意に割り当てられる物理アドレスです。OSI参照モデルで言えば、第2層のデータリンク層のMAC副層で定義されています。具体的にはフレームフォーマットで定義されているMACアドレスのことです。

Windowsのコマンドプロンプトでは物理アドレス(Physical Address)と表記されており、ノードIDなどの別名で呼ばれたりすることもあります。

イーサネットの場合、MACアドレスは48ビットの符号です。MACアドレスの表現には、「04-A3-43-5F-43-23」や「32:61:3C:4E:B6:05」のように2桁区切りを行い、16進数表現を用います。8ビットごとに区切っているため、このような区切り方はオクテット(octet、8組の意味)区切りと呼ばれます。このMACアドレスの6つのオクテットのうち、最初の3オクテットがベンダーID部、次の1オクテットが機種ID、最後の2オクテットがシリアルIDとなることが一般的です。

ローカルアドレスとグローバルアドレス

MACアドレスは、ローカルアドレスとグローバルアドレスの2種類に大別することができます。

先頭オクテットの1ビット目がユニキャストとマルチキャストを識別するビットで、IGビットと呼ばれます。IGビットのIGは「Individual Address(個別アドレス)/Group Address(グループアドレス)」の略であり、0のときに個別アドレス、1でグループアドレスを示しています。

先頭オクテットの2ビット目がグローバルアドレスとローカルアドレスを識別するビットで、GLビットと呼ばれます。0であればグローバルアドレス、1であればローカルアドレスであることを示しています。

wi-macaddress

グローバルアドレスの場合、世界中のMACアドレスの管理を行なっているIEEEに料金を支払うことで割り当てと登録を受けることができます。
上位3オクテットはOUI(Organizationally Unique Identifier)と呼ばれており、これがIEEEから割り当てを受ける部分です。OUIを割り当てられた各製造者は下位3オクテットを重複しないように独自に割り当てており、1つのOUIの割り当てを受けることで1677万7216個の製品に個別のMACアドレスを割り振ることができます。この仕組みにより、原則として、MACアドレスは世界中で唯一の番号となります。

IPアドレス

IPアドレスは、ネットワーク上の機器を識別するために指定する識別用の番号です。OSI参照モデルで言えば、第3層のネットワーク層で定義されています。データリンク層のMACアドレスを物理アドレスということに対応して、論理アドレスとも呼ばれます。IPアドレスには、現在一般的に使われているものとしてIPv4とIPv6の2種類があります。

IPアドレスは、IPv4では32bit、IPv6では128bitの数値です。この数値のうち、最上位ビットに近い側をネットワーク部、最下位ビットに近い側をホスト部として区別します。ネットワーク部がネットワークを指定し、ホスト部がそのネットワーク内の機器を指定します。ネットワーク部とホスト部の区別にはサブネットマスクを用います。

コンピュータをルータに接続すると、ルータからDHCP(Dynamic Host Configuration Protocol)という機能でコンピュータにIPアドレスが自動的に割り当てられます。LANの中に設置したファイルサーバにアクセスしたり、ウェブブラウザから外部のウェブサイトを見たりするときには、IPアドレスで各コンピュータを識別することでデータの送受信を行っています。

LANの中に設置したファイルサーバにアクセスするときにはプライベートIPアドレスが用いられます。ウェブブラウザから外部ネットワークのウェブサイトを見るときにはグローバルIPアドレスが用いられます。

IPアドレスの割り当て方にも種類があります。ウェブブラウザから外部のウェブサイトを見るとき、見ている側はダイナミック(動的)にIPアドレスが割り当てられています。対して、ホームページを提供しているコンテンツサーバ側ではスタティック(固定)にIPアドレスが割り当てられています。

以下の用語について順番に説明していきます。

  • IPv4とIPv6
  • プライベートIPアドレス
  • グローバルIPアドレス
  • IPアドレスの割り当て方(スタティック、ダイナミック)
  • サブネット

IPv4とIPv6

IP(Internet Protocol)は、IPv4(Internet Protocol version 4)とIPv6(Internet Protocol version 6)の2種類があります。IPはOSI参照モデルにおいてネットワーク層に位置付けられるプロトコルです。

パケットの経路選択と、その断片化と再構築を主な機能とします(ネットワーク層でのPDUがパケットです)。

TCP/IPの基本機能としてインターネットなどで世界中で利用されています。
IPv4とIPv6は役割は同じですが、それぞれの大きな違いはアドレスの長さです。

IPv4

IPv4は、10進数で表される192.168.1.1や192.168.255.255のような、数値と.(ドット)の組み合わせです。10進数の0~255の範囲の数値が用いられ、3桁ごとに.(ドット)で4つのセクションに区切ります。255をビットで表すと「11111111」というように8桁の1になります。つまり、8ビットごとにドットで区切るというわけです。このように8ビットごとに区切ることをオクテット区切りと呼びます。

まとめると、IPv4はアドレスが32ビットあり、8ビットずつ4つのオクテットに.(ドット)で区切って表記されます。

IPv6

IPv6は、16進数で表されるfd00:12:11af:1:21b:8bff:fe9b:b3c8のような、数値と:(コロン)の組み合わせです。16進数の0~ffffまでを4桁ごとに:(コロン)で8つのセクションに区切ります。ffff(10進数では65536)をビットで表すと「1111111111111111」というように16桁の1になります。つまり、16ビット(2バイト)ごとにコロンで区切るというわけです。

まとめると、IPv6はアドレスが128ビットあり、16ビットずつを8つに:(コロン)で区切って表記されます。

IPアドレス枯渇問題

IPv6が誕生した背景には、IPv4のIPアドレス枯渇問題があります。

IPv4はアドレスの長さが32ビットなので、IPアドレスは最大で約43億(2の32乗)個です。そして、IPv6はアドレスの長さが128ビットなので、IPアドレスは最大で約340澗(2の128乗)個です。

IPv4アドレスでは数が足りなくなってきたため、その解決策として検討された最終成果がIPv6です。しかし、新しいプロトコルであるIPv6を普及させるには時間がかかるため、短期的な対策であるIPv4の延命として、1994年のプライベートアドレス (RFC 1918) の導入と前後して、CIDR (RFC 4632)・NAT (RFC 2663) ・Proxy(プロキシ)など、プライベートIPアドレスを使用するLANとグローバルIPアドレスを使用するWANとを使い分けることでIPv4アドレスを節約し有効活用する取り組みが行われてきました。

プライベートIPアドレス

主にLANで用いられるIPアドレスがプライベートIPアドレスです。ローカルIPアドレスと呼ばれることも多いです。LANなどの企業内ネットワークに存在する端末が、自由に使用できるIPアドレスです。自ネットワーク内でのみ一意であるため、ほかのネットワークでは同じプライベートアドレスが利用されている可能性があります。

プライベートIPアドレスの範囲はRFC 1918(技術仕様などについての文書群)で規定されており、通常はその範囲内で設定します。範囲はネットワークの規模によってクラスA、クラスB、クラスCに分けられており、以下のとおりです。

クラス 規模 範囲 アドレス数
A 大規模 10.0.0.0 - 10.255.255.255 16,777,216
B 中規模 172.16.0.0 - 172.31.255.255 1,048,576
C 小規模 192.168.0.0 - 192.168.255.255 65,536

家庭用のルータは初期状態ではクラスCに設定されていることがほとんどなので、プライベートIPアドレスは192.168.1.2などになります。

また、WindowsなどではIPアドレスが設定されておらず、ルータのDHCPも見付からない場合には自動的に169.254.1.0 - 169.254.254.255の範囲のIPアドレスが振られます。これをリンクローカルアドレスと呼びます。

グローバルIPアドレス

主にWANで用いられるIPアドレスがグローバルIPアドレスです。前述のプライベートIPアドレス、リンクローカルアドレス、また、特殊用途のIPアドレスなどを除いたIPアドレスのことを「グローバルIPアドレス」と呼び、インターネットの接続用に利用され、重複が発生しないように世界的な管理が行われています。

グローバルIPアドレスは、上部の組織から下部の組織に委任される形で管理が行われています。

図を見てください。グローバルIPアドレスは、まずICANNからAPNICに割り当てられます。APNICの下に存在するのが「国別インターネットレジストリ(National Internet Registry/NIR)です。日本国内のIPアドレスを担当するのは「JPNIC」という団体です。更に、JPNICの下には「ローカルインターネットレジストリ(Local Internet Registry/LIR)」が存在します。ローカルインターネットレジストリは、日本国内でエンドユーザにIPアドレスを割り当てます。

3_1_2_1_710x550

補足ですが、ローカルインターネットレジストリとは、ISP(インターネットサービスプロバイダ)、レンタルサーバ事業者、VPS事業者などのグローバルIPアドレスの貸し付けを行う事業者のことです。

IPアドレスの割り当て方(スタティック、ダイナミック)

IPアドレスの割り当て方のうち、IPアドレスを固定する方法がスタティックIPアドレスです。よく「固定IPアドレス」と呼ばれるのがこの方法です。ホームページを自宅のサーバに設置して外部に公開する場合、IPアドレスが頻繁に変わってしまうと利用者はホームページに辿り着くことができないので、IPアドレスを固定する必要があります。

対して、IPアドレスを固定しない方法がダイナミックIPアドレスです。LANではルータからDHCPによるダイナミック(動的)なIPアドレスの割り当てが行われます(コンピュータを起動するたびにプライベートIPアドレスが変わるのはこのためです)。

また、ISPからはダイナミック(動的)にグローバルIPアドレスが割り当てられます。グローバルIPアドレスは限りある資源であるため、必要に応じて貸し出すことで、ISP側はグローバルIPアドレスを節約できるというわけです。

NATとNAPT

ホームページを公開するときはグローバルIPアドレスとローカルIPアドレスの両方を固定する必要があります。そして、プライベートIPアドレスとグローバルIPアドレスは直接通信することができないため、とあるLANの外にあるコンピュータから、とあるLANの中にあるコンピュータにアクセスするには、グローバルIPアドレスとローカルIPアドレスを何らかの方法で紐付けなければなりません。この紐付けの作業は、ルータがNAT(Network Address Translation)と呼ばれる技術を使用して行っています。

NATはSNAT(Source NAT、送信元NAT)とDNAT(Destination NAT、送信先NAT)の2つに分類されます。

SNATはプライベートIPアドレスから発生した通信をグローバルIPアドレスに届ける技術です。
DNATはグローバルIPアドレスから発生した通信をプライベートIPアドレスに届ける技術です。

図では、LAN外部からグローバルIPアドレスによって自宅のルータにやってきたHTTPプロトコルによる送信リクエストを、ルータがDNATによって自宅サーバのプライベートIPアドレスに変換しています。その後、リクエストを受け取ったサーバがLAN外部のコンピュータにレスポンスを返すときには、ルータがSNATによってプライベートIPアドレスをグローバルIPアドレスに変換します。

このように通常の場合、SNATとDNATは同時に必要になります。

jitaku_server

しかし、現在ではほとんどNATは利用されていません。NATは、1対1でのプライベートIPアドレスとグローバルIPアドレスの変換にしか対応していません。例えば、LANの中で複数人が同じウェブサイトを見ようとしたときには、ルータはグローバルIPアドレスをどのプライベートIPアドレスに変換すれば良いのか分からなくなってしまいます。

これを解決するために作られたのがNAPTです。

NAPTはポート番号を利用することで、1つのグローバルIPアドレスと複数のプライベートIPアドレスを紐付けて変換することが可能になります。ここでのポート番号はルータが採番したランダムな数値くらいに捉えてしまっても問題ありません。ポート番号についてはあとで説明します。

ip_masquerade-01

サブネット

ブロードキャストドメインが適切な大きさに分割されていないネットワークでは、コンピュータの台数が多くなってくると、ブロードキャストによるフラッディングが増加し、帯域幅の使用効率が低下します。このような場合、別途複数のルータを用意しなくてもサブネット化することでブロードキャストドメインを分割できます。

サブネットとは、クラスフルネットワーク(プライベートIPアドレスの項で紹介したクラスA、B、CなどのまとまったIPアドレスの束を思い出してください)を分割した小さなネットワークのことです。分割後はそれぞれが別のネットワークになります。

例えば、クラスCの場合、192.168.0.0 〜 192.168.255.255までが使用可能なIPアドレスですが、第1・2オクテットの192.168をネットワーク部(ネットワークアドレス)、第3・4オクテットの0.0 〜 255.255をホスト部(ホストアドレス)と呼びます。

ネットワーク部は「どのネットワークか」を表すアドレスです。ホスト部は「どのコンピュータか」を表すアドレスです。

d001993-1

CIDR

ネットワーク部とホスト部を区別するためにCIDR(Classless Inter-Domain Routing、サイダー)と呼ばれる表記方法があります。先ほどのクラスCを例にすると192.168.0.1/16のような表記方法になります。IPアドレスの最後に/16という記述が追加されましたが、これがCIDRです。IPアドレスは全体で32ビットありますが、/16と指定すると32ビットあるうちの前方16ビットをネットワーク部に割り当てるという意味になります。つまり、192.168.0.1のうちの192.168をネットワーク部、それ以外をホスト部に指定しています。

サブネットマスク

サブネットマスクは、ネットワーク部とホスト部の境界を表すものです。/16というCIDRを2進数では11111111.11111111.00000000.00000000のようにネットワーク部を1、ホスト部を0で表すことができます。10進数では255.255.0.0と表現できます。このような表現方法をサブネットマスクと呼びます。

サブネット化を行うには、ネットワーク部に割り当てるアドレス数を増やす必要があります。先ほどのクラスCの例では192.168の部分はクラスによって範囲が決められているので変更することができません。そのため、CIDRを/16と指定すると、ネットワークアドレスは1個、ホストアドレスは65,536個になります。

それでは、ネットワークアドレスを増やすために、192.168.0.1/24のようにCIDRを/24にしてみます。サブネットマスクを2進数で表すと、11111111.11111111.11111111.00000000になり、10進数では255.255.255.0になります。

この場合、第1・2・3オクテットの192.168.0 ~ 192.168.255がネットワーク部になり、第4オクテットの0 ~ 255がホスト部になります。

第1・2・3オクテットの24ビットがネットワーク部になったため、新たに256個のネットワークアドレスを使用することができるようになりました。しかし、ネットワーク部を24ビットに増やしたことでホスト部は8ビットになったので、ホストアドレスは256個までしか使用することができなくなりました。

256個あるホストアドレスのうち、192.168.0.0/24といったホスト部が0になるアドレスはネットワーク自体を表すアドレスです。また、192.168.0.255/24といったホスト部が255になるアドレスはブロードキャストを表すアドレスになります。これらを除いた254個が使用可能なホストアドレスになります。

ここまでのまとめ

  • OSI参照モデルやTCP/IPプロトコルスイートによって使用技術・規格・プロトコルの責任範囲を表すことができます。
  • 物理層では電気信号(0と1)でデータを扱います。伝送距離が長いと電気信号が衰弱するので、増幅器によって信号を増幅します。
  • データリンク層では、イーサネットを扱い、フレームというデータ単位で通信します。フレームにはMACアドレスが含まれており、データリンク層の各ネットワーク機器はMACアドレスを元にMACアドレステーブルを更新しながら通信を行います。MACアドレスは製造時に機器ごとに割り振られる一意の番号で、例えるならコンピュータの「氏名」に相当します。
  • ネットワーク層では、各ネットワーク機器でインターネットプロトコルを扱い、パケットというデータ単位で通信します。パケットにはIPアドレスが含まれており、ネットワーク層の各ネットワーク機器はIPアドレスを元にルーティングテーブルを更新しながら通信を行います。IPアドレスは例えるならコンピュータの「住所」に相当します。プライベートIPアドレスはルータから割り振られる同一ネットワーク内での一意の番号です。グローバルIPアドレスはICANNからNICとISPを通して割り当てられる世界的に管理された番号です。

ここまではOSI参照モデルでいう第1層 ~ 第3層(物理層、データリンク層、ネットワーク層)について説明しました。

ここからは第4層(トランスポート層)より上の層の話になります。「ポート」と「ソケット」という切り口で、なるべく簡潔にアプリケーションが通信する方法について説明します。

ポート

ポート(port)は、コンピュータが通信を行う際のデータのエンドポイント(終点)です。「ポート」という言葉はハードウェア(入出力ポート)についても用いることがありますが、今回は上記のようなデータの終点(最終到着点)という意味になります。

IPアドレスを建物の住所に例えるなら、ポートは個別の部屋、ポート番号は部屋番号に相当します。一意のコンピュータを特定するためにはIPアドレスを用いますが、IPアドレスだけでは1つのセッション(HTTPなどの上位層のプロトコルによる通信のことです)しか通信することができません。実際には、同時に複数の通信プログラムを動かすことが可能になっていますが、これは「ポート番号」を使用しているからです。

ポート番号は「IPアドレス:ポート番号」のように、IPアドレスの後ろに:(コロン)を付けて、その後にポート番号を記述します。これにより、1つの通信セッションを特定することができます。

ポート番号は1 ~ 65535までを指定することができます。他のアプリケーションで使用しているポート番号を使うとポートの競合が生じて正常な通信を行うことができません。

ポート番号には種類があり、以下の3種類に分かれます。0 ~ 49151番までのポート番号は予約されており、自由に使用することはできません。

種類 範囲 内容
WELL KNOWN PORT NUMBERS 0番 - 1023番 一般的なポート番号
REGISTERED PORT NUMBERS 1024番 - 49151番 登録済みポート番号
DYNAMIC AND/OR PRIVATE PORTS 49152番 - 65535番 自由に使用できるポート番号

試しにブラウザで http://182.22.59.229:80 にアクセスしてみてください。182.22.59.229はYahoo! JAPANのホームページにアクセスするためのグローバルIPアドレスです。httpプロトコルは80番ポートを使用するので、末尾に:80を追加してもホームページにアクセスすることができます。

同じように https://182.22.59.229:443 も試してみましょう。httpsプロトコルは443番ポートを使用するのでアクセス可能です。80と443以外のポート番号も試して、アクセスができないことを確認してください。

さらに、ブラウザで http://150.95.184.238:80 にアクセスしてみてください。これは私が管理しているウェブサイトです。「Welcome to nginx!」と表示されると思います。

続いて、ターミナル、もしくはコマンドプロンプトを開き、netstat -anを実行してみましょう。netstatはネットワーク接続やルーティングの状況、ネットワークインターフェース(NIC)の状態を報告するコマンドです。
たくさんの行が表示されますが、その中に以下のような行があります。

TCP         192.168.2.59:57729     150.95.184.238:80      TIME_WAIT

もしかしたら、手元の環境ではTIME_WAITの部分がESTABLISHEDになっているかもしれませんが、あまり気にしないでください。

表示中の「TCP」は第4層 トランスポート層で使用するプロトコルです。TCPとUDPの2種類があります。
「192.168.2.59:57729」は自分のプライベートIPアドレスとポート番号です。「150.95.184.238:80」は通信相手のグローバルIPアドレスとポート番号です。TIME_WAITやESTABLISHEDについてはあとで説明します。

以下の図を見てください。

tcpip22

先ほどのYahoo! Japanや私のウェブサイトを用いた例の中では、具体的に上図のようなことを行っています。

続いて、TCPとUDPについて説明します。

TCP

TCP (Transmission Control Protocol)は、IPと同様にインターネットにおいて標準的に利用されているプロトコルです。TCPは、IPの上位プロトコルでトランスポート層で動作します。ネットワーク層のIPとセッション層以上のプロトコル(例:HTTP、FTP、Telnet) の橋渡しをする形で動作しています。

TCPは、信頼性の高い通信を実現するために使用されるプロトコルであるのに対して、同じく、IPの上位プロトコルのUDPは信頼性が高くはありませんが、高速性やリアルタイム性を求める通信に使用されます。このようにどちらかが優れているということではなく、通信特性によりTCPまたはUDPを使い分けます。

コネクション型

TCPは、コネクション型のプロトコルです。コネクション型はその名の通り、通信を確立するもの同士で連絡を取り合って制御を行う方式です。

日常で見られるものに例えるのならば、電話機がまさにコネクション型です。
電話機は互いに受話器を持って話をします。話をした言葉は相手にちゃんと届きますし、もし話している途中でうまく聞き取れないときには、相手に聞き返してもう一度同じ内容を聞く事ができます。

このように、通信を確立するためにお互いが連絡を取り合って制御する方式をコネクション型と呼び、信頼性がある方式です。

コネクションの確立と切断

TCPでは、信頼性の高い通信を提供するためのエンドツーエンドの通信が可能な状態かを確認します。
この確認する方法として3Way-Handshake(スリーウェイハンドシェイク)と呼ばれる方法を使用します。名前の通り以下の3つの要求と許可の確認をし、通信できる状態を作り出します。

コネクションの確立(3Way-Handshake)の手順は以下になります。
 
1.送信元が通信路を確保するため、相手にデータ転送の許可要求を出す。(SYN)
2.宛先側が許可を送信元に知らせると同時に受信側も許可要求を出す。(ACK + SYN)
3. 最初にSYNを送った送信元も宛先側に許可を出す。(ACK)

tcp_connection_1

以上のように双方が許可依頼、許可受領を済ますとコンピュータ上ではESTABLISHEDという状態になります。この状態をコネクションの確立と呼びます。

続いて、コネクションの切断手順を説明します。

TCPではコネクションを確立させるために3Way-Handshakeを行いますが、コネクションを切断する際にも双方からの終了申請&受諾によって切断を確実なものにします。

コネクションの切断の手順は以下になります。

1.送信元が切断要求を送る。(FIN)
2.宛先側が切断許可を出す。(ACK)
3.宛先側が切断要求を送る。(FIN)
4.送信元が切断許可を出す。(ACK)

tcp_connection_2

これで両ノードが元のCLOSED状態になり、切断終了となります。

TCPの通信を状態遷移図に表すと以下のようになります。ブラウザでウェブサイトを見る場合を考えると、状態遷移図の右側がクライアント(ブラウザ)、左側がサーバ(ウェブサイト)になります。

先ほど、netstatコマンドで確認した、TIME_WAITやESTABLISHEDがどのような状態なのかを確認してみてください。

tcp_connection_3

状態 説明
LISTEN(聴取) TCPモジュールはリモートホストからのコネクション要求を待っている。パッシブオープンの後で入る状態と同じ。
SYN-SENT(SYN送信済み) TCPモジュールは自分のコネクション要求の送信を終え、応答確認と対応するコネクション要求を待っている。
SYN-RECEIVED(SYN受信済み) TCPモジュールは同期(SYN)セグメントを受信し、対応する同期(SYN/ACK)セグメントを送って、コネクション応答確認を待っている。
ESTABLISHED(確立済み) コネクションが開かれ、データ転送が行える通常の状態になっている。受信されたデータは全てアプリケーションプロセスに渡せる。
FIN-WAIT-1(FIN待機1) TCPモジュールはリモートホストからのコネクション終了要求か、すでに送った終了要求の応答確認を待っている。
FIN-WAIT-2(FIN待機2) この状態に入るのは、TCPモジュールがリモートホストからの終了要求を待っているときである。
CLOSE-WAIT(閉鎖待機) TCPモジュールはアプリケーションプロセスからのコネクション終了要求を待っている。
CLOSING(閉鎖処理中) TCPモジュールはリモートホストからのコネクション終了要求を待っている。
LAST-ACK(最終ACK) リモートホストに送ったコネクション終了要求について、TCPモジュールがその応答確認を待っている
TIME-WAIT(時間待機) コネクション終了要求応答確認をリモートホストが確実に受取るのに必要な時間が経過するまで、TCPモジュールは待機している
CLOSED(閉鎖) コネクションは全く存在せず、確立段階にも入っていない

UDP

UDP (User Datagram Protocol) とは、IPやTCPなどと同様にインターネットにて標準的に利用されているプロトコルです。UDPはIPの上位プロトコルでトランスポート層で動作します。ネットワーク層のIPとセッション層以上のプロトコル(例:DNS、NTP、DHCP)の橋渡しをするかたちで動作しています。

UDPのポート番号の考え方についてはTCPと同様です。しかし、TCPのように3way handshake、確認応答、順序制御、再送制御、ウィンドウ制御、フロー制御などの機能はなく、ほとんど何もしないプロトコルです。UDPは、TCPと比べて信頼性が高くはありませんが、速さやリアルタイム性を求める通信に使用されます。

UDPは、コネクションレス型のプロトコルであることから、TCPに比べると信頼性がないものの高速に転送を行うことができます。また、UDPヘッダサイズ(8byte)が少ない事から、その分アプリケーションのデータを多く送受信することができます。ただし、パケットが到達する保証がないことから、パケットロスなどの場合、アプリケーション側で再送処理をして通信を成立させるかパケットロスが容認できるアプリの必要があります。

コネクションレス型

UDPは、コネクションレス型のプロトコルです。コネクションレス型は、連絡を取り合って制御はせずに、相手が受け取る準備ができているかにかかわらず、送信してしまう方式です。

手紙はまさにコネクションレス型です。相手が何をしていようと手紙を送りつけて、基本的にいつ届くのかは分かりませんし、もしかしたらどこかで紛失してしまい、相手に届かないこともあるかもしれません。

このようにコネクションレス型は、相手が何をしているかは関係なしに送りつける方式です。もちろん途中でパケットが消失してしまったり、到着順も考慮していません。

そのためコネクションレス型通信は信頼性のない通信と言われています。

ただし、この方式にはメリットもあります。コネクション型はお互いが連絡を取り合う必要があることから、安定した通信を実現できるものの、確認のためのデータのやり取りが発生することから、ネットワークのトラフィックが増大してしまうデメリットがあります。対して、コネクションレス型はネットワークへの負荷が軽いため、通信の効率が良いです。

ソケット

プログラムでポートを用いて通信するには、一般にソケットと呼ばれる仕組みを用います(ソケットはBSDで開発されたため、BSDソケットとも呼ばれます)。

ソケットとは通信の端点のことで、2台のコンピュータが通信しているとき、その通信路の両端、すなわちそれぞれのコンピュータにソケットが存在します。また、ソケットのインターフェースやソケットを扱うライブラリプログラムも併せてソケットと呼ぶこともあります。

ソケットを用いた通信は、以下のような手順で行われます。

  1. サーバ機でサービスを提供するプログラムは、ソケットを作成し、サービス固有のポート番号をソケットに割り当て (bind)、待ち行列を用意し (listen)、クライアントからの接続を待ち受ける (accept)。
  2. サービスを利用するクライアントプログラムは、ソケットを作成し、そのソケットの通信相手としてサーバ機のIPアドレスとサービスのポート番号を指定し (connect)、接続を行う。
  3. サーバは接続を受け付けると、新規にソケットを作成し、そのソケットとクライアントとの間に通信を確立する。もとのソケットは再び待ち受けに戻る(これは、会社などで、受付係が来客を担当者に引き合わせ、その後また受付に戻るようなものと考えることができる)。
  4. 通信が終わると、2.および3.で作成したソケットは破棄される。

このような手順に沿って通信を行うプログラムの形式は、ソケットプログラミングと呼ばれます。

最後に

早足ではありましたが、LANについて説明しました。

私が認識している範囲内では、この記事で詳しく扱っていない話題として以下のものがあります。

  • DNS
  • RIP・OSPF・BGPなどのルーティングプロトコル
  • IPv4のアドレス解決プロトコル(ARP)
  • IPv6についてのもっと突っ込んだ話
  • プロキシ
  • ポート解放
  • ファイアウォール
  • ソケットプログラミング
  • ネットワーク構築作業の実際(Ciscoルータの設定方法や機器の配線作業など)

これらについても追々記事にしていけたらいいなぁと思っています。

参考資料
スクールの教科書
書籍 ポートとソケットがわかればインターネットがわかる――TCP/IP・ネットワーク技術を学びたいあなたのために (Software Design plus)
Local Area Network - Wikipedia
Wide Area Network - Wikipedia
IPアドレス - Wikipedia
インターネット・プロトコル・スイート - Wikipedia
開放型システム間相互接続 - Wikipedia
カプセル化 (通信) - Wikipedia
ネットワーク・トポロジー - Wikipedia
CSMA/CD - Wikipedia
IEEE - Wikipedia
IEEE 802.11
ONU 用語解説辞典|【公式】NTTPC
モデム 用語解説辞典|【公式】NTTPC
プライベートIPアドレス - @IT ネットワーク用語事典
RFC(Request For Comments)とは - IT用語辞典
日本のIPアドレスを管理しているのは誰? | IPラーニング
30 Minutes Networking No.RT23
OSI参照モデルまとめ - Qiita
超入門 ネットワークケーブルの種類と配線方式の違い (1/2):CCENT/CCNA 試験対策 2014年版(4) - @IT
全2重通信(Full Duplex)/半2重通信(Half Duplex)
2013年 冬号 (1-3月)| 表紙より | 科学するこころを開く サイエンスウィンドウ
3 Minutes Networking No.15
Ethernet LAN - ストレートケーブルとクロスケーブル
ネットワークトポロジーとは
ネットワークの基礎知識
IEEE802.「11a」・「11b」・「11g」・「11n」・「11ac」って何?|ネットの知恵袋|フレッツ光公式|NTT西日本
クロスケーブルは もう要らないの? | 日経 xTECH(クロステック)
データの流れ - ネットワークエンジニアを目指して
イーサネットのフレームフォーマット
イーサネット(Ethernet)フレームフォーマットについて - ネットワークエンジニアを目指して
集合住宅 LAN の内側にサーバを置いた話 (自宅サーバの思い出 Advent Calendar 2016) - Qiita
NATに関して可能な限り分かりやすくまとめて見た。 - Qiita
NAT と SNAT と DNAT - 隙あらば寝る
IPマスカレード(NAPT)|Web会議・テレビ会議システムならLiveOn(ライブオン)
カスケード接続 (cascade connection)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
3 Minutes Networking Supplement No.01
コリジョンドメインとブロードキャストドメイン (1/2):CCENT/CCNA 試験対策 2015年版(10) - @IT
イーサネットとルーティング:ルータの仕組みを学ぼう(2) - @IT
OSPFとは
静的ルーティングと動的ルーティング
スイッチ(ブリッジとの違い 転送方式)
【TCP】コネクションの確立までの道のり - Qiita
TCPの状態遷移 - Qiita
TCP/IP - TCPとは
TCP/IP - UDPとは
TCP/UDP - コネクションとコネクションレス - ネットワークエンジニアを目指して
ポート番号 - Wikipedia