ネットワーク内の通信には双方のIPアドレスが必須となるのはご存じのこと。
しかしそれだけでは通信は完了しない。それぞれのIPアドレスに対応したMACアドレスも通信には必要となるからだ。
IPアドレスだけではダメなのか
コンソールなどで通信用コマンド(例:SSHコマンド)では宛先情報としてIPアドレスを入力することはあるが、MACアドレスの入力はしないことの方が多い。
IPアドレスもネットワーク内の各機器ごとに振られているため、「IPアドレスだけで双方の通信ができるのでは」と思ってしまう人も多いのだが、IPアドレスとMACアドレス、この両方がないと通信ができないことは知っておいた方がいい。
IPアドレスはネットワーク層(OSIモデルの3層目)で使われる情報であるのに対して、MACアドレスはデータリンク層(OSIモデルの2層目)で使われる情報である。
実際のデータ通信ではこのデータリンク層の情報が必要になる。MACアドレスが不明だとイーサネットフレームの作成ができなくなるからだ。
MACアドレスの必要性については以上である。では宛先にIPアドレスのみを入力するだけで何故通信ができるのか。
それはOSなどがコマンド処理の裏側でMACアドレスの取得をしているからである。
MACアドレスの取得
ではMACアドレスはどのようにして取得されているのか。
それはIPv4のIPアドレスの場合はARP(Address Resolution Protocol)、IPv6のIPアドレスの場合はICMPv6やNeighbor Discovery Protocol(NDP)を使ってIPアドレスからMACアドレスの問い合わせを行なう。
具体的にどういった動きをするのか、ARPを例に見ていきたい。
SSHなどの通信用コマンドでは宛先IPアドレスへの通信と同時にARPリクエスト(ARP要求パケット)を飛ばす。
このリクエストは通常、同じセグメント内の全てのホスト、ルーターが受診してパケットの解析を行なう。そこに該当するIPアドレスを持ったホストがあれば、そのMACアドレスを応答パケットに載せて返送を行なうのだ。
そしてこの要求と応答によって取得されたMACアドレスはARPキャッシュという形で一時的に保存される。毎回ARPリクエストを飛ばしていてはトラフィックに負荷がかかるためだ。
またセグメント外での通信では宛先のIPアドレスのみでOK。宛先のMACアドレスは不要である。
その代わりにルーターのMACアドレスは必要になるため、ルーターのIPアドレスに対してARPリクエストを飛ばしてMACアドレスを取得するのだ。
ここで疑問を持ったのが宛先のIPアドレスは不明、だけどMACアドレスだけは知っている、という状況(そんな状況に陥ることはあるのか?)でネットワーク内の通信は実現できるのか、というものだが、こちらの疑問についてはまたいつか別の機会で投稿できればと思っている。
ひとりごと
大相撲名古屋場所は琴勝峰が優勝。千秋楽で安青錦を破っての堂々の戴冠。完成したばかりのIGアリーナのこけら落としも無事に全日程を終えられたのも良かった。来年以降もこのまま継続での開催となるのだろうか。
大の里は横綱として初めての土俵。これまで以上に期待と重圧をかけられる立場になって、優勝を逃したのは残念だったが11勝で終えたのは及第点ではないか。過去の力士たちも新横綱で迎える土俵では多少やらかしていたりするから。
気になるのは途中休場となった豊昇龍。まだまだ力士として登らなければならない階段がいくつもあったのに、目先のスター欲しさに相撲界が焦って横綱に昇進させたツケがこんなに早く出てしまった。期待の若手力士が次々と出てきている最近の盛り上がりを見るに焦る必要があったのかは疑問。これは後出しじゃんけんでの意見ではない。
あの時にあれほど将来有望だった力士をこんな目に遭わせて。。。これについては今後もネチネチ苦言を呈するつもり。