この記事シリーズでは、インターネットで用いられている通信プロトコルであるTCP/IPで、通信が送信元から宛先に届くまでに起こっていることをミクロ視点で解説します。
あらゆる技術について言えることですが、コンピュータ内部で起こっているミクロな挙動の理解は、その後の技術の学習や実務で必ず役に立ちます。
- ネットワークエンジニアになりたい人
- サーバ担当でネットワークも知っておきたい人
- IT系の営業で話の幅を広げたい人
- とにかくITの教養を身につけたい人
このような人たちにオススメの記事です。
是非ともご覧ください。
【本シリーズ】
前回のおさらい
前回の記事では、
- コンピュータ内部では、データを送信する前にるデータ分割やヘッダー付与(カプセル化)が行われる。
- ヘッダーにはTCPヘッダー、IPv4ヘッダー、イーサネットヘッダーなどがある。
- IPヘッダーがついたデータをパケットと呼び、イーサネットヘッダー(無線LANヘッダー)がついたデータをフレームと呼ぶ。
等々を解説しました。
今回の記事では、フレームが送信元から送信されて、同一ネットワーク内(L2)の宛先に到達するまでを解説します。
通信開始前の準備
TCP/IPでは、データにL2ヘッダーを付与してフレームの状態にすれば、通信できる状態になります。
フレームはイーサネットプロトコルに対応している機器であれば読み取れますので、フレームをLANケーブルなどに流して対向機器に到達させれば、通信ができるわけです。
ブロードキャスト
ブロードキャストとは、
同一ネットワーク内の全てのIPアドレスに向けてデータを送信すること
です。
ブロードキャストを行いたい機器(PCやサーバ)は、ブロードキャストフレームを送信します。
ブロードキャストフレームを受信したL2ネットワーク機器は、フレームを複製し(ブロードキャストを受信したポート以外の)全てのポートから同一のデータを送信します。
これにより同じネットワーク内の全ての機器に通信が伝わります。
(イメージ図)
※左下のコンピュータから出たブロードキャストが、他のすべての機器に届いています。
ブロードキャストで使われるIPアドレスには決まりがあります。
TCP/IPの取り決め上、ネットワーク内の最後のIPアドレスがブロードキャストアドレスとなります。サイドのIPアドレス宛の通信はブロードキャストとして扱われます。
例:
192.168.0.0/24 のブロードキャストアドレスは、192.168.0.255
172.20.0.0/16 のブロードキャストアドレスは、172.20.255.255
100.100.100.64/26 のブロードキャストアドレスは、100.100.100.127
です。
※ネットワークとアドレスについては、過去記事:IPアドレス(v4)についてをご覧ください。
ブロードキャストで使われるMACアドレスは、必ず「FF:FF:FF:FF:FF:FF」が使われます。
※48ビット全てが「1」となるアドレスです。
ARP(Address Resolution Protocol)
ARPは、前述の通りネットワーク内の機器のMACアドレスを知るためのプロトコルです。
ARPリクエストでMACアドレスを問い合わせ、ARPリクエストを受信した機器がARPリプライを返信しMACアドレスを回答することにより、その機器のMACアドレスがわかります。
ARPリクエストは「このIPアドレスを持つ機器のMACアドレスは?」というメッセージです。
これを上述のブロードキャストで送信するのです。
そして、ARPリプライは「問い合わせのあったIPアドレスを持つ機器のMACアドレスは〇〇です」というメッセージです。
これはユニキャスト(通常の通信)で返信されます。
(ARPフレームのイメージ図)
イメージ図は以下になります。
このように、ARPで情報をやりとりすることにより、対向機器のMACアドレスがわかります。
イーサネットの通信
宛先MACアドレスなどの送信に必要なデータが揃ったら、いよいよ実際のデータの送信です。
ここでもう一度イーサネットヘッダーに登場してもらいましょう。
このひとまとまりのデータ(フレーム)を上から順番に送信します。送信されるのは「0と1」のデータです。
先頭にあるプリアンブルは、「101010...」と10が31個続き、その後に「11」とあるデータです。
このプリアンブルを受け取った対向機器のI/Fは「この次からが宛先MACアドレスだ」と判断し、続けて受信するデータを処理します。
対向機器のI/Fはその後、送信元MACアドレスと宛先MACアドレスを読み取ります。ここで自分のMACアドレス宛(もしくはブロードキャスト宛)のデータであれば続いての処理を行い、そうでなければフレームを破棄します。
続いての「タイプ」とは、「上位層のプロトコルを表すフィールド」です。要するにここに格納されている数字で「IPv4」や「ARP」などを判別します。
そして、ペイロード(通信データ+上位プロトコルのヘッダ、ARPリクエスト等)を受信します。
最後の「FCS」でエラーをチェックします。ペイロードを特定の方法で掛けたり割ったりして余りを算出し、それがFCSと一致するかでデータの欠損がないかを確認する、という方式が主に用いられます。
そして、エラーチェックも無事パスしたフレームのペイロードが、受信した機器のI/Fから上位層(OSなど)に手渡され、処理されることとなります。
まとめ
前回のカプセル化に続いて、今回はL2通信について解説しました。
ちょっと細かい説明にはなってしまいましたが、この様なネットワークのミクロな視点での動作を理解しているか否かで、その後の理解度はかなり違ってきます。
次回はネットワークを超えての通信、L3通信について解説します。
それでは (*゚▽゚)ノ