コラム - お役立ち情報

2022.10.25

データ通信の中身を知っていますか?

データ通信とは?

今やありとあらゆる情報機器が何らかの通信を行っている、と言っていいでしょう。
手のひらの中の小さなスマホが世界中と繋がっている、そんな時代になっています。
今回のコラムでは、この情報通信がどのような仕組みで行われているのかを解剖してみたいと思います。

OSIの7階層

情報系のエンジニアになろうとして勉強を始めると、通信の授業の最初の方で必ず出てくるトピックに「OSIの7階層」というものがあります。
厳密なことを言い出すと難しくなってしまいますが、この概念抜きには通信を語れないので例え話に置き換えながら説明してみようと思います。

7階層とはこのように決められたものです。

これだけではなんのことやら、ですね。
我々が例えばパソコンでもスマホでもいいですが、Webブラウザを使って www.abc.com というサイトを表示しよう、とします。
このときにパソコン/スマホの中では先ず

こんな感じにデータを並べたものを作ります。
単純化して書いていますが、「宛先」には通信管理上必要な情報も付加され、併せて「ヘッダ」と言います。
この構造を作成するソフトウェア機能を「第7層ドライバ」と言います。

できた情報は次に第6層ドライバに渡され、

第7層のデータをまるごとコンテンツとして含み、第6層のヘッダを付加したデータが作成されます。
このように下の層(数字の小さい方)は上の層をまるごと包んだような構造になるので、「封筒」の意味の「エンベロープ」とも呼ばれます。

この構造は第1層まで繰り返され、最後には

このように7重の封筒に便箋が入っているような状態でパソコンから送り出されます。
どうしてこんな面倒なことになっているのか、というと各層の「宛先」は封筒の届け先の意味が異なるからなのです。

 

各層の宛先はどこになるのか


皆さんがデスクトップパソコンをお使いならば、筐体の裏側に右のような「イーサネットケーブル」が刺さっていると思います。
ノートブックパソコンなら無線LAN(Wi-Fi)を使用されているでしょうか。
スマホは通信キャリアのモバイル通信(4Gや5Gと言われるもの)か、Wi-Fiでしょう。

通信データがパソコン/スマホを出ていくときにはこれらイーサネットやWi-Fiの世界での「宛先」指定が必要です。
因みにWi-Fiはイーサネットの電気信号を電波に載せたものなのでWi-Fiはイーサネットと同じに考えていいです。

イーサネットの世界での宛先は「MAC(マック)アドレス」と言います。
Windowsパソコンではこのように「物理アドレス」として表示されます。

この例で A8-A1-59-0D-9B-4C と書かれているMACアドレスは工場でイーサネット通信チップに書き込まれているので書き換えることはできません。
そしてこのMACアドレスは製造メーカーが重複しないように一つずつチップに書き込んでいるので世界で唯一のものです。
因みにMACアドレスの前半部分はメーカーの固有アドレス、後半部分がメーカー内での連番になっています。
イーサネットは第2層に該当し、第2層ヘッダに宛先として相手のMACアドレスを書いておくことで指定の通信先に届けます。

MACアドレスを使った宛先の指定には2つの課題があります。

①世界中のコンピュータのMACアドレスを知ることができるのか
②相手のMACアドレスをどうやって知るのか

 
①は実際、知ることはできません。世界はおろか、「ルーター」という通信中継機器を隔てた先の機器のMACアドレスは分かりません。
ルーターはネットワークを「区切る」箇所に設置されていて、皆さんの家庭の光回線のホームゲートウェイ、ADSLモデム等もルーターとして機能しています。
企業でも社外インターネットと社内の境界にルーターは配置されていますし、企業拠点間の通信上にもルーターは配置されているはずです。
このように「ルーターから先」の相手に通信を届けようとするとMACアドレスでは届けられません。ですので自力でMACアドレス調べて送るのではなく、誰かに委託して届けてもらうことにします。
この委託相手が「ルーター」です。ルーターという名前自体が route、つまり通信経路から来ていて、通信の宛先から何処に送ったらいいかを判断する機能がある機器なのです。
自分のパソコンは、通信の宛先が「自分の属しているルーターの縄張りの中にいる」=ローカルなのか、そうでないのかを判断します(後述します)。
ローカルならMACアドレス指定して直接送信できます。ローカルでなければルーターのMACアドレスに向けて送信しその先の通信を委託するのです。
ルーターはそれ自身で世界中の機器の宛先を知っているわけではありませんが、「自分が知らない宛先だったら更に丸投げする次のルーター」を知っています。
その仕組みを使用して次々にルーターをリレー経由し、最終的な宛先まで届くというわけです。

