狠狠撸

狠狠撸Share a Scribd company logo
なんで滨笔で通信できるの?
IPアドレス と MACアドレス と ARP
あと OSI参照モデル
1
Layer 2
Layer 2 は MACアドレス で通信する
2
Layer 2 は MACアドレス で通信する
A
B
C
L2SW
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
MACアドレスとは…
ネットワークに接続する機器を一意に識別するための情報。48ビットの数値で表現される。
NIC(Network Interface Card)に書き込まれているため、物理アドレス、ハードウェアアドレスともいう。
僕もMACアドレス持ってるけど、
ここではその話は割愛します…
Port 1 Port 3
Port 2
3
Layer 2 は MACアドレス で通信する
A
B
C
L2SW
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
Layer 2 で通信するときは…
通信相手へ届けたいデータに Layer 2 ヘッダ を付けて送信します。
Layer 2 ヘッダには、宛先MACアドレスと、送信元MACアドレスの情報が含まれています。
(Layer 2 では、ヘッダとデータを含む電気信号の塊を「フレーム」と呼びます。)
Aさん と通信したい!
データL2ヘッダPort 1 Port 3
Port 2
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
【Layer 2 ヘッダ】
送信元MAC addr : CC-CC-CC-CC-CC-CC
宛先MAC addr : AA-AA-AA-AA-AA-AA
4
Layer 2 は MACアドレス で通信する
A
B
C
L2SW
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
Layer 2 スイッチは、フレームの MACアドレス を見て①と?の処理をします
①フレームを受信したポートと送信元MACアドレスを関連付けて、MACアドレステーブルを作成します。
MACアドレステーブルは、特定のMACアドレスの機器が、どのポートの先にいるかを示す情報になります。
(?は次のページで!)
Port 1 Port 3
Port 2
【MAC addr テーブル】
CC-CC-CC-CC-CC-CC : Port 3
BB-BB-BB-BB-BB-BB : Port 2
Cさん からのフレームを Port 3 で受信したぞ。
Cさん は Port 3 の先にいるんだね。
MACアドレステーブルに書いとこう。
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
データL2ヘッダ
【Layer 2 ヘッダ】
送信元MAC addr : CC-CC-CC-CC-CC-CC
宛先MAC addr : AA-AA-AA-AA-AA-AA
5
【Layer 2 ヘッダ】
送信元MAC addr : CC-CC-CC-CC-CC-CC
宛先MAC addr : AA-AA-AA-AA-AA-AA
Layer 2 は MACアドレス で通信する
A
B
C
L2SW
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
Layer 2 スイッチは、フレームの MACアドレス を見て①と?の処理をします(つづき)
?宛先MACアドレスを見て、MACアドレステーブルを参照し、転送するポートを決定します。
MACアドレステーブルに載ってない宛先だったら、受信したポート以外の全てのポートに転送します。
Port 1 Port 3
Port 2
【MAC addr テーブル】
CC-CC-CC-CC-CC-CC : Port 3
BB-BB-BB-BB-BB-BB : Port 2
Aさん は MACアドレステーブル に
載ってないから、受信した Port 3 以外の
全部のポートに転送しよう。
データL2ヘッダ データL2ヘッダ
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
僕宛じゃない…
Cさん!
6
【Layer 2 ヘッダ】
送信元MAC addr : AA-AA-AA-AA-AA-AA
宛先MAC addr : CC-CC-CC-CC-CC-CC
Layer 2 は MACアドレス で通信する
A
B
C
L2SW
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
Layer 2 スイッチは、フレームの MACアドレス を見て①と?の処理をします(つづき)
以下も、①と?の処理です。
?の処理のとき、今度は 宛先MACアドレス が MACアドレステーブルに載っているので、
特定のポートにだけフレームを転送しています。
Port 1 Port 3
Port 2
【MAC addr テーブル】
AA-AA-AA-AA-AA-AA : Port 1
CC-CC-CC-CC-CC-CC : Port 3
BB-BB-BB-BB-BB-BB : Port 2
Cさん 宛のフレームだから、
Port 3 に転送すればいいね。
(?)
データ L2ヘッダ
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
Cさん に
返事するよ!
データ L2ヘッダ
Aさん は Port 1 にいるんだね。
MACアドレステーブルに書いとこう。
(①) Aさん と
通信できた~!
7
Layer 3
Layer 3 は IPアドレス で通信する
8
Layer 3 は IPアドレス で通信する
A
B
C
L2SW
【PC-C】
IP addr :10.0.0.3/24
【PC-A】
IP addr :10.0.0.1/24
【PC-B】
IP addr :10.0.0.2/24
IPアドレスとは…
TCP/IPのネットワークで使用される機器を識別するための情報。32ビットで表現される。
僕は Layer 2 スイッチ なので
IPアドレスのことはよく分かりません…
Port 1 Port 3
Port 2
9
Layer 3 は IPアドレス で通信する
A
B
C
L2SW
【PC-C】
IP addr :10.0.0.3/24
【PC-A】
IP addr :10.0.0.1/24
Layer 3 で通信するときは…
通信相手へ届けたいデータに Layer 3 ヘッダ を付けて送信します。
Layer 3 ヘッダには、宛先IPアドレスと、送信元IPアドレスの情報が含まれています。
(Layer 3 では、ヘッダとデータを含む電気信号の塊を「パケット」と呼びます。)
Aさん と通信したい!
データL3ヘッダPort 1 Port 3
Port 2
【PC-B】
IP addr :10.0.0.2/24
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.0.0.1
…
10
Layer 3 は IPアドレス で通信する
A
B
C
L2SW
【PC-C】
IP addr :10.0.0.3/24
【PC-A】
IP addr :10.0.0.1/24
Layer 2 スイッチは、IPアドレスのことはよくわかりません
でも、PCはお互いにIPアドレスが分かっているので、PC同士は通信できました。
めでたしめでたし!
Port 1 Port 3
Port 2
データL3ヘッダ
【PC-B】
IP addr :10.0.0.2/24
Cさん!
データL3ヘッダ
…
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.0.0.1
11
L2SW
ちょっと待ってよ…
12
Layer 3 は IPアドレス で通信する
A
B
C
L2SW
【PC-C】
IP addr :10.0.0.3/24
【PC-A】
IP addr :10.0.0.1/24
Layer 2 スイッチは、MACアドレス しか理解できません
間に挟まっている以上は、Layer 2 スイッチ でも電気信号を処理する必要があります。
Layer 2 スイッチ が転送処理するには、宛先と送信元の MACアドレス の情報が必要です。
でも、Pingを実行したりするときも、IPアドレス のことしか考えたことないですよね…?
Port 1 Port 3
Port 2
【PC-B】
IP addr :10.0.0.2/24
データL3ヘッダ
僕が間に挟まっているんだから、
僕に分かるように MACアドレス で
通信してもらう必要があるよ!
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.0.0.1
?
??
え…だって、PC-Aの
IPアドレスしか
知らないよ?
13
ARP
Address Resolution Protocol
14
ARPで解決
A
B
C
L2SW
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.0.0.1/24
通信するときは…
通信相手の IPアドレス だけでなく、MACアドレス も知っている必要があります。
Layer 3 の処理をする機器は、IPアドレス と MACアドレス を関連付ける ARPテーブル を持っています。
(ARP…Address Resolution Protocol:アドレス解決プロトコル)
Port 1 Port 3
Port 2
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
IP addr :10.0.0.2/24
【ARPテーブル】
10.0.0.2 : BB-BB-BB-BB-BB-BB
【ARPテーブル】
10.0.0.3 : CC-CC-CC-CC-CC-CC
【ARPテーブル】
15
ARPで解決
A
B
C
L2SW
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.0.0.1/24
通信相手の MACアドレス を知らないときは…
①特定の IPアドレス に対応する MACアドレス を問合せる ARP要求 をブロードキャストします。
(Layer 2 ヘッダの宛先MACアドレスは、ブロードキャストアドレスの FF-FF-FF-FF-FF-FF です。)
Port 1 Port 3
Port 2
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
IP addr :10.0.0.2/24
【ARPテーブル】
10.0.0.2 : BB-BB-BB-BB-BB-BB
【ARPテーブル】
Aさん のことは
IPアドレス しか知らないから、
MACアドレス を教えて!
ブロードキャストは
全ポート転送~
(受信ポート以外)
Cさん が僕の MACアドレス を
知りたがってる!
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
僕じゃない…
ARP要求L2ヘッダARP要求L2ヘッダ ARP要求L2ヘッダ
【ARP要求】
送信元 IP addr : 10.0.0.3
送信元MAC addr : CC-CC-CC-CC-CC-CC
宛先 IP addr : 10.0.0.1
宛先MAC addr : FF-FF-FF-FF-FF-FF
16
ARPで解決
A
B
C
L2SW
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.0.0.1/24
通信相手の MACアドレス を知らないときは…(つづき)
?該当の IPアドレス を持つ機器は、自分の MACアドレス を回答する ARP応答 を返信します。
ARP要求 と ARP応答 をやりとりした機器は、お互いの情報を自分の ARPテーブル に載せます。
これ以降は、4ページ目のような通信ができるようになります。
Port 1 Port 3
Port 2
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
IP addr :10.0.0.2/24
【ARPテーブル】
10.0.0.2 : BB-BB-BB-BB-BB-BB
10.0.0.1 : AA-AA-AA-AA-AA-AA
【ARPテーブル】
10.0.0.3 : CC-CC-CC-CC-CC-CC
宛先MACアドレス
見て転送~
僕の MACアドレス を答えるよ!
Cさんの IPアドレス と MACアドレス も
覚えておくね!※
Aさん がMACアドレス
教えてくれた!
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
※前頁の①ARP要求の中には、問合せ元の IPアドレス と MACアドレス の情報も含まれているため、
ARP要求を受信した機器も、相手の IPアドレス と MACアドレス の情報を入手できています。
ARP応答 L2ヘッダ ARP応答 L2ヘッダ
【ARP応答】
送信元 IP addr : 10.0.0.1
送信元MAC addr : AA-AA-AA-AA-AA-AA
宛先 IP addr : 10.0.0.3
宛先MAC addr : CC-CC-CC-CC-CC-CC
17
ARPで解決
A
B
C
L2SW
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.0.0.1/24
じゃあ、Layer 3 ヘッダはどこへ…?
結局 MACアドレス で通信するんだったら、
宛先IPアドレス と 送信元IPアドレス が入ってる Layer 3 ヘッダ は
どこへ行ってしまうんでしょうか…?
Port 1 Port 3
Port 2
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
IP addr :10.0.0.2/24
データL3ヘッダ
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.0.0.1
IPアドレスって
なんなの…?
僕にはよく分かりません…
18
OSI参照モデル
通信機能の階層構造
19
OSI参照モデルの階層構造
A
B
C
L2SW
Layer 3 ヘッダ は Layer 2 ヘッダ で包まれる
Layer 3 ヘッダ は、Layer 2 フレーム のデータ部分の中にあります。
Port 1 Port 3
Port 2
データL2ヘッダ
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.0.0.1
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.0.0.1/24
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
IP addr :10.0.0.2/24
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
【Layer 2 ヘッダ】
送信元MAC addr : CC-CC-CC-CC-CC-CC
宛先MAC addr : AA-AA-AA-AA-AA-AA
データL3ヘッダ
20
OSI参照モデルの階層構造
A
B
C
L2SW
Layer 2 スイッチ は Layer 2 ヘッダ のみ参照して転送します
Layer 2 スイッチ は、基本的にフレームを転送するのが仕事です。
Layer 2 ヘッダ の 宛先MACアドレス と 送信元MACアドレス を見てフレームを転送するだけなので、
データ部分の中にある Layer 3 ヘッダ は処理しません。
Port 1 Port 3
Port 2
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.0.0.1
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.0.0.1/24
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
IP addr :10.0.0.2/24
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
【Layer 2 ヘッダ】
送信元MAC addr : CC-CC-CC-CC-CC-CC
宛先MAC addr : AA-AA-AA-AA-AA-AA
データL3ヘッダ
データL2ヘッダ
宛先MACアドレス
見て転送~
21
OSI参照モデルの階層構造
A
B
C
L2SW
Layer 3 の機器 は Layer 2 ヘッダ と Layer 3 ヘッダを処理します
Layer 3 に対応する機器は、Layer 2 ヘッダ と Layer 3 ヘッダ の両方を処理します。
Layer 2 ヘッダ の 宛先MACアドレス が自分のMACアドレスだったときは、自分宛のフレームとして、
Layer 2 ヘッダ を外して、データ部分の中にある Layer 3 ヘッダ を処理します。
Port 1 Port 3
Port 2
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.0.0.1
【PC-B】
MAC addr : BB-BB-BB-BB-BB-BB
IP addr :10.0.0.2/24
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
【Layer 2 ヘッダ】
送信元MAC addr : CC-CC-CC-CC-CC-CC
宛先MAC addr : AA-AA-AA-AA-AA-AA
データL3ヘッダ
データL2ヘッダ
あ、
MACアドレスが
僕宛だ
あ、
IPアドレスも
僕宛だ
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.0.0.1/24
なんだか
二度手間みたい…
22
OSI参照モデルの階層構造
A C
もし Layer 2 スイッチ がいなくても…
Layer 3 に対応する機器は、同様に Layer 2 ヘッダ と Layer 3 ヘッダ の両方を処理します。
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.0.0.1
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
【Layer 2 ヘッダ】
送信元MAC addr : CC-CC-CC-CC-CC-CC
宛先MAC addr : AA-AA-AA-AA-AA-AA
データL3ヘッダ
データL2ヘッダ
あ、
MACアドレスが
僕宛だ
あ、
IPアドレスも
僕宛だ
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.0.0.1/24
Layer 2 スイッチ がいなくても、
Layer 2 ヘッダ が必要なの…?
データL2ヘッダ
23
10.0.0.0/2410.1.1.0/24
OSI参照モデルの階層構造
A’
B
C
L2SW
IPアドレス はネットワークを超えられる MACアドレス はネットワークを超えられない
MACアドレス で通信できるのは、同じ ネットワークアドレス の中だけです。
別な ネットワークアドレス にいる機器と通信するには、IPアドレス を使う必要があります。
別な ネットワーク にパケットを転送するには、Layer 3 の機器である ルータ が必要です。
Port 3
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
Default Gateway : 10.0.0.254/24
【PC-A‘】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.1.1.1/24
Default Gateway : 10.1.1.254/24
そういえば、今までは
全部同じネットワークアドレスの
機器だけだったな…
Port 1
Router IP:10.0.0.254/24
MAC:DD-DD-DD-DD-DD-DD
IP:10.1.1.254/24
MAC:EE-EE-EE-EE-EE-EE
24
Layer 2
MACアドレスで通信できる範囲
Layer 2
MACアドレスで通信できる範囲
Layer 3
IPアドレスで通信できる範囲
10.0.0.0/2410.1.1.0/24
OSI参照モデルの階層構造
A’
B
C
L2SW
別な ネットワーク の通信相手と通信するときは…
①まず、同じ ネットワークアドレス にいる ルータ にデータを渡して、ルーティングしてもらう必要があります。
届けたいデータに、通信相手の IPアドレス を宛先にした Layer 3 ヘッダ を付けたら、
さらに、ルータ の MACアドレス を宛先にした Layer 2 ヘッダを付けて送信します。
Port 3
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
Default Gateway : 10.0.0.254/24
【PC-A’】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.1.1.1/24
Default Gateway : 10.1.1.254/24
Port 1
Router
データL2ヘッダ
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.1.1.1
【Layer 2 ヘッダ】
送信元MAC addr : CC-CC-CC-CC-CC-CC
宛先MAC addr : DD-DD-DD-DD-DD-DD
データL3ヘッダ
IP:10.0.0.254/24
MAC:DD-DD-DD-DD-DD-DD
IP:10.1.1.254/24
MAC:EE-EE-EE-EE-EE-EE
A’さん は違うNW
だから、ゲートウェイに
投げなきゃ
25
【ARPテーブル】
10.0.0.254 : DD-DD-DD-DD-DD-DD
あ、Layer 2 ヘッダの宛先はルータだけど、
Layer 3 ヘッダの宛先はA’さんだ!
10.0.0.0/2410.1.1.0/24
OSI参照モデルの階層構造
A’
B
C
L2SW
別な ネットワーク の通信相手と通信するときは…(つづき)
?ルータは、Layer 2 ヘッダ の 宛先MACアドレス が自分の MACアドレス なので、
自分宛のフレームとして、Layer 2 ヘッダ を外して、Layer 3 ヘッダ を見ます。
Layer 3 ヘッダ の 宛先IPアドレス が自分の IPアドレス 以外なら、宛先へルーティングします。
Port 3
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
Default Gateway : 10.0.0.254/24
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.1.1.1/24
Default Gateway : 10.1.1.254/24
おっ、ルータ では
二度手間じゃない感じ!
Port 1
Router
データL2ヘッダ
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.1.1.1
【Layer 2 ヘッダ】
送信元MAC addr : CC-CC-CC-CC-CC-CC
宛先MAC addr : DD-DD-DD-DD-DD-DD
データL3ヘッダ
IP:10.0.0.254/24
MAC:DD-DD-DD-DD-DD-DD
IP:10.1.1.254/24
MAC:EE-EE-EE-EE-EE-EE
あ、
MACアドレスが
僕宛だ
でも
IPアドレスは
僕宛じゃない!
26
10.0.0.0/2410.1.1.0/24
OSI参照モデルの階層構造
A’
B
C
L2SW
別な ネットワーク の通信相手と通信するときは…(つづき)
?ルータ も 宛先IPアドレス に向けて、ARP解決などの処理をしながら、パケット(フレーム)を転送します。
このとき、Layer 2 ヘッダ については改めて作り直し、データに付けて送信します。
Port 3
【PC-C】
MAC addr : CC-CC-CC-CC-CC-CC
IP addr :10.0.0.3/24
Default Gateway : 10.0.0.254/24
【Layer 2 ヘッダ】
送信元MAC addr : EE-EE-EE-EE-EE-EE
宛先MAC addr : AA-AA-AA-AA-AA-AA
データL2ヘッダ Port 1
Router IP:10.0.0.254/24
MAC:DD-DD-DD-DD-DD-DD
IP:10.1.1.254/24
MAC:EE-EE-EE-EE-EE-EE
IPアドレスは
Aさん 宛だから
転送するよ!
【Layer 3 ヘッダ】
送信元IP addr : 10.0.0.3
宛先IP addr : 10.1.1.1
データL3ヘッダ
【ARPテーブル】
10.1.1.1 : AA-AA-AA-AA-AA-AA
27
あ、Layer 2 ヘッダの宛先と送信元が
さっきまでと違う!
でも、Layer 3 ヘッダの宛先と送信元は
ずっと変わってない!
あ、
MACアドレスが
僕宛だ
あ、
IPアドレスも
僕宛だ
【PC-A】
MAC addr : AA-AA-AA-AA-AA-AA
IP addr :10.1.1.1/24
Default Gateway : 10.1.1.254/24
MACアドレス と IPアドレス の両方を使って、
別なネットワークまで通信できるんだね!
OSI参照モデルの階層構造
A’ C
L2SW
OSI参照モデルは、標準化されたネットワーク通信機能の階層構造
ネットワーク通信に関わる色々な機能を階層別に分類し、それぞれの機能の独立性を高めています。
それぞれの機器が、Layer 1 (電気信号)から自分の対応する Layer までの処理をします。
Router
28
L2SW
Layer 5
Layer 4
Layer 7
Layer 6
Layer 1
Layer 3
Layer 2
Layer 1
Layer 3
Layer 2
Layer 1
Layer 2
Layer 5
Layer 4
Layer 7
Layer 6
Layer 1
Layer 3
Layer 2
アプリケーション層まで! ネットワーク層まで!
データリンク層まで!
アプリケーション層まで!
アプリケーション層
プレゼンテーション層
セション層
トランスポート層
ネットワーク層
データリンク層
物理層
OSI参照モデルの階層構造
A C
L2SW
対応する各Layerについて、既定の処理をします
自分と接続されている機器が、どの Layer まで対応する機器だったとしても
接続相手によって処理を変える必要はありません。
Router
29
L2SW
接続相手が誰だろうが、自分は
同じように各Layerの処理をすればいいんだね~
Layer 5
Layer 4
Layer 7
Layer 6
Layer 1
Layer 3
Layer 2
データL2ヘッダ
ご参考まで!
OSI参照モデルについては
もう少し勉強してみてください…
30

