魔術師見習いのノート

プロフィール

魔術師見習い
Author魔術師見習い-_-.
Twitter魔術師見習い

コンピュータ関係のメモを主に書きます.

MENU

コンピュータ・ネットワーク(3) -データリンク層-

投稿日:
タグ:

目次

データリンク層は5階層TCP/IPモデルの下から2番目の層である.

アプリケーション層
トランスポート層
ネットワーク層
データリンク層
物理層

以下にデータリンク層が持つ3つの要素を表で示す.

サービス
  • 物理的に接続されたいくつかのノードの中(物理的なネットワーク)で、あるノードから指定したノードへの通信を可能にする。
  • 通信品質を向上のためにさまざまな処理を行う
インタフェース転送単位フレーム
アドレス物理(ハードウェア)アドレス(MACアドレス)
代表的なプロトコル
  • ARP
  • PPP
  • MAC(IEEE802やイーサネットなど)
多くのユーザはこのレイヤを意識することはないだろうが、スイッチングハブと呼ばれるハードウェアは,この物理層からデータリンク層までを扱うものである.

副層

データリンク層は更にいくつかの副層に分けて考える場合がある。例えば、物理的な制御と論理的な制御に分けることができる。

LLCLogical Link Control論理リンク制御副層 高品質な通信を可能にする。
  • 伝送エラーの検出
  • フロー制御
  • 送信の際の多重化と受信の際の非多重化
MACMedia Access Controlメディアアクセス制御副層 物理的に接続されたいくつかのノードの中(物理的なネットワーク)で、ユニキャストを可能にする。
  • MACアドレス
  • 競合制御(衝突対策)
物理層が1対1接続で、かつ全二重通信の場合、メディアアクセス制御副層は必要ない。

通信

物理層では、いくつかのノードを接続し、ネットワークを構築する。物理層の通信形態は、接続するノード数に関係なくブロードキャストである。データリンク層では、そのネットワーク上のあるノードに、宛先物理(ハードウェア)アドレスが自分のものであるフレームが届いた場合、それを受け取ることで、ユニキャストを実現する。

ARP

TCP/IPの通信では,各マシンはIPアドレスという論理的なアドレスを使って通信を行うが,最終的にはMACアドレスによってマシンを特定する.IPアドレスからMACアドレスを取得するには,ARP(Address Resolution Protocol)を利用する.ARPでは,物理的なネットワークでブロードキャストによって調べたいIPアドレスを伝える.受信したノードは,そのIPアドレスが自身のものである時,MACアドレスをその送信元ノードに返す.

フレーム

フレームとはデータリンク層で扱う転送単位で,ビット群のことである.ビット群は,さらにいくつかのフィールドに分類され,フィールドはそれぞれ必要な情報を保持する.フレームの構成にはいくつかの規定があり,以下にいくつか紹介する.なお,ここのフィールドの1セルは,ヘッダとデータを除いて1バイトを表しているで使用される.

DIX
プリアンブル MACヘッダ データ FCS
46〜1500bytes
世界中のLAN(Local Area Network)で最も使用されるイーサネットという規格では,DIXが主流に使用される.DIX規格はDecとIntel,Xeroxが共同開発した規格である.DIX規格の場合,MACヘッダのタイプ・長さのフィールドはタイプを表す.
IEEE802.3
プリアンブル SFD MACヘッダ データ FCS
46〜1500bytes
以下に各フィールドの用途を示す.
プリアンブル
SFD(Start Frame Delimiter)
同期を取り,フレームの開始を合図するためのフィールド.DIXでは8バイト(64ビット)で101010…と繰り返し,最後の2ビットを11,IEEE802.3では7バイトで101010…と繰り返し,最後の1バイト(8ビット)が10101011となる.
FCS(Frame Check Sequence)
エラー検出のためのフィールド.このフィールドにより,MACヘッダとデータが正しいかを判定する.エラー検出にはパリティや加算による方法など様々ある.イーサネットの場合,エラー検出の方法には巡回冗長検査(CRC:Cyclic Redundancy Check)方式を使用する.
MACヘッダ
宛先MACアドレス 送信元MACアドレス タイプ・長さ
宛先MACアドレス
送信元MACアドレス
MAC(Media Access Control)アドレスとは必ず一意に定まる48ビットの値のこと.物理ネットワークではこの値によってノードを識別する.UNIX系のifconfigやWindowsのipconfigでは,1バイト(8ビット)毎に区切って,"00:03:47:11:22:33"というように16進数で表記される.各ハードウェアベンダーは,利用可能なMACアドレスの番号の範囲を持つ.
タイプ
長さ
このフィールドが46から1500であればIEEE802.3規格の長さを表しており,1501以上であればDIX規格のタイプを表している.