②についてですが、イーサネットの規格の中にARPという仕組みがあり、それを使ってMACアドレスを知るようになっています。これは後でIPの話と一緒に説明します。

イーサネットは第2層、と書きました。では第1層は?というと有線イーサネットでは「電線」です。Wi-Fiでは「電波」です。
第1層はデータをどのように電気/電波シグナルとして表現するか、という規定なのでヘッダはありません。
 
 

コンピュータ通信の主流とは

OSI 7階層は通信の概念を知るにはとてもいいのですが、コンピュータに実装するには「細かすぎ」な面があります。
実際の世の中で情報通信の主流は「TCP/IP」という規格で、これは

このように4層に集約されています。OSIが定義している機能をいくつかにまとめて実装しているということです。
TCP/IPという名称はトランスポート層=TCP、インターネット層=IPという規格から成り立っていることに依ります。
ネットワークインターフェース層は前述のイーサネットであったり、スマホの通信キャリアのモバイルネットワークだったりです。
アプリケーション層はその名の通りWebブラウザ、メールアプリといった皆さんが直に操作するアプリケーションです。

 

IPについて

さてこのコラムの目的の「通信を理解する」にあたって、最も重要なのがインターネット層=IPです。名前がインターネット層という通り、インターネットの世界でデータを届けることがこの層の使命になっています。
ネットワークインターフェース層とは別の層にあるのでイーサネットを使おうが、モバイルネットワークを使おうがIPの機能を利用できますし、異なるネットワークインターフェース層の相手と相互に通信できます。
このような事ができるのは階層をキッチリ分けて他の層の性質が別の層に影響しないように設計されているからです。すごいですね。

さてIP層では宛先を「IPアドレス」という形式で表現します。先程のWindowsのスクショでは「IPv4 アドレス」として表示されていました。
スマホでも以下のようににIPアドレス 60.45.222.229 が確認できます。

IP通信するには双方がIPアドレスを持っている必要があります。自分のIPアドレスはどのようにして決まったのでしょうか。
殆どの場合、DHCPと呼ばれる機能を持ったサーバがネットワーク内にいて、機器が電源オンして起動DHCPサーバがIPアドレスを割り当ててくれる仕組みで運用されています。
企業内ネットワークは勿論、家庭内でもプロバイダーが貸与しているルーターにDHCP機能が搭載されていて家庭内機器のIPアドレスを割り当てています。
IPv4と呼ばれている現在主流の規格では、32ビットの数値でアドレス表現するので約40億のアドレスが存在可能になっています。
(2の32乗=4,294,967,296)これを8ビットずつに区切ってピリオドで繋いで【60.45.222.229】のように表現します。単に人間にとっての見易さのためです。
4つの数字は8ビットなので0~255までの値が存在します。
このIPv4のアドレスは世界人口よりも少ないので全人類がスマホを1台ずつ持つと足りなくなってしまいますね。

IPアドレスが足りない問題に対して2つの解決方法があります。
1つめは構内、組織内のネットワーク、つまりLANには「LAN内でしか通用しないアドレスを使用する」方法です。
企業や家庭では前述のようにルーター装置がインターネットとLANの境界線に配置されています。この「LAN=ルーターの内側」ではIPアドレスとして「プライベートアドレス」という専用の範囲のアドレスを使用します。逆に「インターネット=パブリック=ルーターの外側」ではプライベートアドレス以外の範囲を使用します。パブリックIPアドレスは世界で唯一のもので重複は許されません。
プライベートアドレスはルーターで「封じられた」LANの中でしか使用できない決まりなので、他の組織が同じプライベートアドレスを使用していても重複して障害になることはありません。
ルーターはネットワークを繋ぐ機器として、LAN側のIPアドレスとインターネット側のIPアドレスを持っていますが、インターネット側はパブリックIPアドレス、LAN側はプライベートIPアドレスを持っている機器として見えます。
組織はインターネットの世界から見るとルーター1台しか存在しないように見えるのです。

世界に存在する多数の情報機器は、その殆どが何らかの組織の内側で使用されています。携帯電話も通信事業者がパブリックIPを持っていて、個々の機器にはプライベートIPを付番して運用している業者が多いです。
このようにして重複してもいいプライベIPを駆使してインターネットの世界のパブリックIPアドレス数を節約しています。

