目次
- ネットワークの仕組み
- コメント
OSIモデル
まずOSIモデル。
OSI参照モデルは、ネットワーク通信を7つの階層に分けて捉える考え方です。通信は同一階層間(左右方向)ではプロトコルを使って行われ、上下階層間ではインターフェース(例:ドライバ)を通じてやり取りが行われます。
プロトコルとはルールのことです。ルールは階層ごとに決められており、ネットワーク層であればネットワーク上でデータの宛先(住所)を特定し、そこへパケットを届けるためのルール。IPアドレスはこのルールに基づいています。
1. アプリケーション層(第7層)
- ユーザーが直接操作する通信アプリケーションの層。
- HTTP(Web)、FTP(ファイル転送)などがここに属します。
- この層のデータは下の階層に渡る際に「ヘッダ」が追加され、通信の「荷物」となって送信されます。
2. トランスポート層(第4層)
- ネットワークの第4層(トランスポート層)には、大きく分けて2つのプロトコルがあります。
- TCP: 3-way Handshakeを行い、確実にデータを届ける「慎重派」。Web閲覧(HTTP/HTTPS)やファイル転送の際、実際のデータを送る前に、TCPという仕組みを使って「送信元IP・ポート」「宛先IP・ポート」の4点セットを用い、「つながる?」「OK!」「開始!」という事前の通信確認(1往復)を行います。これを、3-way Handshake (TCP通信の確立)といいます。
- UDP: 事前の確認を一切せず、いきなりデータを送りつける「スピード重視派」。DNSの問い合わせ(IPアドレス教えて)には主にこちらが使われます。
- アプリケーション層から受け取ったデータは小さく分割され、TCPやUDPのヘッダが付加されます(セグメント化)。分割は一度に遅れるデータ量に上限(イーサネットフレームのデータ部分の最大サイズ=MTU:1500バイト)があるため必要です。
- ここで登場するのがポート番号(0~65535)です。たとえばHTTPはポート80番、1~1023はウェルノウンポート(既知の用途に予約された番号)と呼ばれます。
- ファイアウォールでは、不要なポートを閉じ、必要なポートだけを開くことでセキュリティを保ちます。
- この層ではTCP/UDP以外にも、かつて使われていたNetBEUI(NetBIOS Extended User Interface)やIPX/SPXなどのプロトコルも存在していました。ただし、NetBEUIはルーターを超えた通信ができません。なお、NetBIOSはアプリケーションとトランスポート層の間のAPI(インターフェース)として使われ、例えばTCPや UDP を通して通信します。
3. ネットワーク層(第3層)
- データにIPアドレス(送信元・送信先)の情報がIPヘッダとして付加されます(パケット化)。
- パケットがネットワークを通じて目的地まで届けられる仕組みを提供します。
- この「ネットワーク層」と「トランスポート層」をまとめてTCP/IPと呼ぶことが多いです。
一般的に使用されているIPアドレスにはIPv4とIPv6の2種類があり、それぞれの特徴を以下に示します。
IPv4アドレス
IPv4の場合のIPアドレスは32ビットなので、0と1が32個並ぶということになる。
32ビットを8ビットずつ4分割して.(ドット)で区切り、10進法に変換してドットで区切って0~255の数字で並べたものがIPアドレスの一般的な表記方法である。
IPv4アドレスの種類
- グローバルIP:プロバイダから割り当てられるインターネットで一意に識別されるアドレス。
- プライベートIP:家庭や社内LANで自由に使えるアドレス(例:192.168.x.x)
世界全体のIPアドレスの大元を管理しているICANN / IANA、それらがIPアドレスを世界を5つに分けた地域(RIR)ごとに振り分け、RIRが国単位(NIR=日本ではJPNIC)に振り分け、JPNICが国内のISPにIPアドレスの塊を振り分け、ISPが管轄の個人に与えられているプレフィックス(後述)の範囲内で振り分けているのでグローバルIPアドレスが重複することはありません。
サブネットマスクとは?
ネットワークの規模(接続できるホストの数)を決めるためのもので、サブネットマスクが 255.255.255.0 の場合、最初の24ビットが「ネットワーク部分=ネットワークプレフィックス」、残りの8ビットが「ホスト部分」となり、最大254台の機器を接続できます。
IPアドレスを実際の住所に例えると、プレフィックスが〇〇県〇〇市(どのネットワークか)で、ホスト部が〇〇町1-2-3(そのネットワーク内のどのパソコンか)のように構成されています。
家庭内ネットワークでは254台以上のアドレスを使う必要がないため、WindowsではPCのプライベートIPアドレスを手動で指定すると、自動で255.255.255.0が入力される設定になっています。自動入力ではありますが、手動で255.255.0.0にすることも可能です。
- 255.255.255.0 → 254台のホスト(192.168.0.1?192.168.0.254)
- 255.255.255.240 → 16個のアドレス → 実質14台(ブロードキャスト+ネットワーク除く)
| クラス | アドレス範囲 | サブネットマスク |
|---|---|---|
| A | 0.0.0.0~127.255.255.255 | 255.0.0.0 |
| B | 128.0.0.0~191.255.255.255 | 255.255.0.0 |
| C | 192.0.0.0~223.255.255.255 | 255.255.255.0 |
IPv4の「192.168.~」と自動設定の謎
ルータアドレス(デフォルトゲートウェイ)が「192.168.~」にされる理由は、この範囲のアドレスがLAN専用として世界共通で予約されているプライベートIPアドレスだからです。
インターネット上のアドレス(グローバルIP)と重複しないようになっています。
IPv6アドレス
IPv6の場合のIPアドレスは128ビットなので、0と1が128個並ぶということになる。
128ビットを16ビットごと8分割し:(コロン)で区切り、16進数(0~9,a,b,c,d,e,f)で表します。
また、IPv6アドレスは以下の省略ルールを使って表します。
- 16進数4文字のまとまりにおいて、頭についている「0」は省くことができます。もし4文字すべてが「0000」の場合は「0」を1つだけ残します。
(例:0db8 → db8、0022 → 22、0000 → 0) - 「0000」のグループが2つ以上連続している場合、それらをまとめて :: と表記できます。ただし、:: は、1つのIPアドレスの中で「1回だけ」しか使えません。
(2001:0db8:0000:0000:0000:0000:0000:0001→2001:db8::1)
IPv6ではIPv4のようにルータがDHCPでプライベートIPを配り、NATでグローバルIPに変換してインターネットに出るという仕組みを使う必要がないため、DHCPサーバーやNAT(アドレス変換)は不要になります。IPv6はアドレスがほぼ無限にあるため、全ての機器にグローバルIPが設定されています。
機器が自力でIPv6アドレスを生成する仕組みを、「SLAAC(スラック:ステートレス・アドレス自動設定)」と呼びます。このアドレス生成は、以下の2ステップで行われます。
- 1. ルーターからのネットワーク情報(前半部分)の通知: ルーターは、「ここはこういうネットワークですよ」という情報(ルーター広告=RA)を定期的にネットワーク内に配信します。この情報には、IPアドレスの「前半部分(プレフィックス)」が含まれています。
- 2. 端末によるアドレスの自動生成(後半部分との結合): パソコンやスマホは、ルーターからその情報を受け取ります。そして、受け取った「前半部分」に、機器自身が生成した「後半部分(インターフェースID)」を組み合わせることで、自力でグローバルIPv6アドレスを完成させます。
リンクローカルIPv6アドレス
リンクローカルアドレスは、ルーターを越えずに「同一ネットワーク(LAN)内」の機器同士で直接通信するためだけに使われるアドレスです。
最初が fe80 で始まり、それに続く部分(プレフィックス)がすべて0と決まっています。つまり、前半の64ビットは fe80:0000:0000:0000:=「fe80::」となり、後半の64ビット(4分割部分)がホスト部分(インターフェースID)になります。
IPv4の時の同一LAN内の接続台数が254台だったのに対して、IPv6ではデフォルトで2の64乗(約1,845京)台を接続可能と言うことになります。
その機器のIPv6が有効になっていれば、機器自身が通信が可能になった瞬間に、前半は必ず fe80:: にし、後半の64ビットは自分のLANカードが持つ固有の番号(MACアドレス)を計算して変換したり、OSがランダムな文字列を生成したりしてくっつけることで、自分のIPv6アドレスを一つ自動で生成します。
IPv4で言えば192.168.~のアドレスなので、こちらも手動で固定のIPv6アドレス、サブネットプレフィックスの長さ、デフォルトゲートウェイのアドレスを自由に設定可能(fe80::1111:1111:1111:1111。サブネットは64)ではあるものの、リンクローカルアドレスで固定してしまうと、DHCPがないため、インターネット用のグローバルIPを受け取れず、他のWebサイトを見れなくなってしまうため、通常は手動で設定はしません。
実の所、最初から割り当てられている「リンクローカルアドレス(fe80::)」自体は、パソコンのOSを再インストールしたり、ネットワークカード(LANアダプタ)を物理的に交換したりしない限り、変わらないので、それを素直に使うのがいいです。
ただし、リモートで同一ネットワーク内の別のPCにアクセスしたい時、IPv4であればIPアドレスを単純に打つだけでアクセスできましたが、IPv6の場合、リンクローカルIPv6アドレスを打つだけでは接続できません(※IPではなくPC名でアクセスするのであれば自動で接続してくれるため以下の操作は不要です)。これは、
- IPv4の場合: PCに有線LAN(192.168.1.x)とWi-Fi(192.168.2.x)が繋がっているとします。宛先が「192.168.1.50」なら、PCは「有線LANの出口から出せばいいな」と宛先IPだけで出口を自動判断できます(ネットワークが別々だからです)。
- IPv6(リンクローカル)の場合: リンクローカルアドレスは、有線LANでもWi-Fiでも仮想ネットワークアダプタでも、PCについている全ての出口が「fe80::」という全く同じネットワークとして扱われます。 そのため、「fe80::1111... に接続して」とだけ指示されても、PCは「有線とWi-Fi、どっちのドアからパケットを出せばいいの!?」と迷子になってしまいます。
そこで、「〇番のドア(インターフェース)を使って通信を出してね」とPCに教えてあげるために「ゾーンID(%数字)」を使い、fe80::1111:1111:1111:1111%4のように入力します。
ゾーンIDはipconfigのリンクローカルアドレスにも書いてあるので、それを入力しますが、注意したいのは接続先PCのゾーンIDではなく、接続元PCのゾーンIDを入力してリモートアクセスする必要があるということです。
IPv6アドレスと一時IPv6アドレス
IPv4ではパソコンにIPアドレスが1つ設定されるのが普通でしたが、IPv6の世界では「インターネットと通信するためのグローバルなアドレス」と「LAN内で通信するためのリンクローカルアドレス」の複数個が同時に1つのパソコンに設定されるのが当たり前になります。
Windows11でIPv6を使用するにチェックが入っていれば、ipconfig命令でIPv6のアドレス2つ、一次IPv6アドレスが1つ表示されます。
プロバイダからの割り当てられるIPv6アドレスのネットワークプレフィックス(前半64ビット)が決まっているので、後半64ビットをPCが自動作成します。
- IPv6アドレス・・・MACアドレス等の固有の情報から作成するため、パソコンが変わらない限り同じアドレスになりやすい。外から自分のパソコンにアクセスさせる場合(自宅サーバー等)に使用。プロバイダやルーター再起動でプレフィックスが変更されることはある。
- 一時IPv6アドレス・・・インターネットへ出る際の送信元として使用されるアドレス。固有の情報は使わず、OSが一定時間ごとにランダムに自動作成するアドレス
IPv6アドレスに対応するために必要なもの
- ① 対応プロバイダ(ISP):プロバイダ側でIPv6(IPoE方式など)に対応している必要があります。最近の光回線なら標準対応が多いですが、古い契約のままだと「IPv6オプション(無料)」の申し込みが別途必要なケースがあります。
- ② 対応ルーター:「IPv6パススルー」や「IPv6 IPoE(v6プラス、transixなど)」に対応したルーターが必要です。ここ5、6年以内に購入したルーターや、プロバイダからのレンタル品であれば、ほぼ100%対応しています。
- ③ 対応OS・端末(スマホやPC):Windowsなら10はもちろん、サポート終了した7や8の時代から標準対応しています。Mac、iPhone(iOS)、Androidスマホ、最近のテレビやゲーム機(PS5など)も、現在の通信機器はすべて標準でIPv6に対応しており、特に設定しなくても自動でSLAAC等を使いアドレスを生成します。
- ④ 対応Webサイト(サーバー側):Google(YouTube含む)、Netflix、Facebook、Instagramなどの世界的サービスは完全対応しています。しかし、日本の一般的な企業サイト、個人のブログ、一部のオンラインゲームなどは、まだまだIPv4にしか対応していないサイトが数多く存在します。XサーバーもIPv6非対応でした。
IPv6接続テスト
- あなたの IPv6 接続性をテストしましょう・・・総合スコアが「10/10」であれば完璧です。画面に「あなたのパブリックIPv6アドレスは...」と表示されていれば、「SLAACで生成された一時IPv6アドレス」を使って正しく通信できています。
- Google IPv6 テスト・・・「はい、あなたはIPv6を使用しています」と緑色の文字で表示されれば成功です。
コマンド
- ipconfig→IPアドレスを調べる
- ipconfig /displaydns→DNSキャッシュを調べる。以下例
- unagi-fe.amazon.com→通信先ドメインでこれはAmazonが管理しているサーバー<
- タイプ AAAA のレコードがありません→IPv6アドレスでのキャッシュはない。AAAAレコードがIPv6、AレコードがIPv4。通信先であるAmazonのサーバーが、IPv6用の住所(AAAAレコード)を持っていなかったから。
- レコード名 . . . . . . . : unagi-fe.amazon.com
- レコードの種類 . . . . . : 1→1はAレコード=IPv4アドレスを差す
- Time To Live . . . . . .: 10216→この情報を後何秒記憶しておくか
- データの長さ . . . . . . : 4→気にしてなくておk
- セクション . . . . . . . : 回答→気にしなくておk
- A (ホスト) レコード. . . : 18.246.94.194→実際のIPv4アドレス
- nslookup (アドレス)→提示したアドレスのIPアドレスとDNSサーバーのIPを返す。「実際に電話(通信)」をかける、つまり、ipconfig で表示されたDNSサーバーのIPアドレス宛てに、「実際に質問のデータを投げて、返事が来るかテストする」コマンド
- tracert -d (アドレス)→宛先までに通過するルーター(関所)を順番に表示します。
DNSレコードとDNSサーバー
DNSレコードとは、サーバー(エックスサーバー等)が管理している「権威(けんい)DNSサーバー(ns1.xserver.jp ~ ns5.xserver.jp)」の中に直接保存・参照されている行き先データの一覧のことです。
DNSレコードはあるドメイン(nkdesk.com等)に関係する住所録の原本であり、この表の値を編集すると、そのデータは「権威DNSサーバー」の中に直接書き込まれます。
AはAレコード(IPv4アドレス)、NSはネームサーバーのアドレス、TXTレコード(SRF設定など)はメールを受け取った相手(Gmailなど)が外部から読みに行く送信サーバーのリストで、実際にメールを持ってきたサーバーを照らし合わせて「なりすましではない」と確認するため、公開されていなければ迷惑メールとして弾かれてしまいます。
一方、DNSサーバーにはもう一つ、キャッシュDNSサーバーなるものがあります。
これはGoogleDNSやプロバイダから割り当てられるDNSサーバーのように、代わりに調べてくれる案内所的役割を持つDNSサーバーのことです。一度調べた答えは、一定時間(TTLの時間だけ)暗記(キャッシュ)します。
あるサイトへアクセスするときに、どのDNSサーバーを通っているかはnslookupコマンドで調べることができます。
例えば、kanri.nkdesk.comへのアクセスであれば、DNSサーバーはdns.google(IPアドレスは、2001:4860:4860::8888)を利用しており、Googleが代わりに権威DNSサーバーへkanri.nkdesk.comに対応するIPアドレスの情報を取りに行って、202.226.37.146のアドレスを返すという感じです。
直接ではなく代わりに取りに行っているので、「権限のない回答」となります。「権限がある回答」にするためには、権威DNSサーバーのアドレスを追記して、「nslookup kanri.nkdesk.com ns1.xserver.jp」のように記述する必要があります。
このアドレスはエックスサーバーのDNSレコード上で自分で指定したアドレスと一致していることがわかります。
エックスサーバーのDNSレコードでAAAAレコードとしてIPv6アドレスは指定していない(IPv4しか指定できない)ので、エックスサーバーにおいて返されるIPアドレスはIPv4アドレスのみと言うことになります。
例えnslookupが失敗してもipconfig /allでDNSサーバーは表示される点には注意です。
ipconfig /all の役割は「君のIPはこれ、DNSサーバーはあそこを使ってね」と渡された設定情報を画面に表示しているだけです。そのDNSサーバーが現在生きているか、死んでいるか(通信できるか)は一切確認していません。その確認にnslookupコマンドを使うわけです。
ここで、nslookupで取得した目的の場所のIPアドレスをブラウザに打ち込んでそのサイトを見ようとすると、無効なURLと表示されてしまって閲覧することが出来ないかと思います。
その理由は、その1つのIPアドレスはサーバーの住所(マンションの住所のようなもの)であり、中には無数のウェブサイトが同居しているためです。
マンション内の個別の部屋にアクセスすためには、ルーターのNATのように振り分ける必要がありますが、ここでその役割を担うのが、エックスサーバーの中で動いている「Webサーバーソフト(ApacheやNginxなど)」です。
NATがネットワーク層でIPアドレスとポート番号を見て振り分けているのに対して、Webサーバーはアプリケーション層でHTTPリクエストのHTTPヘッダー(Host: kanri.nkdesk.com というテキスト情報)を見てそのサイトの情報を返します。
そのため、ブラウザのURL欄にIPアドレスを直接入力してアクセスすることはできず、必ず「Host: kanri.nkdesk.com」という情報を含めるために、ドメイン名(URL)でアクセスする必要がある仕組みになっています。
4. データリンク層(第2層)
- NDIS(Network Driver Interface Specification)というインターフェースがここに属し、上位のプロトコル(TCP/IPやNetBEUI)と下位のハードウェア(NIC)をつなぎます。
- NIC(Network Interface Card)は、LANケーブルを接続する物理部品で、多くはイーサネット規格に準拠しています。
- NICには一意のMACアドレスが割り当てられており、これはイーサネット内でノード(機器)を識別するために使われます。イーサネットフレームのイーサネットヘッドの役割はノードの識別にあります。
- この層には、PPP(Point-to-Point Protocol)、イーサネット、PPPoEなどのプロトコルが属します。
5. 物理層(第1層)
- 実際の物理的な接続手段、いわゆる、電気信号や光信号など、ビット列を物理的に送受信する役割を担います。
- LANケーブル、電話線、モデム、ルーターなどのハードウェアがこの層に該当します。
- LANポート(NIC): パソコンなどの端末内でOSが作った「Ethernetフレーム(0と1のデータ)」を、LANケーブルに流せる電気信号に変換する出入り口。LANケーブルには4組の電気回路があり、1000BASE-TのLANケーブルでは1組あたり250Mbpsの電気信号を送受信し、合計1Gbpsのデータを送受信する。
- ONU / モデム(信号変換装置): 物理層での橋渡し役。ONUは「電気信号⇔光信号」、モデムは「電気信号⇔アナログ波/高周波信号」を変換します。ルータと一体型(NTTのホームゲートウェイなど)のものと、単なるブリッジ機能しか持たない単体機器(CATVモデムなど)があります。
- ルータ: 異なるネットワーク同士を繋ぐ(ルーティングする)機器。単体モデムに接続する場合は、別途ルータを用意する必要があります。以下の重要な付加機能も持ちます。
- DHCPサーバー(IPv4のみ): PC等にプライベートIP、DNS、デフォルトゲートウェイ等を自動で割り振る機能。リモート操作などを行う場合は、DHCPを使わず固定IPを手動で割り振る方が便利です。
- NAT / IPマスカレード(NAPT)(IPv4のみ):家の中専用の「プライベートIP」を、インターネットで使える「グローバルIP」に変換する技術。IPマスカレードは、IPアドレスに加えてポート番号も変換・管理します。
ポート番号: 通信先の「どのアプリか」を特定する番号(IPがマンションの住所、ポートが部屋番号)。Webサーバーは通常80(HTTP)や443(HTTPS)で固定されて待機しています。一方、送信元である自分のPCのポートは、OSが空いている番号(Windowsなら49152~65535など)を自動で適当に割り当てます。 - DNSサーバー(共通):ドメイン⇔IP。ルーターはDNSサーバーとしても機能します。自分自身が答えを知っているのであれば答えを教えますが、大体は中継役としてプロバイダやGoogleのDNSサーバーに命令を伝えます。WindowsのDNSサーバー設定画面で自動を選んでいれば自動的にルーターのアドレスが設定され、ルーターに8:8:8:8が設定されているならGooglePublicへ転送されます。もちろんWindows上で直接8:8:8:8を入れてもOKですがキャッシュを使うならルータを指定します。。
インターネット通信の流れ(URL入力から画面表示まで)
ブラウザに「https://www.yahoo.co.jp」と入力してからページが表示されるまで、背後では以下のプロセスが超高速で行われています。
1. ISP(プロバイダ)認証
ISP認証は、Wifiに接続して接続マークが出ている状態(通信できる状態)にするために必要な認証であり、ブラウザでURLを入力する前には既に終わっている。
ISPとの認証方法には以下の2つがある。
- PPPoE: IPパケットをPPPフレームで包み、さらにEthernetで包んで送信。ISPに届くとPPPヘッダが外されてインターネットへ出ます(要ID/パスワード認証)。
- IPoE (CATVなど): PPPを使わず、モデムのMACアドレス等で認証して直接IPパケットを流します。
2. 名前解決 (DNS)
ブラウザでURLを開くと、パソコンはDNSサーバーに「このサイトのIPv4アドレスとIPv6アドレス、両方教えて!」と同時に聞きます。
もし両方のアドレスが返ってきた場合、パソコンはIPv6の方へほんの少しだけ早く(数ミリ秒早く)接続リクエストを投げます。
IPv6での接続がスッと成功すれば、そのままIPv6で通信を始めます(IPv6優先)。
もしサイト側がIPv4しか持っていなかったり、IPv6の経路が混雑して返事が遅かったりした場合は、即座にIPv4での通信に切り替えます。
IPv4の場合
ISPにより通信が出来る状態で、ブラウザにURLを入力すると、まず宛先(ここではyahoo)のIPアドレスを調べるために、OSが「www.yahoo.co.jp のIPv4アドレスを知りたい=Aレコードの要求」というDNSクエリ(質問状)を作成する。
OSはこの質問状に「宛先ポート:53(DNS用で固定されているポート番号)」をセットし、TCP(3-way Handshake)ではなく認証不要のUDPでルータへ送り、家庭内ルータがDNSプロキシとして機能し、ルータに設定された外部DNS(Google Public DNSの8.8.8.8など)へデータを転送する。
この際、ルータ内のNAT(Network Address Translation)やIPマスカレードで、送り主IP=自分のPCのIPアドレス(例:192.168.1.10)のグローバルIPへの変換と、内部ポートと外部ポートの対応付けが行われ、NATテーブルが作成される(例:192.168.1.10:50000 → 203.x.x.x:62001等)。
グローバルIPアドレスはルーターが適当に決めるものではなく、プロバイダから「これを使いなさい」と割り当てられた一定期間固定のもので、ルーターが勝手にグローバルIPを生成することはない。ルーターがプロバイダに接続(PPPoEやIPoE)した際に貸し出される。ポート番号は先に話した通りOSにより自動で割り振られる。
GoogleDNSサーバーへの転送が成功すると、GoogleDNSサーバーからIPアドレスが書かれた返信を貰い、「https://www.yahoo.co.jp」が「35.x.x.x」などのIPアドレスに変換、さらにyahooのWebサーバーのポート番号を443(httpsは443)とすれば、https://www.yahoo.co.jp → 35.x.x.x:443等のように変換することができるようになる。
IPv6の場合
基本的な流れはIPv4とほぼ同じで、DNSクエリがAAAA(クワッドエー)レコードの要求に変わり、GoogleのIPv6対応DNSが2001:4860:4860::8888等に変わる。
また、ルータ内のNATやIPマスカレードは一切行われない。送り主IP=自分のPCが持つ「一時グローバルIPv6アドレス」のまま、変換されることなく直接インターネットへ出ていく(NATテーブルも作られません)。
GoogleDNSサーバーへの問い合わせが成功すると、GoogleDNSサーバーからIPv6アドレスが書かれた返信を貰い、「https://www.yahoo.co.jp」が「2404:6800:4004:823::2003」などの長大なIPv6アドレスに解決される。
3. 接続の確立
YahooのIPアドレスがわかったら、ブラウザはそのIPアドレス(Yahooのサーバー)に対して、TCPによる3-way Handshakeを開始し、接続を確立する。
接続の確立に使うデータには、名前解決の時に送ったデータと違って、今度は宛先IPと宛先ポートの情報も入っている。
3.Webページのデータ通信
通信が確立すると、PCの内部(OSのTCP/IPスタック)でデータが梱包されます。これをデータのカプセル化と言います。
データのカプセル化
- 第7層(アプリ): ブラウザが「ページをください」というHTTPリクエスト(0と1のデータ)を作成。
- 第4層(TCP): データを分割(セグメント化)し、順番番号やポート番号を付与。
- 第3層(IP): 送り主と宛先のIPアドレスを付与(パケット化)。この時、送り主IP/ポートはPC自身のプライベートなものを一旦設定します。
- 第2層(Ethernet): ARPという仕組みで「次の目的地(ルータ)」のMACアドレスを調べ、送信元と宛先のMACアドレスを付与(フレーム化)。IPアドレスを求める仕組みはDNS、MACアドレスを求める仕組みがARP。
IPアドレスがインターネット上の任意の住所なのに対して、MACアドレスはイーサネット上の機器の住所です。 ARP(機能はOSやNICが持っている)は自分の周り(同一ネットワーク内)の機器に、ARPリクエストという形で一斉に(ブロードキャスト)「このIPの人はMACアドレスを教えて!」と叫びます。 すると、該当する機器(この場合はルータ)だけが「それは私です。MACアドレスは AA:BB:CC... です」と返事(ユニキャスト)をします。 これによりMACアドレスをフレーム内に入れることができ、ルータを介してインターネットへ出ていくことができるようになります。
ARPキャッシュは特定の場所に一括管理されているのではなく、通信を行う「すべての機器」が個別に持っています。OS内のキャッシュは「arp -a」コマンドでIP:MACの対応一覧を見ることができます。
イーサネットヘッダーには宛先/送信元MACアドレスとタイプコードがつきます。タイプコードはIPのタイプを識別するコードで、IPv4は0x0800、IPv6は0x86DD等です。フレーム最後のFCSはエラーチェック用のコードです。 上の図は有線LAN(イーサネット)の標準的な形式であり、無線LAN(Wifi)のWifiフレームは少し異なり複雑です。Wifiの場合は宛先と送信元の2つのMACアドレスのほかに、経由するアクセスポイントのID等、最大4つのアドレス保持フィールドをを持っています。ただ、業務上はどちらもまとめてイーサネットと呼ぶことが普通です。
こうしてOSにより作成されたEthernetフレーム(0と1)は、PC内のNIC(Network interface card=LANカードとも呼ばれ、LANケーブルの差し込み口であるLANポートやデジタルを電気信号に変えるPHYチップを持つ機器)によって電気信号に変えられ、LANケーブルを介して家庭内ルータへと移動します。
0と1のデータについて補足すると、テキストファイルに「a」と保存した瞬間、コンピュータ内(SSDやメモリ)では、文字コード(例:ASCIIやUTF-8)というルールに従って数値に変換されています。例えば、アルファベットの「a」は、多くの場合「97」という番号が割り振られており、これは2進数で 01100001 です。
NICのPHYチップは、OSから渡された「0と1の羅列」を超高速で読み取り、それを*電圧の変化(アナログな波形)に変換してLANケーブルの銅線に流し込みます。単純に「電気が流れたら1、止まったら0」とするのではなく、エラーやノイズを防ぐために少し複雑な変換をします。
ルータでのNAT変換
LANケーブルを通ってきた電気信号が家庭用ルータに届くと、ルータが自身のNICを使って届いた電気の波を読み取り、一度「0と1のデジタルデータ」に戻します。
ルータがIPヘッダを読み、「あ、これはインターネットの外(Webサーバー)に行きたいデータだな」と判断した場合、第4層/第3層で一旦設定していた送り主のIP(プライベートIP)とポートを「グローバルIPとルータのポート」に書き換えられ、NATテーブルに記録されます(例: 192.168.1.10:50000 → 203.x.x.x:62001)。
ルータは、この書き換えたパケットを再び電気信号にして、次の機器(モデムやONU)に向けて送り出します。
モデムとONU
ルータから出た電気信号は、ONU(光回線終端装置)で光信号(モデムの場合は電気信号)に変換されます。
ONUの中には、半導体レーザー(発光ダイオードやレーザーダイオード)が内蔵されています。ONUはルーターから受け取った0と1のデータに合わせて、このレーザーを猛烈なスピードで点滅させます。
光のパルスとなったデータは、電柱などを伝ってご家庭から外へと伸びる「光ファイバーケーブル」の中を進み、一度ISPへと向かいます。ルータのDNSに記録してあるサーバーがGoogleDNSだったとしても一度はISPに向かいます。ISPは関所的な役割を担っています。
ISPから先は、無数のルータがルーティングテーブルを参照しながら、目的地(Yahooのサーバー)までバケツリレーでパケットを運びます。
サーバーでの処理と返信
目的地に届いた光/電気信号は再び0と1に戻され、カプセル化の逆手順でデータが取り出されます。
Webサーバーは要求に従い、HTMLや画像データ(これらも全て最初から0と1)をパケットに分割し、送信元(あなたの家のグローバルIP)へ返信します。
自宅到着とデータの組み立て
返信パケットが自宅ルータに届くと、ルータはNATテーブルを見て「これはPCの50000番ポート宛てだ」と判断し、PCへ転送します(行きと帰りで経路が違う「非対称ルーティング」になることもあります)。
PCに届いたパケットは、TCPの順番番号をもとに正しい順序に並べ直され(欠損があれば再送要求)、ブラウザがその0と1のデータを解釈して、ついに画面上にWebページが描画されます。
コメントor補足情報orご指摘あればをお願いします。
- << 前のページ
- 次のページ >>
