はじめに
この連載では仮想的なLANを実装することにより、目に見えないTCP/IPプロトコル群を、手を動かして目で実際に確認しながら習得することを目的としています。ただし、TCP/IPの全てを解説するのは分量上不可能ですし、余計に読者を混乱させてしまいますので、筆者が重要と考えている部分だけ解説します。あらかじめご了承ください。
今回は最下層であるネットワークアクセス層にあたる部分を解説します。
対象読者
- C#もしくはVB.NETで基本的なプログラミングができる方。
- TCP/IPの動きを身に付けたい方。
- ネットワークの初心者。
必要な環境
C#もしくはVB.NETのコンパイラが必要です。お持ちでない方は、マイクロソフト社のホームページにて、無償で利用できるVisual Studio Express Editionが配布されていますので、ダウンロードして入手してください。
ネットワークアクセス層の概要
この層では媒体に関する事柄を取り扱っています。具体例を挙げると、トークンリング方式のLAN、Ethernet、ATM(Asynchronous Transfer Mode)、無線LANなどの媒体制御方法がこの層に該当します。
このように、この層には色々な規格がありますが、今回はTCP/IPがテーマですのでEthernetに関することだけを解説します。EthernetでLANを構築するのに必要な媒体は、「PC」「LANケーブル」「NIC(Network Interface Card)」「HUB」の4種類です。次項でそれぞれの媒体について解説します。
LAN構築に必要な機材
LANケーブルは、非常に多くの種類があります。10BASE5、10BASE2、10BASSE-T、100BASE-TX、100BASE-FX、1000BASE-SX、1000BASE-LX、1000BASE-T、10GBASE-LR、10GBASE-ER……。
数が多くて一見ややこしいですが、実はそれほど難しくありません。数値はメガを単位とする回線スピード(理論値)で、ハイフンの後ろのFXとかTというのはケーブルの種類です。LANケーブルは主に、同軸ケーブル・UTPケーブル・光ファイバケーブルの3つがあり、TはUTPケーブルというふうに決まっています。ただし、ギガイーサネット以降ではややこしくなっており、S(Short Wavelength)、F(Fibre Channel)というふうに決められています。なので、1G以上のLANケーブルを買うときはよく注意しましょう。
回線スピードとは1秒当たり何ビット送信できるかを表す論理的な数値です。例えば、CD-ROM(640MB=5120Mビット)分のデータを送信する場合、100Mbpsならば51.2秒、1Gbps(1024Mbps)ならば5秒、10Gbps(10240Mbps)ならば0.5秒で送信できるということです。ですがこれはあくまでも理論値であり、実際はもっと送信に時間がかかります。
NICはLANケーブルをコンピュータにつなぐためのカードで、拡張スロットに挿して使います。通信時にインタフェースの働きをするので、正式名称は「ネットワークインタフェース・カード」と呼びます(略してNIC)。NICは対象とする回線が決まっており、10M用、100M用、1G用などが販売されています。
HUBはいわゆる集線装置で、複数の回線を繋いで端末間の通信ができるようにするために必要な装置です。ただし、10ギガビットEthernetになってからはただの集線装置ではなく、より賢く通信するための機能が付いた、スイッチングハブと呼ばれる装置を使用します。
以上でイーサネットLANの構成要素の解説が済んだので、次項ではその中を流れるデータについての事柄を解説します。
データのフォーマット
LAN上にデータを流す場合、パケットという単位に分割して送信します。Ethernetではパケットを「フレーム」と呼び、データのフォーマットを厳密に定めています。Ethernetフレーム(通称MACフレーム)のフォーマットは次の図の通りになっています。
![Ethernetフレームのフォーマット](http://cz-cdn.shoeisha.jp/static/images/article/3656/ethernet_frame.gif)
各項目の簡潔な説明は以下のとおりです。
項目 | 説明 |
プリアンブル/SFD | プリアンブルは、MACフレームの受信時に同期を取るために必要なビットパターンです。SFDはMACフレームの開始地点を示しています。回線上は色々なビットが流れているので、開始地点を知る必要があります。 |
宛先アドレス | データを送る相手の識別子です。識別子はベンダに付与された番号+製品番号で構成されています。 |
送信元アドレス | データ送る端末の識別子です。 |
タイプ/長さ | 1500以下の場合はユーザデータの長さを表し、それ以上の場合はプロトコルを表します。例えば0x0800(16進数、10進数では2048)はIPです。 |
ユーザーデータ | 上位プロトコルのデータが入っている場所です。この部分は最低46バイトなので、それ以下の場合はPADと呼ばれるダミーデータを付加します。 |
FCS | 宛先アドレスからユーザーデータまでの範囲に対するチェックサムの結果が格納される部分です。データが壊れていないかチェックするために使用します。計算はCRC(Cyclic Redundancy Check:巡回冗長検査)と呼ばれる方法で行います。当面のところは覚える必要がないと思いますのでこの連載では取り扱っていません。 |
今のところ分からないかも知れませんが、これらの意味は連載を読むと徐々に分かってきますので安心して読み進めて下さい。
以上で文章だけの解説は終わりです。次項からはサンプルコードを交えた解説を行います。