それでも近い将来、パブリックIPが枯渇するのが目に見えてきたので恒久的対策として編み出されたのがIPv6規格です。IPv6は極めて巨大な数のIPアドレスを扱うことができ、プライベートIPを使用しなくても全世界の機器にアドレス付番が可能と言われています。
IoTといわれる、小さなセンサー等にまでIPv6アドレスを付番してそれらが直接管理サーバに情報を届けるような仕組みはIPv6があってこそ可能になります。
IPv6はパソコンやスマホで使えるようになって数年経過していますが、通信の規格は経路全体が対応しないと切り替えできないので、非常にゆっくりとしたペースで浸透していっている、という状況です。

上の図でLAN内のプライベートIPの機器からインターネットへ通信を投げかける、例えばパソコンでブラウザ使ってWebページを表示しようとしている、とします。
そのとき送信元のIPアドレスはプライベートなので、そのままインターネットに投げかけても受け取った機器が返信を返すIPアドレスがプライベートでは所在不明で返せません。
そのため、このようなインターネット境界に位置するルーターにはNATとかNAPTという機能が備わっていて、LAN内からインターネットへの通信には送信元IPアドレスを自分のパブリックIPに書き換えて送出し、返信が返ってきたら宛先を元のプライベートIPに書き換えてLAN内に戻す仕組みがあります。
この仕組みのおかげでLAN内からは自由にインターネットへ通信を開始できますが、インターネット側からLAN内の機器へ通信開始することはできないようになっています。この性質はセキュリティ的にも好ましいものです。

 

インターネットの世界では・・・

インターネットの世界で通信相手を指し示す「宛先」はIPアドレスでした。ですが、我々がメールを送ったりWebページを見る時に数字のIPアドレスで宛先を示すようなことはまずしないでしょう。
無味乾燥な数字だけのアドレスを覚えておけ、と言われても人間には酷な話です。
そこでIPアドレスに対応する英文字の名前を付けて運用し、通信時にその名前をIPアドレスに変換しよう、というのが「ドメインネームシステム=DNS」です。
企業、学校では「ID番号 vs 氏名」が対応付けられ、台帳に管理されていることでしょう。同様にIPアドレスに対して分かり易い名前をつけて登録し、名前で照会を受けたらIPアドレスを返す仕組みがDNSです。
 

www.abc.com という名前の各部分には構造的な名称があります。
abc.com :ドメイン名
www :ホスト名
www.abc.com :完全修飾名(FQDN)

 
IPアドレスもFQDNもピリオドで区切られた部分から成り立っていますが、IPアドレスのピリオドは前述のように人間向けに読みやすくするために付いているだけなのでFQDNのピリオドの位置とは無関係です。
上に貼ってあるWindowsやスマホのスクショに「DNSサーバ」と書かれている欄がありますが、このサーバに所定のDNS照会を送るとIPアドレスが返ってくる、という仕組みになっています。

このDNSを照会して、人間に優しいFQDNで名前付けされたインターネットの通信相手を指定するだけで、IPアドレスに変換して通信を投げかけることができるのです。

ここまでの説明を組み合わせると、我々がWebページを見る時にパソコンから送出される通信はこんな感じになります。

最初に見た7階層のエンベロープよりはシンプルですね。
3重の封筒に、各封筒には異なる世界で通用する宛先表現が付いています。

まず最初に自分のパソコンが属するLANの世界での宛先がMACアドレスで指定され届けられます。
MACアドレスを探すのはARPという仕組みを使用しています。

次にインターネットの世界に出ていきIPアドレスを使用して宛先を探し届けます。
IPアドレスはDNSという仕組みでFQDNから引用することができました。

宛先ホストに届いたら、通信ドライバソフトがTCPヘッダを見て書かれているポート番号から、そのポートを使用するアプリケーションを判定してコンテンツを渡します。ポート=80は国際標準でhttp、それを扱うのはWebサーバアプリケーションです。

 

通信準備について

ここまで、正常稼働しているパソコン/スマホから通信を仕掛けるときにどのように宛先が解決されるのか、を見てきました。
このような通信が可能な状態になるためにパソコンを起動する時に色々と準備が行われています。次にはその通信準備を紐解いていきましょう。

今までの説明で、通信可能になるために知っていなければならないことは何でしょうか。

1. 自分のMACアドレス
2. 自分のIPアドレス
3. 自分の属するLANのルーターのIPアドレス
4. FQDNからIPアドレスへ変換してくれるDNSサーバのIPアドレス
5. LAN内で通信する相手のMACアドレス

