イーサーネットでは、一本のケーブルに複数のフレームを
同時に流せません。
(複数の信号が衝突すると、信号が壊れるからです。
→リピータハブ , 合成波形)
そこで、ケーブル内に送信専用と、受信専用のワイヤーを設け(→全2重方式と呼ばれます。)、
スイッチング機能付き集線装置(HUB)内では、
各送信ワイヤーに繋がる端子への送出をハード的に切り替えるスイッチを使い、衝突が起きない制御を行います。
この構造のハブがスイッチジングハブ(レイヤー2スイッチ)と呼ばれ、以下にイメージを示します。
赤と青のフレームが同時に通信できています。
このスイッチによるフレームの出力先切り替えを可能にしているのは、
あて先のMACアドレスが、どの出力ポート先にあるかを記憶しているからです。
この記憶域は、MACアドレステーブルと呼ばれます。
MACアドレステーブルには、自動で学習する「ダイナミック」、
管理者が静的に指定する「スタティック」、
登録された送信元MACアドレス以外のフレームを破棄する「セキュア」
タイプがあります。(ダイナミックのみのものが多いようです)
フレームのイメージを再び以下に示します。
プリアンプル8byte | あて先MACアドレス6yte | 送信元MACアドレス6yte | タイプ2yte | データ46〜1500byte | FCS 4byte |
「ダイナミック」の場合、あて先のMACアドレステーブルへ
の記憶はいつ行われるのでしょうか?
スイッチやコンピュータの電源を入れて、最初にマシンから送られたフレーム内の情報で記憶します。
受信フレーム内「送信元MACアドレス」をその、ポートの接続先として記憶するわけです。
ですが、まだ他のポートの出力先が記憶されていない場合は、
全部のポートに出力することになります。(基本は全部に送られるでした。)
そうやって、ポートの先に繋がるホストのMACアドレスを学習した後は、
送るべきポートにだけフレームを送ることになります。この機能は、
MACアドレス フィルタリングと呼ばれています。
では、偶然に同じ「あて先MACアドレス」のポートへ、
異なるポートから同時に送られてきた場合、
スイッチはどう対応するのでしょうか、この場合はフレームをメモリに一時記憶し、
一方の送信が終わって
空いたら送るというバッファリングの機能が使われます。
バッファが存在することで、速度の遅いホストと速いホストとの通信もスームーズになりますが、
バッファが満杯になったらどうするのでしょうか、
結果的には、その以降フレームは捨てられます。
送る努力はするが、保障はできないベストエフォート型配送なのです。
この対応規則で、バッファが一杯になりそうな場合に
送信元へ「ポーズフレーム」を送って、送信を止める依頼の規格「IEEE802.3x」があります。
これは全2重で、この規格に対応している機器に使われますが、
対応していない昔の機器へはどうするのでしょうか?
それは「バックプレッシャ」と呼ばれる方式で対応します。これは
半2重通信に使われる方式で、わざと送信元へJAMと呼ばれる信号を送り、
衝突時が起きたと錯覚させる方式です。そして、送信側のCSMA/CDの動作に委ねる形態です。
現在のスイッチは、この2つの機能を持っています。
スイッチの性能には、次の要素があります。
● バッファメモリの容量
● ポートに記憶できるMACアドレスのエントリ数
(ポートの先が一つのホストとは限りません。
ポートの先が複数のホストに繋がるスイッチの場合もある分けです。)
● ワイヤースピード(ポートの回線速度)
1秒当たりの転送可能ビットのbps以外に、パケット数での性能指標でppsを使うことがあります。
これは、1パケットを最小である84バイトとして、1秒間に処理可能なパケット数です。
● 異なるLANに分割するVLAN(Virtual LAN)機能
フレームを送出することをフォワーディングと呼びますが、その方法は次の3つタイプです。
(1)カットスルー
あて先アドレスまで受信した時点で、フォワーディングを始めるので遅延が最もすくない。
しかし、壊れたフレームも送出してしまう。(最後まで読み取らないとエラーフレームか判断できないため)
(2)修正カットスルー
先頭64バイトまでフォワーディングを始めない方式で、壊れたフレームのほとんどが
64バイト以下であり、その場合エラー判別するFSKまで読み取れるので、
エラー判別した壊れたフレームを送出しない制御を行う。
(3)ストア&フォワード
フレームを全て受信するまでバッファに記憶して、その後に出力する。
バッファメモリの性能向上より、現在のほとんどスイッチはこのタイプです。
VLAN(Virtual LAN)機能は、比較的高価なスイッチの機能です。
まず、この機能があるスイッチには、スイッチの各ポートに識別IDが付けられます。
これは「VLAN ID」と呼びます。このIDでグループ化します。
そしてこのグループ一つが一つのLANになるように、
ブロードキャストを届く範囲を制限します。
(ブロードキャストは、同じLANの中だけしか届きません。
この範囲はブロードキャストドメインと呼ばれます。
つまりブロードキャストのフレームを、スイッチング機能で
他のグループに設定したポートへ送出しないようにすれば、
別のLANを仮想的に作ったことになります。)
補足:コリジョンドメインとは、コリジョンが発生した時の影響範囲を言います。
一般にスイッチは、全二重なのでの出力と出力が衝突することはないのですが、
通信相手が半二重なら自分のポートもオートネゴシエーションが効いる時に半二重となります。
その意味で、スイッチのポートとPCなどが繋がっている狭い接続範囲もコリジョンドメインと呼ばれます。
このような場合で、コリジョンが発生しても他のポートには衝突信号が流れません。
その意味でスイッチはの機能は、コリジョンドメインを分割する機能と言えます。
補足: スイッチング HUB は、リピータHUB(100BASE-TXの場合: 最大2段まで)と違って原理上無限に多段カスケード接続することができます。 しかし実際には、スイッチング HUB も数個カスケード接続をすることにより遅延が生じてしまうので実用上の制限は存在すると思われるます。 実際に「スイッチング HUB を多段にカスケードすると遅延が発生し実用的でない」という解説も存在します。