今回は弊社でネットワーク基礎の勉強会を実施しました。その時の内容を公開させていただきます。一度ご覧いただけますと幸いです。
はじめに
Azureなどで環境構築をおこなったり、トラブルが発生した時に担当の方と会話する時にネットワークの話が出る事があり、基礎から理解したいというニーズが社内であったため前職のネットワークエンジニアだったことを活かして社内勉強会を行う事にしました。
第一回はネットワーク基礎という事で、OSI参照モデルとネットワークでの実際の通信時何が起きているかをシミュレーションしてみました。
目次
- OSI参照モデル
- 実際のネットワーク通信
- 今後の予定
OSI参照モデル
ネットワークはデータを運搬するという事で、実際の運送業に例えながらOSI参照モデルの説明を行いました。
OSI参照モデルの概要
ヘッダとカプセル化
各レイヤ毎にヘッダが存在し、送信側では上から順にヘッダをつけていき受信側では下から順にヘッダを参照していくという説明をし実際にパケットキャプチャソフト「WireShark」を使って中身を見てみました。
IPアドレスを調べる
実際にキャプチャしたデータを確認する際にIPアドレスがわかっていないとどのデータでやり取りしているかを見つけられないので、PC側、サーバー側のIPアドレスを実際のコマンドで確認しました。
自分のIPアドレスを調べる
・PCのインタフェースを確認する
networksetup -listallhardwareports
Hardware Port: Ethernet Adapter (en4)
Device: en4
Ethernet Address: 1a:4b:ab:8d:1f:da
Hardware Port: Ethernet Adapter (en5)
Device: en5
Ethernet Address: 1a:4b:ab:8d:1f:db
Hardware Port: Ethernet Adapter (en6)
Device: en6
Ethernet Address: 1a:4b:ab:8d:1f:dc
Hardware Port: Wi-Fi
Device: en0
Ethernet Address: c8:89:f3:b7:db:5c
Hardware Port: Thunderbolt 1
Device: en1
Ethernet Address: 36:0b:6b:6e:60:80
Hardware Port: Thunderbolt 2
Device: en2
Ethernet Address: 36:0b:6b:6e:60:84
Hardware Port: Thunderbolt 3
Device: en3
Ethernet Address: 36:0b:6b:6e:60:88
Hardware Port: Thunderbolt Bridge
Device: bridge0
Ethernet Address: 36:0b:6b:6e:60:80
VLAN Configurations
Wi-Fi接続なのでHardware Port: Wi-FiDevice: en0 ⇦このインタフェース名を覚えておくEthernet Address: c8:89:f3:b7:db:5c
・PCのアドレス情報を確認する
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=6463<RXCSUM,TXCSUM,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
ether c8:89:f3:b7:db:5c
inet6 fe80::18af:8a26:db1a:65ab%en0 prefixlen 64 secured scopeid 0xe
inet 172.16.0.140 netmask 0xfffff800 broadcast 172.16.7.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
172.16.0.140 が自分のIPアドレスだと分かりました。※Windowsではipconfigコマンドで確認可能です。
サーバーのIPアドレスを調べる
20.124.141.213 がサーバーのIPアドレスだと分かりました。
このアドレスで宛先アドレスや送信元アドレスをフィルタやソートする事でキャプチャしたデータを見つける事ができます。
実際のネットワーク通信
先ほどの例ではPC側だけでしたが、実際にはサーバーとの間に複数のネットワーク機器を介して通信が成立しています。実際のネットワーク通信では何が起きているかを順を追って説明しました。
データを送信する機器(PC)の挙動
送信側では上のレイヤからヘッダをつけていきますが各レイヤの宛先アドレス情報は分からない事がほとんどです。ネットワークではヘッダの宛先アドレス情報を調べるのに各レイヤ毎に対応したテーブルを持っておりそのテーブルを参照して、各レイヤのヘッダ情報を埋めていきます。
データを転送する機器(SW、RT)の挙動
データを受け取った転送機器は、一番下のレイヤの宛先アドレス情報を見て自分宛かどうかを判断します。自分宛の場合は、そのヘッダを外して上のレイヤのヘッダを参照し処理します。(SWはL2までRTはL3までのヘッダを参照できます。)自分宛でない場合は、自分の持っているテーブルを参照します。そのテーブルに宛先があればそこに転送し、なければ破棄します。
データを受信する機器(サーバ)の挙動
データを受け取った転送機器は、一番下のレイヤの宛先アドレス情報を見て自分宛かどうかを判断します。自分宛の場合は、そのヘッダを外して上のレイヤのヘッダを参照し処理します。(サーバはL7までのヘッダを参照できます。)どこかのレイヤで宛先アドレスが自分宛でなかった場合は、そこでデータを破棄します。
PCで各種テーブルを確認するコマンド
・IPアドレステーブル(L3)宛先ネットワークアドレスと、次にどのIPアドレスへ転送するかが記載されているテーブルです。
netstat -rn
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 172.16.0.1 UGScg en0
127 127.0.0.1 UCS lo0
127.0.0.1 127.0.0.1 UH lo0
169.254 link#14 UCS en0 !
169.254 link#26 UCSI en9 !
169.254 link#27 UCSI en12 !
169.254.84.181 link#26 UHLSW en9 !
169.254.157.170/32 link#26 UCS en9 !
169.254.188.28/32 link#27 UCS en12 !
172.16/21 link#14 UCS en0 !
172.16.0.1/32 link#14 UCS en0 !
172.16.0.1 80:22:a7:31:92:2f UHLWIir en0 1157
172.16.0.119 8a:11:5e:e3:8b:1a UHLWIi en0 1053
172.16.0.140/32 link#14 UCS en0 !
172.16.7.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !
224.0.0/4 link#14 UmCS en0 !
224.0.0/4 link#26 UmCSI en9 !
224.0.0/4 link#27 UmCSI en12 !
224.0.0.251 1:0:5e:0:0:fb UHmLWI en0
239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en0
239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en9
239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en12
255.255.255.255/32 link#14 UCS en0 !
255.255.255.255/32 link#26 UCSI en9 !
255.255.255.255/32 link#27 UCSI en12 !
Destinationが宛先ネットワーク、Gatewayが次に転送するIPアドレスになります。PCの場合はデフォルトゲートウェイと呼ばれる全ての宛先はここに転送するという記載があります。ここではdefaultと書かれていますが、0.0.0.0と記載されている事もあります。
※Windowsでは route print コマンドで確認できます。
・ARPテーブル(L2.5)IPアドレスとMACアドレスを紐づけるテーブルです。上記IPアドレステーブルで参照した次に転送するIPアドレスのMACアドレスを調べる時に使います。
arp -a
xxxxxxxxxxxxx.local (169.254.84.181) at (incomplete) on en9 [ethernet]
? (172.16.0.1) at 80:22:a7:31:92:2f on en0 ifscope [ethernet]
? (172.16.0.119) at 8a:11:5e:e3:8b:1a on en0 ifscope [ethernet]
? (172.16.7.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en9 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en12 ifscope permanent [ethernet]
・MACアドレステーブル(L2)MACアドレステーブルはMACアドレスと、転送する宛先インタフェースが記載されたテーブルです。スイッチなどのL2の転送機器で使うため、PCやRTサーバーにはありません。
今後の予定
今回は、ネットワークの基礎という事で実際の通信の概要を説明していきました。今後は、実際にそれぞれのレイヤで知っておくべき内容を説明し、実際のトラブルシューティングのやり方や切り分け方法などをやっていこうと思います。
・L2を少し
・MACアドレスについて
・LAN、VLAN
・L3を深掘り
・IPアドレス、ネットワークアドレス、サブネットマスク
・プライベートアドレス、グローバルアドレス
・NAT、PAT
・ルーティング、ロンゲストマッチ
・IPアドレスでのフィルタリング
・L4を少し
・TCP 3wayハンドシェイク
・ポート番号でのフィルタリング
・トラブルシューティング