結構たくさんありますね。
1.だけは自身で解決できます。イーサネット通信チップ上に書き込まれているので、通信ドライバが勝手に読み出してきて使用します。

この例では「物理アドレス」と書かれているのがMACアドレスです。実はこのMACアドレスを強制的に上書きする方法もあるのですが、LAN内で重複すると大問題になりますし、書き換えることのメリットが特に無いので「書き換え不可能」と覚えておきましょう。

さてこのMACアドレスを持った機器が起動する時、通信ドライバが BOOTP という通信プロトコルをブロードキャストします。
ブロードキャストとは、LAN内の全員に向けて一斉送信することです。通常、ネットワークインターフェース層の宛先MACアドレスとして指定する箇所に「全員宛」を示す特殊なアドレスを指定して送出します。
まだこの段階ではLAN内に誰がいて、何というMACアドレスなのかが全く分からないのでLAN内で「大声を出す」ことでBOOTPの機能を持ったサーバに聴き取ってもらうのです。
BOOTP能力がない機器はこのブロードキャストを受け取っても無視します。
BOOTPは現在では DHCP という上位の機能に含まれていることがほとんどなので、置き換えて読んでもらっても大丈夫です。
BOOTPサーバは 2,3,4 の情報をまとめて返してくれます。この情報が上のスクショに現れています。

2.自分のIPアドレス → 「IPv4 アドレス 192.168.17.80」
3.自分の属するLANのルーターのIPアドレス → 「IPv4 デフォルト ゲートウェイ 192.168.17.51」
4.FQDNからIPアドレスへ変換してくれるDNSサーバのIPアドレス → 「IPv4 DNS サーバー 192.168.17.48 192.168.17.36」

最後の 5. は起動時に予め全ての通信相手のMACアドレスを調べておく、では効率が悪いので個々の通信開始時に調べています。
これが ARP という機能で、「IPアドレス vs MACアドレス」対応表を管理しているというイメージです。
若しこれから通信しようとしている相手IPアドレスがARP表に無かったら、BOOTPのようにARPプロトコルをLAN内にブロードキャストします。
ARPの内容は「IPアドレス 192.168.17.xxx は誰ですか?」というものです。問いかけられた機器はこれに応答することで自身のMACアドレスが伝わります。
LAN外のインターネット上の宛先の場合はルーターに送ってその先の通信はお任せですから、ARPの対象はLAN内の機器だけになります。
従ってARPも上記「デフォルト ゲートウェイ」のIPアドレスに対して問いかけ、MACアドレスを得ます。

通信の準備、ということでパソコンの起動する時をイメージしてお話しましたが、実は通信状態の初期化という形で頻繁に発生しています。
パソコンではLANケーブルが抜けて挿し直したとき、ノートブックパソコン持って移動して別のWi-Fiアクセスポイントにつながったとき。
スマホでは一旦圏外になってから再びつながったとき。
このようなときにも初期化処理が発生し、2,3,4の処理が行われます。

最後に、宛先のIPアドレスが自分のLANの中にいるのか、外なのかを判別する方法を説明します。
この判別には上のスクショの中の「IPv4 サブネット マスク 255.255.255.0」が使われます。
下図のように自分と宛先のIPアドレスを、サブネットマスクが「1」の部分だけ取り出します。

このマスクした結果が自分のMACアドレスをマスクしたものと一致するときは自分と宛先が「同じサブネットに属する」=「同じLANの中にいる」と判断できるのです。
サブネットが一致しない宛先の通信はルータに送られて配信を委託することになります。

 

まとめ

如何でしょうか。
今や居ながらにして世界中と通信できてしまう時代です。その世界に発信するための要素技術の「サワリ」を解説してみました。
難解にならないように敢えて細かいところを省いてあるので識者から見たら「ウソ言うな」的なところもあるかと思いますが、そのへんはご容赦ください。

インターネット通信の根幹となるTCP/IP技術は元々 アメリカ国防高等研究計画局DARPAの研究から生まれました。
一応、米軍の関与は受けない組織と言われていますが、開発した技術は国防に利用することを目指していることは明らかです。
そんな技術を惜しげもなく公開し、無償で利用できるようにするという英断がインターネットを生み出したと言っても過言ではないと思います。
いつか日本からも世界に誇るような技術を、既にいくつもあると思いますがもっとたくさん、提供していけたら素晴らしいな、と思います。