ネットワークエンジニア

TCP/IP通信が送信元から宛先に届くまで_02(L2について)

この記事シリーズでは、インターネットで用いられている通信プロトコルであるTCP/IPで、通信が送信元から宛先に届くまでに起こっていることをミクロ視点で解説します。

あらゆる技術について言えることですが、コンピュータ内部で起こっているミクロな挙動の理解は、その後の技術の学習や実務で必ず役に立ちます

  • ネットワークエンジニアになりたい人
  • サーバ担当でネットワークも知っておきたい人
  • IT系の営業で話の幅を広げたい人
  • とにかくITの教養を身につけたい人

このような人たちにオススメの記事です。

是非ともご覧ください。

【本シリーズ】





前回のおさらい

前回の記事では、

  • コンピュータ内部では、データを送信する前にるデータ分割やヘッダー付与(カプセル化)が行われる。
  • ヘッダーにはTCPヘッダー、IPv4ヘッダー、イーサネットヘッダーなどがある。
  • IPヘッダーがついたデータをパケットと呼び、イーサネットヘッダー(無線LANヘッダー)がついたデータをフレームと呼ぶ。

等々を解説しました。

今回の記事では、フレームが送信元から送信されて、同一ネットワーク内(L2)の宛先に到達するまでを解説します。

通信開始前の準備

TCP/IPでは、データにL2ヘッダーを付与してフレームの状態にすれば、通信できる状態になります。

フレームはイーサネットプロトコルに対応している機器であれば読み取れますので、フレームをLANケーブルなどに流して対向機器に到達させれば、通信ができるわけです。

ネットワークエンジニアは、LANケーブルの差込口をインターフェース(略して「I/F」)と呼びます。
この記事では主に「I/F」と表記します。
パケットにヘッダーを付与し、フレームにするのはインターフェースの仕事です。
しかし、通信をするためには、通信相手の宛先を知る必要があります。
L2の通信で相手を識別するために用いられる識別子は、MACアドレスです。
そして、MACアドレスはARPという仕組みを使って、IPアドレスで問い合わせ・取得します。
さらに、ARPについて理解するには、先にブロードキャストというものを理解する必要があります。
まずはブロードキャストから解説します。

ブロードキャスト

ブロードキャストとは、

同一ネットワーク内の全ての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」となるアドレスです。

ブロードキャストは、ネットワーク内のすべての機器に送信される通信。
ブロードキャスト用のIPアドレスは、そのネットワーク内の最後のアドレス。
ブロードキャスト用のMACアドレスは「FF:FF:FF:FF:FF:FF」

ARP(Address Resolution Protocol)

ARPは、前述の通りネットワーク内の機器のMACアドレスを知るためのプロトコルです。

ARPリクエストでMACアドレスを問い合わせ、ARPリクエストを受信した機器がARPリプライを返信しMACアドレスを回答することにより、その機器のMACアドレスがわかります。

ARPリクエストは「このIPアドレスを持つ機器のMACアドレスは?」というメッセージです。

これを上述のブロードキャストで送信するのです。

そして、ARPリプライは「問い合わせのあったIPアドレスを持つ機器のMACアドレスは〇〇です」というメッセージです。

これはユニキャスト(通常の通信)で返信されます。

(ARPフレームのイメージ図)

ARPリクエストとARPリプライはペイロード(データ)で、イーサネットヘッダとは別モノです。混同しないようにしましょう。
ここでは「ARPを送る機器は対向機器のIPアドレスを知っている」という前提で話を進めます。
IPアドレスを知る方法についての説明は、L3についての別記事で説明します。

イメージ図は以下になります。

このように、ARPで情報をやりとりすることにより、対向機器のMACアドレスがわかります。

ARPによって学習したMACアドレスとIPアドレスの対応は、一定時間保持され、その後破棄されます。
機器の入れ替えや設定変更などにより、MACアドレスとIPアドレスの対応が変わる可能性があるので、定期的に情報をクリアし再学習するためです。

イーサネットの通信

宛先MACアドレスなどの送信に必要なデータが揃ったら、いよいよ実際のデータの送信です。

ここでもう一度イーサネットヘッダーに登場してもらいましょう。

このひとまとまりのデータ(フレーム)を上から順番に送信します。送信されるのは「0と1」のデータです。

先頭にあるプリアンブルは、「101010...」と10が31個続き、その後に「11」とあるデータです。

このプリアンブルを受け取った対向機器のI/Fは「この次からが宛先MACアドレスだ」と判断し、続けて受信するデータを処理します

このプリアンブルは開始信号のため、開始箇所(「ここからが送信元MACアドレスを表している」という情報)さえ分かれば用済みとなります。そのため、受信したイーサネットカードですぐに破棄されます。

対向機器のI/Fはその後、送信元MACアドレスと宛先MACアドレスを読み取ります。ここで自分のMACアドレス宛(もしくはブロードキャスト宛)のデータであれば続いての処理を行い、そうでなければフレームを破棄します

続いての「タイプ」とは、「上位層のプロトコルを表すフィールド」です。要するにここに格納されている数字で「IPv4」や「ARP」などを判別します。

そして、ペイロード(通信データ+上位プロトコルのヘッダ、ARPリクエスト等)を受信します。

最後の「FCS」でエラーをチェックします。ペイロードを特定の方法で掛けたり割ったりして余りを算出し、それがFCSと一致するかでデータの欠損がないかを確認する、という方式が主に用いられます。

FCSでエラーが出たフレームは破棄されます。
ネットワーク機器では、ポートの状態を見るコマンドで表示される「CRCエラー」という項目に、エラーで破棄されたフレームの数が表示されます。
破棄されたフレームはL2では再送されません。イーサネットというプロトコルには、再送する機能が策定されていないためです。
これも別記事で説明することになると思いますが、欠損データを再送するのはTCP(L4)などの役割です。

そして、エラーチェックも無事パスしたフレームのペイロードが、受信した機器のI/Fから上位層(OSなど)に手渡され、処理されることとなります。

まとめ

前回のカプセル化に続いて、今回はL2通信について解説しました。

ちょっと細かい説明にはなってしまいましたが、この様なネットワークのミクロな視点での動作を理解しているか否かで、その後の理解度はかなり違ってきます。

次回はネットワークを超えての通信、L3通信について解説します。

それでは (*゚▽゚)ノ

-ネットワークエンジニア
-,