システム奮闘記:その106
(2016年11月14日に掲載)
OSIモデルの中のデータリンク層の位置づけ
ところで物理層の上にあるデータリンク層。 MACフレームをつくっている所だ。
OSIモデル(TCP/IPの場合) |
---|
ネットワークには7つの階層がある。 トランスポート層では、ポート番号の認識を行なう。 ネットワーク層ではIPアドレスの認識を行なう。 データリンク層はMACアドレスの認識を行なう。 |
だが、これ以上の知識はないため、調べてみる事にした。
MAC副層とLLC副層 - ネットワークエンジニアを目指して
基礎から学ぶWindowsネットワーク:第17回 LLCとNetBEUIプロトコル (2/3) - @IT
詳説 TCP/IPプロトコル:第6回 イーサネット(その1) - イーサネットの規格とCSMA/CDアクセス制御方式 (2/5) - @IT
データリンク層には
LLC副層とMAC副層がある
というのだ。知らなかった。
おぼろげながら、LLCという文字は見た事があるのだが
これは知らないという事に変わりはない。
データリンク層だが、2つの階層にわかれている。
それを階層の中に、階層を作っているので「副層」と呼んでいるのだ。
2つの副層に分かれているデータリンク層(TCP/IP) |
---|
データリンク層は、LLC副層とMAC副層の2つにわかれている。 |
ところでLLC副層とMAC副層というが・・・ LLCやMACの意味は何やねん? なのだ。 意味を知らないで、丸暗記だと行き詰まる。 そこで調べてみると、LLCは Logic Link Control(論理結合制御) で、MACは MACはMedia Access Control(媒体接続制御) なのだ。 LLC副層の役目を見てみる。
LLC副層の役目 | |
---|---|
(1) | 論理アドレスの割り当て |
(2) | フレームの検査 |
これだけだと
だから、何やねん?
になる。
ところで話がややこしいのは、物理層とデータリンク層に
またがっている物があるからだ。
物理層とデータリンク層にまたがっている物 |
---|
物理層とMAC副層が連携をとっているため上図のような 分類分けになっている。 後述しているが、この図で書いているIEEE802.3 Ethernetとは IEEE802.3が標準化したEthenerの規格で、現在、主流ではないのだ。 |
だが、色々、調べていくと 現在ではLLC副層を使わへん! という記述しているサイトをいくつか見た。 そうなると・・・ 一体、どないなってんねん? で混乱してきた。
MACフレーム
MACフレームを見てみる。
MACフレームの構造 |
---|
IEEE802.3とEthernet II型(DIX型ともいう)がある。 |
これを編集している時、いかにも冷静に調べているように思われるが Ethernet IIとは何やねん!! とか サイトの中には、Ethernetでも IEEE802.3のフレームという説明していると所があるやん!! で大混乱していたのだ。 あとでわかったのだが、こういう違いがあるのだ。
EthernetとEthernet IIの違い | |
---|---|
Ethernet | IEEE802.3で標準化されたEthernetの規格 |
Ethernet II |
Dec、Intel、Xeroxの3社が標準化したEthernetの規格。 3社の頭文字をとってDIX型とも言う。 |
現在では2つは互換性がとれている。
そしてEthernetで主流なのが
Ethernet II(DIX)
なのだ。
2つのEthernetの規格の比較 |
---|
プリアンブルとSFDだが、IEEE802.3ではわけているが EthernetII(DIX)では、わけていない。 SFDはStart of Frame Delimiterの略だ。 フレーム開始の合図になる部分だ。 EthernetIIでは、SFDをプリアンブルの最後の部分として組み込んでいる。 |
プリアンブルの部分を見てみる。
MACフレーム:プリアンブル(EthernetII DIX) |
---|
「10」が続いているのは、同期をとるためだ。 あと、受信する側が、信号を受信する際、いきなりデータを送ると 同期がとれていないなどの理由で、受信し損ねる事がある。 それを防ぐため、受信し損ねても良いように「10」を繰り返した後 最後の「11」で、データ開始の合図を行なっているのだ。 |
次に上の階層(ネットワーク層:IP層)で作られたデータの部分を見てみる。 この部分のデータの長さは決まっている。
MACフレーム データ長(EthernetII:DIX) |
---|
実際のデータとPadding(パディング:詰め物)と呼ばれる部分がある。 この2つの合計が46オクテットから1500オクテットになるようにするのだ。 |
Paddingをする理由は・・・
CSMA/CDを行なうため
なのだ。
データが小さすぎると、衝突検出ができないため、小さいデータ送信の際
意図的にデータに詰め物をしてデータを長くしているのだ。
次にMACアドレスが格納されている部分を見る。
MACアドレスが格納されている部分 |
---|
送信元のMACアドレスと、送信先のMACアドレスが格納される場所がある。 LAN内同士の通信の場合、MACアドレスを使って、お互いの通信を行うのだ。 |
ところでMACアドレスは、48ビットで構成されている。
MACアドレスの構造(I/GビットとG/Lビット) |
---|
先頭のI/Gビットは、「Individual Address(個別アドレス)/Group Address(グループアドレス)」の略だ。 「1」が個別アドレス、「0」がグループアドレスになる。 通常、「0」なのだ。「1」の場合はブロードキャストの場合だ。 要するに、LAN内にパケットを撒き散らす際、「1」を使うのだ。 2ビット目の「G/Lビット」だ。 「0」なら唯一のグローバルアドレスの意味で、「1」はローカルアドレスの意味だ。 「1」は閉じたネットワークで使うらしく、プライベートIPに似たような感じだ。 ただ「1」が使われる事は、まずない。 |
次にベンダーIDだ。
MACアドレスの構造(ベンダーID) |
---|
3ビット目からある22ビットの部分は、ベンダー(製造メーカ)のIDだ。 国際的な機関から割り当てられている。 そのため、ここの部分を見れば、LANの通信機器の製造メーカがわかるのだ。 ちなみにヤマハは「00-A0-DE」なのだ。(16進数表現に注意) |
そしてステーションIDだ。
MACアドレスの構造(ステーションID) |
---|
ステーションIDは、製造メーカが任意で決める事ができる部分だ。 |
だが、こういう説明をしても、いまいちピンとこないだろうし ハッキリ書くと 退屈でオモロナイ なのだ。 私自身、退屈なので、何か良いものがないかと探してみたら 良い無償ソフトを発見したのだ。Wireshark 無料のパケットキャプチャソフト
無料のパケットキャプチャのソフト Wireshark を見つけた。 以下のサイトからダウンロードできる。 http://www.wireshark.org/ インストールの方法や簡単な使い方は以下のサイトにある。 ネットワーク入門サイト - Wiresharkの使い方 LLC副層を使うか、使わないかで混乱してきたが 実の所、MACフレームの構造を調べている間に気づいたのだ。 さて、実際にパケットの中身を見てみる。 先ほど紹介したWiresharkというソフトを使うのだ。
パケットチャプターソフト「Wireshark」の画面 |
---|
赤く囲んだ部分は、見たい通信部分だ。 通信プロトコルは「HTTP」なので、外部のWebサイトへの接続要求部分になる。 TCP/IP通信なので、MACフレーム、IPヘッダー、TCPヘッダーを見る事ができる。 そして桃色で囲んだのは、赤く囲んだ部分のパケットの中身だ。 本来なら「0」と「1」なのだが、ここでは16進数で表した物を表示させた。 茶色に塗っている部分は、パソコンのIPアドレスだ。 見られたくないので、塗りつぶしたのだ。 |
MACフレームの中身を見てみる。 まずは、送信先のMACアドレスだ。
送信先のMACアドレスを見る (Wiresharkというソフトを使う) |
---|
外部のWebサイトへ接続要求した際のパケットだ。 送信先のMACアドレスは桃色で囲んだ部分だ。 「00-A0-DE」が含まれている。ヤマハに割り当てられている部分だ。 外部のサイトにパケットが向かう際、社内LANから外に出る際に 最初に通るのがヤマハのルーターだ。 そのためMACアドレスは、ヤマハのルーターのアドレスになっている。 パケットの中身を見ると、相手の情報まではわかってしまうのだ。 |
次に送信元のMACアドレスを見る。
送信元のMACアドレスを見る (Wiresharkというソフトを使う) |
---|
青色の部分は送信元のMACアドレスになる。 デルのパソコンなのが、バレバレなのだ。 |
次のタイプを見てみる。
EthernetIIのMACフレームのTYPE部分とは |
---|
TYPEとは通信プロトコルの種類を示しているのだ。 |
Wiresharkで拾ったパケットを見てみる。
MACフレームのTYPE(タイプ)をWiresharkで見てみる |
---|
MACフレームの上位層がIP層である事を意味する「0800」(16進数)になっている。 |
誤り検出のFCS
MACフレームの最後の部分に誤り検出のFCSがある。 Frame Check Sequence の略だ。直訳すると「フレームの並び検査」なのだ。
フレーム検査を行なう部分 |
---|
検査する部分はMACアドレス部分とデータ長、実際のデータ(パディング含む)だ。 |
FCSは4oct(32ビット)なのだ。 どういう風にFCSを求めるのか。
FCSの求めかた |
---|
MACアドレス部分とデータ長、実際のデータ(パディング含む)のビットの並びを CRC演算を行なって、32ビットのデータにしたのがFCSだ。 |
ところで CRC演算って何やねん? なので調べてみた。 Cyclic Redundancy Checking の略で、直訳すると「巡回冗長の検査」なのだ。 だから何やねん!! なのだ。 ここで動けなくなっても仕方がないので前に進んでみる。 検査する範囲のビットの並びを、多項式で割った際の、余りの部分を 使うようだ。
CRC演算では生成多項式が使われる |
---|
検査部分を多項式で割った際の、余りがFCSになるという。 |
これだけでは よくわからへん なのだ。 そして・・・ どうやってビットの並びを多項式で割るねん? なのだ。 そこで具体的に見ていくと
ビットの並びを多項式で表現する |
---|
生成多項式だが、元々は、ビットの並びだが、それを多項式表現にしている。 xが「1」の意味で、桁は「べき乗の値+1」になっている。 |
なんで、こんな表現にするねんと思った。 あとになって、案外、その方が見やすい事がわかった。 さて、CRC演算の計算内容を見ていく事にする。
CRC演算の内容 |
---|
検査される部分のビットの並びから、生成多項式を割る。 生成多項式だが、1の部分をxに置き換えた物だ。 xの32乗は、1番目のビットが「1」という意味だ。 最初、ビット表現すればわかりやすいと思った。 だが、慣れてくると、xの多項式で表現した方が、わかりやすい。 後になって、情報科学の人が、多項式表現するのも、納得したのだ。 |
このまま素直に、2進数の割り算を行なえば良いと思っていた。
だが、色々調べてみると以下のサイトにたどり着いた。
誤り検出方法 巡回符号(信州大学)
普通の2進数演算とは異なる
modulo2演算
を使うというのだ。
modulo2演算の特徴を知るため、信州大学の資料を見ていく事にした。
modulo2の論理演算回路(信州大学)
modulo2の加算 |
---|
排他的論理和が使われている。 1+1=0になるのだ。 |
桁上げが無視される。
modulo2では加算の際の桁上げは行なわない |
---|
加算の場合、桁上げは行なわない。 凄く違和感があるが、そういう方法なので慣れるしかない・・・。 |
そして逆元だが・・・
どんな物か忘れてしもた・・・
20世紀は理系だったが、21世紀になってからは理系でない私。
どんどん数学を忘れているのだ。
そこで調べてみる。
逆元とは |
---|
加算の場合。a+b=0の時、aの逆元はb=-aになる。 乗算の場合。a・b=1の時、aの逆元はb=1/aになる。 わかったような、わからんような書き方になったが 打ち消し合う要素の事を逆元という。 加算の場合、1の逆元は-1になる。1+(-1)=0で打ち消し合うから。 乗算の場合、3の逆元は1/3になる。3・(1/3)=1で打ち消し合うから |
modulo2の場合、以下のようになる。
modulo2での逆元 |
---|
0の逆元は0 1の逆元は(-1) |
打ち消し合う要素なので、納得できるし、驚かない。 乗算なのだが、論理積を使っている。
modulo2の乗算は論理積 |
---|
modulo2の乗算の場合、逆元だが以下のようになる。
modulo2の乗算の逆元 |
---|
これらの演算方法を頭にいれた上で、次のような演算を考えてみる。
というよりも
どこまで信州大学の資料の丸写ししているねん!!
というツッコミが来そうだ。
リンクを張って、丸写しを宣言しているのだから、盗作でも何でもないのだ。
modulo2を使ったビット演算 |
---|
情報科学では、ビットの並びを多項式表現するので上図のようになる。 多項式の方がすっきりした感じがする。 |
生成多項式で演算しているのを簡単に再現してみた。
CRC演算をやってみた |
---|
桁下げを考えなくても良いので、案外、手計算もしやすい。 |
ふと気づいた。 EthernetII(DIX)では使われなくなったLLC副層の役目だ。
LLC副層の役目 | |
---|---|
(1) | 論理アドレスの割り当て |
(2) | フレームの検査 |
CRC演算でフレームの検査を行なっていたのはLLC副層というわけだ。 だが、現在ではEthernetII(DIX)が行なっているのだ。
IEEE802.3のEthernetと、EthernetII(DIX)との比較 |
---|
IEEE802.3ではLLC副層が行なっていた事を EthernetII(DIX)では、それ自身が行なっているのだ。 |
データの誤り検出だが、物理層だけでなくデータリンク層でも行っている。
ARPプロトコル
ところでLAN同士の通信は、MACアドレスを使って行っている。
LAN内のパソコン同士はMACアドレスを使ってお互いを認識している |
---|
LAN内のパソコンは、お互いをMACアドレスで識別して通信をしている。 |
だが、ここで疑問が浮かぶ。 TCP/IP通信だと、相手のIPアドレスを知っていると通信ができる。 名前解決で、DNSサーバーを使えば、相手のホスト名などから 相手のIPアドレスがわかる。 だが、MACアドレスの場合、どうやって知る事ができるのか。 全く考えた事、あらへん!! なのだ。 LANについて、基本的な事を知らない上、疑問に思わなかったのが 見事に露呈してしまった。 でも、事務員なので、それで良いのだと勝手に開き直る。 さて、どうやって相手のMACアドレスを知るのかを調べてみる。 以下のサイトを発見。 基礎から学ぶWindowsネットワーク:第11回 MACアドレスを解決するARPプロトコル(@IT) たどり着いたのは・・・ ARPプロトコル なのだ。 仕組みは単純。
ARP要求を行う |
---|
あるパソコンが、通信したい相手のMACアドレスを知りたい場合 LAN上にある全パソコンなどに対して、arp要求を行う。 ARP要求とは、通信したいパソコンのIPアドレスを提示して そのIPを持つパソコンに対して応答を求める事なのだ。 |
実際、ARP要求の様子を、Wiresharkで見てみる。
ARP要求の様子を、Wiresharkで見てみる |
---|
WiresharkをインストールしているパソコンからARP要求をしている様子だ。 デルのパソコンである事がバレバレだ。 |
ARP要求のパケットはブロードキャストと呼ばれる物で、 同じLAN内のパソコンやルーターにパケットを撒き散らすのだ。 そのため送信先はブロードキャストになっている。
ARP要求の場合、送信先のMACアドレスはブロードキャスト |
---|
送信先のMACアドレスが「ff:ff:ff:ff:ff」になっている。 |
そしてMACフレームにはTYPEがある。
EthernetIIのMACフレームのTYPE部分とは |
---|
TYPEとは通信プロトコルの種類を示しているのだ。 |
ARP要求なのでTYPEは「0806」になるはず。
MACフレームのTYPEは「0806」 |
---|
ARP要求のパケットなので、TYPEは「0806」になっている。 |
そしてARP要求の場合、相手のIPアドレスに合致したMACアドレスを見つけるの目的だ。 そのためARP要求のパケットの中身は、知りたいパソコンやルーターなどの通信機器の IPアドレスを含ませているのだ。
ARP要求のパケットの中身 |
---|
senderは、ARP要求の送り手なので、自分自身になる。 自分自身のIPアドレスと、MACアドレスが記述されている。 Targetとは、相手の事を指す。 相手のIPアドレスが記述されている。 MACアドレスは、この段階ではわからないので「00:00:00:00:00」になっている。 (紫と茶色の塗りつぶしの部分について) 社内LANなのでプライベートIPを使っているのだが、社外に見せるわけにいかない。 そのため茶色と紫で塗りつぶしている。 「192.168」は、どこでも使っている部分なので「c0 a8」は見せている。 でも、その下の部分は隠しているのだ。 |
さて次に、ARP要求に対するARP応答は、該当のIPアドレスを持ったパソコンが応答を行う。
該当のIPアドレスを持ったパソコンが応答を行う |
---|
該当のIPアドレスを持ったパソコンが応答をする。 その際、MACアドレスを伝えるのだ。 |
実際に、Wiresharkで捕らえたパケットで見てみる。
ARP応答のパケット |
---|
相手から送られたARP応答なので、発信元は相手のパソコンや通信機器になる。 キャノン(ネットワークコピー機)から送られた応答なのだ。 |
そしてキャノンから送られたARP応答のパケットの送信先を見てみる。
ARP応答のパケットの送信先 |
---|
送信先は、ARP要求を行ったパソコンになる。 デルのパソコンなのがバレバレだ。 |
そして相手から送られてきたMACアドレス(応答)を見る事ができる。
相手から送られてきたMACアドレス(応答) |
---|
デルのパソコンからキャノンの複合機へARP要求をした際の応答だ。 ARP応答の送り手のキャノンの複合機のIPアドレスとMACアドレスが記述されている。 これによって、デルのパソコンは、キャノンの複合機のMACアドレスを知る事ができるのだ。 |
このような形で、LAN上にあるパソコンや通信機器のMACアドレスを収集しているのだ。
各パソコンや通信機器のMACアドレスを集めて記憶させると・・・
IPアドレスからMACアドレスへの変換表ができる
というのだ。
IPアドレスからMACアドレスへの変換表ができる |
---|
arp要求と応答を繰り返す事で、IPアドレスとMACアドレスの変換表ができるのだ。 これは、各パソコンがもっているのだ。(パソコンだけでなく、ルーターなども持っている) |
MACアドレス版の名前解決
という感じだ。
実際に、Windowsパソコンが取得したMACアドレスを表示させたい場合は
DOSプロンプトで以下のコマンドを打てば良いのだ。
ARPテーブルの確認(Windows7) |
---|
C:\>arp -a インターフェイス: 192.168.A.Z --- 0xb インターネット アドレス 物理アドレス 種類 192.168.A.B 00-0b-97-bf-cc-c2 動的 192.168.A.C ec-b1-d7-36-2c-8e 動的 192.168.A.D 00-0c-29-6a-7e-39 動的 192.168.A.E 98-ee-cb-30-f8-5c 動的 192.168.A.F 24-26-42-06-d8-a3 動的 C:\> |
パソコンが記憶しているMACアドレスの一覧を見るには arpコマンドに「-a」のオプションをつける。 |
Linuxだと以下のようになる。
ARPテーブルの確認(Linux) |
---|
[suga@linux]$ arp -a naochan.example.co.jp (192.168.A.K) at 48:0F:CF:82:2B:45 [ether] on eth0 minamizawa.example.co.jp (192.168.A.L) at 00:C0:29:9F:EE:62 [ether] on eth0 nagasawa.example.co.jp (192.168.A.M) at 01:0C:29:03:DE:4C [ether] on eth0 [suga@linux]$ |
パソコンが記憶しているMACアドレスの一覧を見るには Windows同様、arpコマンドに「-a」のオプションをつける。 |
単なる説明や、MACアドレス一覧表の表示だけでなく ARP要求とARP応答のパケットの中身を見る事で、実際の動きが見えるので わかりやすいのだ。
LAN入門:目次 | |
---|---|
ストレートケーブルとクロスケーブル | LANケーブルのストレートタイプとクロスタイプの違いを書きました。 |
リピーターハブとスイッチングハブ |
リピーターハブとスイッチングハブの違いと、全二重通信と半二重通信の話です。 10Base-T以降では、パケット衝突は、実は擬似衝突などを書いています。 |
社内LANの調査 | 2005年に、ブラックボックス化した社内LANを解明した話です。 |
オートネゴーシエーション |
10Base-T、100Base-TX、1000Base-Tなどが混在する環境で どうやって通信制御を行っているのか その仕組みを書きました。 |
LANケーブルの規格 CAT(カテゴリー) | LANケーブルの規格のCAT(カテゴリー)の違いを書きました。 |
データ送信とデジタル信号の符号化 |
LANケーブルを信号が伝わる際、どうやってデータ送信をしているのか。 デジタル信号の周波数を抑えながら、高速で信号送信する技術を書きました。 10Base-T、100Base-TX、1000Base-Tについて書きました。 |
データリンク層 |
LAN内のパソコンや通信機器同士の通信はMACアドレスが使われています。 それを司るデータリンク層について書きました。 |
表皮効果と近接作用 |
LANケーブル内で起こっている信号減衰の原因が 表皮効果と近接作用である事と LANケーブルの撚り線が、ノイズ対策なのを書きました。 |
ツイストペアとノイズ対策 |
LANケーブルがツイストペア(撚り線)なのはノイズ対策のためです。 その話を書きました。 |
差動回路とノイズ対策 |
LANケーブルは8本あり、データ通信は複線で行っています。 差動回路を使ったノイズ対策の話を書きました。 |
同軸ケーブルの仕組み |
昔のLANに使われていた同軸ケーブル。 現在でもテレビのアンテナに接続する線として使われたりしています。 同軸ケーブルの仕組みや特性インピーダンスの話を軽く触れました。 |
発振回路 |
クロック信号を作る発振回路の説明です。 簡単なLC型コルピッツ発振回路を使って説明しました。 |