衝突(コリジョン)

通信で使用される経路が送信でも受信でも使用される場合,いくつかのノードが同時に通信しようとして送信するデータが破損することがある.これを衝突(コリジョン)と呼ぶ.そして、いくつかのノードが同時に送信して衝突が発生する範囲のことをコリジョンドメインという。データリンク層では,これに備えるためのいくつかのプロトコルがある.

CSMA/CD(Carrier Sense Multiple Access/Collision Detection)プロトコル
CSMA/CD方式で衝突が発生した場合,ノードはランダムな間を置いて再度通信を行う.IE802.3ではCSMA/CDが採用されている.
CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)プロトコル
通信を開始する前に受信を試みることで、他に通信を行なっているノードがあるかを調べる。いずれかのノードが通信している場合、通信が終了してからランダムな間を置いて通信を行う。無線LAN規格のIEEE802.11aやIEEE802.11b、IEEE802.11gで利用されている。
FDDI(Fiber Distributed Data Interface)プロトコル
トークンリングプロトコルを拡張したプロトコル.トークンリングプロトコルとは衝突を回避するためのプロトコルで,ノードはトークンと呼ばれるものを保有する時のみ通信が許可される.トークンは1つの物理ネットワーク内のノードに1つだけ存在し,それをローテーションで渡していく.トークンリングプロトコルでは,衝突の発生を完全に防ぐことができるが,経路で問題が発生した場合,トークンが移動しなくなって全てのノードの通信ができなくなるという問題がある.FDDIプロトコルでは,トークンの受け渡しの経路を二重化することでこの問題を防ぐことができる.

リピータハブを用いたような物理層での接続の場合、それらの範囲はコリジョンドメインである。しかし、データリンク層で接続するスイッチングハブや、ネットワーク層で接続するルータを使用した場合、コリジョンドメインを分割できる。リピータハブはただ接続範囲を拡大するためのものだが、スイッチングハブはどこのポートに何のノード(MACアドレス)が接続されているか記憶することで,コリジョンドメインを分割する。これにより、衝突の頻度を減らすことができる。

データリンク層で接続された範囲のことをブロードキャストドメインという。ブロードキャストドメインは、フレームのブロードキャストが届く範囲のことである。本稿で述べる物理ネットワークとはこの範囲のことを指す。


関連コマンド

arp
システムが使用するARPのキャッシュを制御する.例えば次のようにして使用することで,キャッシュされたARPの情報を見ることができる.
user% arp 192.168.1.1
もし調べたいIPアドレスがあれば,pingのようなコマンドでそのアドレスへアクセスを行なってから,arpコマンドを使えば良い.以下にいくつかのオプションを紹介する.
-s
エントリの追加(IPアドレスとMACアドレスを対応付ける). IPアドレス"172.168.1.1"にMACアドレス"01:23:45:67:89:ab"を対応付けるには以下のように行う。
user% arp -s 172.168.1.1 01:23:45:67:89:ab -i wlan0
-d
エントリの削除
user% arp -d 172.168.1.1 -i wlan0
-a
ARPテーブルを出力.
-n
ホストやポート,ユーザーの名前を解決せずに生のまま出力.
-i
インタフェースを指定.
-v
詳細な情報を出力.
tcpdump
パケットスキャニングツール.-eオプションを指定することで,フレームのヘッダ情報を表示できる.
user% tcpdump -e -i eth0


補足

CRC(Cyclic Redundancy Check)

イーサネットの通信やZIP,PNGなどで利用されるエラー検査のアルゴリズムである.CRC方式では以下の方法で計算された値を比較することで,エラーを演出する.

  1. 入力と除数のビット列の左端を合わせる.
  2. 除数の左端のビットに対応する入力のビットを見て,1ならば,XOR演算を行う(除数の足りない桁は全て0とする).
  3. 解を入力とする.
  4. 除数の桁を右に1つずらす.
  5. 除数の右端の桁が入力の右端の桁より右にいかない間,1から4を繰り返す.
以下に例を示す.
10010010  入力
1011      除数
00100010
  1011
00001110
    1011
    0101  最終解

一覧