More Related Content

なんで滨笔で通信できるの?

  • 2. Layer 2 Layer 2 は MACアドレス で通信する 2
  • 3. Layer 2 は MACアドレス で通信する A B C L2SW 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB MACアドレスとは… ネットワークに接続する機器を一意に識別するための情報。48ビットの数値で表現される。 NIC(Network Interface Card)に書き込まれているため、物理アドレス、ハードウェアアドレスともいう。 僕もMACアドレス持ってるけど、 ここではその話は割愛します… Port 1 Port 3 Port 2 3
  • 4. Layer 2 は MACアドレス で通信する A B C L2SW 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA Layer 2 で通信するときは… 通信相手へ届けたいデータに Layer 2 ヘッダ を付けて送信します。 Layer 2 ヘッダには、宛先MACアドレスと、送信元MACアドレスの情報が含まれています。 (Layer 2 では、ヘッダとデータを含む電気信号の塊を「フレーム」と呼びます。) Aさん と通信したい! データL2ヘッダPort 1 Port 3 Port 2 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB 【Layer 2 ヘッダ】 送信元MAC addr : CC-CC-CC-CC-CC-CC 宛先MAC addr : AA-AA-AA-AA-AA-AA 4
  • 5. Layer 2 は MACアドレス で通信する A B C L2SW 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA Layer 2 スイッチは、フレームの MACアドレス を見て①と?の処理をします ①フレームを受信したポートと送信元MACアドレスを関連付けて、MACアドレステーブルを作成します。 MACアドレステーブルは、特定のMACアドレスの機器が、どのポートの先にいるかを示す情報になります。 (?は次のページで!) Port 1 Port 3 Port 2 【MAC addr テーブル】 CC-CC-CC-CC-CC-CC : Port 3 BB-BB-BB-BB-BB-BB : Port 2 Cさん からのフレームを Port 3 で受信したぞ。 Cさん は Port 3 の先にいるんだね。 MACアドレステーブルに書いとこう。 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB データL2ヘッダ 【Layer 2 ヘッダ】 送信元MAC addr : CC-CC-CC-CC-CC-CC 宛先MAC addr : AA-AA-AA-AA-AA-AA 5
  • 6. 【Layer 2 ヘッダ】 送信元MAC addr : CC-CC-CC-CC-CC-CC 宛先MAC addr : AA-AA-AA-AA-AA-AA Layer 2 は MACアドレス で通信する A B C L2SW 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA Layer 2 スイッチは、フレームの MACアドレス を見て①と?の処理をします(つづき) ?宛先MACアドレスを見て、MACアドレステーブルを参照し、転送するポートを決定します。 MACアドレステーブルに載ってない宛先だったら、受信したポート以外の全てのポートに転送します。 Port 1 Port 3 Port 2 【MAC addr テーブル】 CC-CC-CC-CC-CC-CC : Port 3 BB-BB-BB-BB-BB-BB : Port 2 Aさん は MACアドレステーブル に 載ってないから、受信した Port 3 以外の 全部のポートに転送しよう。 データL2ヘッダ データL2ヘッダ 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB 僕宛じゃない… Cさん! 6
  • 7. 【Layer 2 ヘッダ】 送信元MAC addr : AA-AA-AA-AA-AA-AA 宛先MAC addr : CC-CC-CC-CC-CC-CC Layer 2 は MACアドレス で通信する A B C L2SW 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA Layer 2 スイッチは、フレームの MACアドレス を見て①と?の処理をします(つづき) 以下も、①と?の処理です。 ?の処理のとき、今度は 宛先MACアドレス が MACアドレステーブルに載っているので、 特定のポートにだけフレームを転送しています。 Port 1 Port 3 Port 2 【MAC addr テーブル】 AA-AA-AA-AA-AA-AA : Port 1 CC-CC-CC-CC-CC-CC : Port 3 BB-BB-BB-BB-BB-BB : Port 2 Cさん 宛のフレームだから、 Port 3 に転送すればいいね。 (?) データ L2ヘッダ 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB Cさん に 返事するよ! データ L2ヘッダ Aさん は Port 1 にいるんだね。 MACアドレステーブルに書いとこう。 (①) Aさん と 通信できた~! 7
  • 8. Layer 3 Layer 3 は IPアドレス で通信する 8
  • 9. Layer 3 は IPアドレス で通信する A B C L2SW 【PC-C】 IP addr :10.0.0.3/24 【PC-A】 IP addr :10.0.0.1/24 【PC-B】 IP addr :10.0.0.2/24 IPアドレスとは… TCP/IPのネットワークで使用される機器を識別するための情報。32ビットで表現される。 僕は Layer 2 スイッチ なので IPアドレスのことはよく分かりません… Port 1 Port 3 Port 2 9
  • 10. Layer 3 は IPアドレス で通信する A B C L2SW 【PC-C】 IP addr :10.0.0.3/24 【PC-A】 IP addr :10.0.0.1/24 Layer 3 で通信するときは… 通信相手へ届けたいデータに Layer 3 ヘッダ を付けて送信します。 Layer 3 ヘッダには、宛先IPアドレスと、送信元IPアドレスの情報が含まれています。 (Layer 3 では、ヘッダとデータを含む電気信号の塊を「パケット」と呼びます。) Aさん と通信したい! データL3ヘッダPort 1 Port 3 Port 2 【PC-B】 IP addr :10.0.0.2/24 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.0.0.1 … 10
  • 11. Layer 3 は IPアドレス で通信する A B C L2SW 【PC-C】 IP addr :10.0.0.3/24 【PC-A】 IP addr :10.0.0.1/24 Layer 2 スイッチは、IPアドレスのことはよくわかりません でも、PCはお互いにIPアドレスが分かっているので、PC同士は通信できました。 めでたしめでたし! Port 1 Port 3 Port 2 データL3ヘッダ 【PC-B】 IP addr :10.0.0.2/24 Cさん! データL3ヘッダ … 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.0.0.1 11
  • 13. Layer 3 は IPアドレス で通信する A B C L2SW 【PC-C】 IP addr :10.0.0.3/24 【PC-A】 IP addr :10.0.0.1/24 Layer 2 スイッチは、MACアドレス しか理解できません 間に挟まっている以上は、Layer 2 スイッチ でも電気信号を処理する必要があります。 Layer 2 スイッチ が転送処理するには、宛先と送信元の MACアドレス の情報が必要です。 でも、Pingを実行したりするときも、IPアドレス のことしか考えたことないですよね…? Port 1 Port 3 Port 2 【PC-B】 IP addr :10.0.0.2/24 データL3ヘッダ 僕が間に挟まっているんだから、 僕に分かるように MACアドレス で 通信してもらう必要があるよ! 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.0.0.1 ? ?? え…だって、PC-Aの IPアドレスしか 知らないよ? 13
  • 15. ARPで解決 A B C L2SW 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.0.0.1/24 通信するときは… 通信相手の IPアドレス だけでなく、MACアドレス も知っている必要があります。 Layer 3 の処理をする機器は、IPアドレス と MACアドレス を関連付ける ARPテーブル を持っています。 (ARP…Address Resolution Protocol:アドレス解決プロトコル) Port 1 Port 3 Port 2 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB IP addr :10.0.0.2/24 【ARPテーブル】 10.0.0.2 : BB-BB-BB-BB-BB-BB 【ARPテーブル】 10.0.0.3 : CC-CC-CC-CC-CC-CC 【ARPテーブル】 15
  • 16. ARPで解決 A B C L2SW 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.0.0.1/24 通信相手の MACアドレス を知らないときは… ①特定の IPアドレス に対応する MACアドレス を問合せる ARP要求 をブロードキャストします。 (Layer 2 ヘッダの宛先MACアドレスは、ブロードキャストアドレスの FF-FF-FF-FF-FF-FF です。) Port 1 Port 3 Port 2 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB IP addr :10.0.0.2/24 【ARPテーブル】 10.0.0.2 : BB-BB-BB-BB-BB-BB 【ARPテーブル】 Aさん のことは IPアドレス しか知らないから、 MACアドレス を教えて! ブロードキャストは 全ポート転送~ (受信ポート以外) Cさん が僕の MACアドレス を 知りたがってる! 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 僕じゃない… ARP要求L2ヘッダARP要求L2ヘッダ ARP要求L2ヘッダ 【ARP要求】 送信元 IP addr : 10.0.0.3 送信元MAC addr : CC-CC-CC-CC-CC-CC 宛先 IP addr : 10.0.0.1 宛先MAC addr : FF-FF-FF-FF-FF-FF 16
  • 17. ARPで解決 A B C L2SW 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.0.0.1/24 通信相手の MACアドレス を知らないときは…(つづき) ?該当の IPアドレス を持つ機器は、自分の MACアドレス を回答する ARP応答 を返信します。 ARP要求 と ARP応答 をやりとりした機器は、お互いの情報を自分の ARPテーブル に載せます。 これ以降は、4ページ目のような通信ができるようになります。 Port 1 Port 3 Port 2 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB IP addr :10.0.0.2/24 【ARPテーブル】 10.0.0.2 : BB-BB-BB-BB-BB-BB 10.0.0.1 : AA-AA-AA-AA-AA-AA 【ARPテーブル】 10.0.0.3 : CC-CC-CC-CC-CC-CC 宛先MACアドレス 見て転送~ 僕の MACアドレス を答えるよ! Cさんの IPアドレス と MACアドレス も 覚えておくね!※ Aさん がMACアドレス 教えてくれた! 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 ※前頁の①ARP要求の中には、問合せ元の IPアドレス と MACアドレス の情報も含まれているため、 ARP要求を受信した機器も、相手の IPアドレス と MACアドレス の情報を入手できています。 ARP応答 L2ヘッダ ARP応答 L2ヘッダ 【ARP応答】 送信元 IP addr : 10.0.0.1 送信元MAC addr : AA-AA-AA-AA-AA-AA 宛先 IP addr : 10.0.0.3 宛先MAC addr : CC-CC-CC-CC-CC-CC 17
  • 18. ARPで解決 A B C L2SW 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.0.0.1/24 じゃあ、Layer 3 ヘッダはどこへ…? 結局 MACアドレス で通信するんだったら、 宛先IPアドレス と 送信元IPアドレス が入ってる Layer 3 ヘッダ は どこへ行ってしまうんでしょうか…? Port 1 Port 3 Port 2 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB IP addr :10.0.0.2/24 データL3ヘッダ 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.0.0.1 IPアドレスって なんなの…? 僕にはよく分かりません… 18
  • 20. OSI参照モデルの階層構造 A B C L2SW Layer 3 ヘッダ は Layer 2 ヘッダ で包まれる Layer 3 ヘッダ は、Layer 2 フレーム のデータ部分の中にあります。 Port 1 Port 3 Port 2 データL2ヘッダ 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.0.0.1 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.0.0.1/24 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB IP addr :10.0.0.2/24 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 【Layer 2 ヘッダ】 送信元MAC addr : CC-CC-CC-CC-CC-CC 宛先MAC addr : AA-AA-AA-AA-AA-AA データL3ヘッダ 20
  • 21. OSI参照モデルの階層構造 A B C L2SW Layer 2 スイッチ は Layer 2 ヘッダ のみ参照して転送します Layer 2 スイッチ は、基本的にフレームを転送するのが仕事です。 Layer 2 ヘッダ の 宛先MACアドレス と 送信元MACアドレス を見てフレームを転送するだけなので、 データ部分の中にある Layer 3 ヘッダ は処理しません。 Port 1 Port 3 Port 2 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.0.0.1 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.0.0.1/24 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB IP addr :10.0.0.2/24 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 【Layer 2 ヘッダ】 送信元MAC addr : CC-CC-CC-CC-CC-CC 宛先MAC addr : AA-AA-AA-AA-AA-AA データL3ヘッダ データL2ヘッダ 宛先MACアドレス 見て転送~ 21
  • 22. OSI参照モデルの階層構造 A B C L2SW Layer 3 の機器 は Layer 2 ヘッダ と Layer 3 ヘッダを処理します Layer 3 に対応する機器は、Layer 2 ヘッダ と Layer 3 ヘッダ の両方を処理します。 Layer 2 ヘッダ の 宛先MACアドレス が自分のMACアドレスだったときは、自分宛のフレームとして、 Layer 2 ヘッダ を外して、データ部分の中にある Layer 3 ヘッダ を処理します。 Port 1 Port 3 Port 2 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.0.0.1 【PC-B】 MAC addr : BB-BB-BB-BB-BB-BB IP addr :10.0.0.2/24 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 【Layer 2 ヘッダ】 送信元MAC addr : CC-CC-CC-CC-CC-CC 宛先MAC addr : AA-AA-AA-AA-AA-AA データL3ヘッダ データL2ヘッダ あ、 MACアドレスが 僕宛だ あ、 IPアドレスも 僕宛だ 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.0.0.1/24 なんだか 二度手間みたい… 22
  • 23. OSI参照モデルの階層構造 A C もし Layer 2 スイッチ がいなくても… Layer 3 に対応する機器は、同様に Layer 2 ヘッダ と Layer 3 ヘッダ の両方を処理します。 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.0.0.1 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 【Layer 2 ヘッダ】 送信元MAC addr : CC-CC-CC-CC-CC-CC 宛先MAC addr : AA-AA-AA-AA-AA-AA データL3ヘッダ データL2ヘッダ あ、 MACアドレスが 僕宛だ あ、 IPアドレスも 僕宛だ 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.0.0.1/24 Layer 2 スイッチ がいなくても、 Layer 2 ヘッダ が必要なの…? データL2ヘッダ 23
  • 24. 10.0.0.0/2410.1.1.0/24 OSI参照モデルの階層構造 A’ B C L2SW IPアドレス はネットワークを超えられる MACアドレス はネットワークを超えられない MACアドレス で通信できるのは、同じ ネットワークアドレス の中だけです。 別な ネットワークアドレス にいる機器と通信するには、IPアドレス を使う必要があります。 別な ネットワーク にパケットを転送するには、Layer 3 の機器である ルータ が必要です。 Port 3 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 Default Gateway : 10.0.0.254/24 【PC-A‘】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.1.1.1/24 Default Gateway : 10.1.1.254/24 そういえば、今までは 全部同じネットワークアドレスの 機器だけだったな… Port 1 Router IP:10.0.0.254/24 MAC:DD-DD-DD-DD-DD-DD IP:10.1.1.254/24 MAC:EE-EE-EE-EE-EE-EE 24 Layer 2 MACアドレスで通信できる範囲 Layer 2 MACアドレスで通信できる範囲 Layer 3 IPアドレスで通信できる範囲
  • 25. 10.0.0.0/2410.1.1.0/24 OSI参照モデルの階層構造 A’ B C L2SW 別な ネットワーク の通信相手と通信するときは… ①まず、同じ ネットワークアドレス にいる ルータ にデータを渡して、ルーティングしてもらう必要があります。 届けたいデータに、通信相手の IPアドレス を宛先にした Layer 3 ヘッダ を付けたら、 さらに、ルータ の MACアドレス を宛先にした Layer 2 ヘッダを付けて送信します。 Port 3 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 Default Gateway : 10.0.0.254/24 【PC-A’】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.1.1.1/24 Default Gateway : 10.1.1.254/24 Port 1 Router データL2ヘッダ 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.1.1.1 【Layer 2 ヘッダ】 送信元MAC addr : CC-CC-CC-CC-CC-CC 宛先MAC addr : DD-DD-DD-DD-DD-DD データL3ヘッダ IP:10.0.0.254/24 MAC:DD-DD-DD-DD-DD-DD IP:10.1.1.254/24 MAC:EE-EE-EE-EE-EE-EE A’さん は違うNW だから、ゲートウェイに 投げなきゃ 25 【ARPテーブル】 10.0.0.254 : DD-DD-DD-DD-DD-DD あ、Layer 2 ヘッダの宛先はルータだけど、 Layer 3 ヘッダの宛先はA’さんだ!
  • 26. 10.0.0.0/2410.1.1.0/24 OSI参照モデルの階層構造 A’ B C L2SW 別な ネットワーク の通信相手と通信するときは…(つづき) ?ルータは、Layer 2 ヘッダ の 宛先MACアドレス が自分の MACアドレス なので、 自分宛のフレームとして、Layer 2 ヘッダ を外して、Layer 3 ヘッダ を見ます。 Layer 3 ヘッダ の 宛先IPアドレス が自分の IPアドレス 以外なら、宛先へルーティングします。 Port 3 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 Default Gateway : 10.0.0.254/24 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.1.1.1/24 Default Gateway : 10.1.1.254/24 おっ、ルータ では 二度手間じゃない感じ! Port 1 Router データL2ヘッダ 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.1.1.1 【Layer 2 ヘッダ】 送信元MAC addr : CC-CC-CC-CC-CC-CC 宛先MAC addr : DD-DD-DD-DD-DD-DD データL3ヘッダ IP:10.0.0.254/24 MAC:DD-DD-DD-DD-DD-DD IP:10.1.1.254/24 MAC:EE-EE-EE-EE-EE-EE あ、 MACアドレスが 僕宛だ でも IPアドレスは 僕宛じゃない! 26
  • 27. 10.0.0.0/2410.1.1.0/24 OSI参照モデルの階層構造 A’ B C L2SW 別な ネットワーク の通信相手と通信するときは…(つづき) ?ルータ も 宛先IPアドレス に向けて、ARP解決などの処理をしながら、パケット(フレーム)を転送します。 このとき、Layer 2 ヘッダ については改めて作り直し、データに付けて送信します。 Port 3 【PC-C】 MAC addr : CC-CC-CC-CC-CC-CC IP addr :10.0.0.3/24 Default Gateway : 10.0.0.254/24 【Layer 2 ヘッダ】 送信元MAC addr : EE-EE-EE-EE-EE-EE 宛先MAC addr : AA-AA-AA-AA-AA-AA データL2ヘッダ Port 1 Router IP:10.0.0.254/24 MAC:DD-DD-DD-DD-DD-DD IP:10.1.1.254/24 MAC:EE-EE-EE-EE-EE-EE IPアドレスは Aさん 宛だから 転送するよ! 【Layer 3 ヘッダ】 送信元IP addr : 10.0.0.3 宛先IP addr : 10.1.1.1 データL3ヘッダ 【ARPテーブル】 10.1.1.1 : AA-AA-AA-AA-AA-AA 27 あ、Layer 2 ヘッダの宛先と送信元が さっきまでと違う! でも、Layer 3 ヘッダの宛先と送信元は ずっと変わってない! あ、 MACアドレスが 僕宛だ あ、 IPアドレスも 僕宛だ 【PC-A】 MAC addr : AA-AA-AA-AA-AA-AA IP addr :10.1.1.1/24 Default Gateway : 10.1.1.254/24 MACアドレス と IPアドレス の両方を使って、 別なネットワークまで通信できるんだね!
  • 28. OSI参照モデルの階層構造 A’ C L2SW OSI参照モデルは、標準化されたネットワーク通信機能の階層構造 ネットワーク通信に関わる色々な機能を階層別に分類し、それぞれの機能の独立性を高めています。 それぞれの機器が、Layer 1 (電気信号)から自分の対応する Layer までの処理をします。 Router 28 L2SW Layer 5 Layer 4 Layer 7 Layer 6 Layer 1 Layer 3 Layer 2 Layer 1 Layer 3 Layer 2 Layer 1 Layer 2 Layer 5 Layer 4 Layer 7 Layer 6 Layer 1 Layer 3 Layer 2 アプリケーション層まで! ネットワーク層まで! データリンク層まで! アプリケーション層まで! アプリケーション層 プレゼンテーション層 セション層 トランスポート層 ネットワーク層 データリンク層 物理層
  • 29. OSI参照モデルの階層構造 A C L2SW 対応する各Layerについて、既定の処理をします 自分と接続されている機器が、どの Layer まで対応する機器だったとしても 接続相手によって処理を変える必要はありません。 Router 29 L2SW 接続相手が誰だろうが、自分は 同じように各Layerの処理をすればいいんだね~ Layer 5 Layer 4 Layer 7 Layer 6 Layer 1 Layer 3 Layer 2 データL2ヘッダ