ネットワークの全体像を一気に読む
OSI参照モデルからIPアドレス、サブネット、TCP/UDP、Webページが表示されるまでを一気通貫で確認できる参照ページです。コース(全19回)の外に置いているので、順番を気にせず好きなときに読めます。詳しい解説は各回にリンクしています。
なぜネットワークは「階層」に分けるのか
ネットワークとは、2台以上のコンピュータをつないでデータをやりとりする仕組みのことです。 ただし「つなぐ」と一口に言っても、やることは山ほどあります。 電気信号やWi-Fiの電波をどう表すか。同じ部屋の機器をどう見分けるか。 地球の裏側の相手までどう道を選ぶか。届かなかったデータをどう送り直すか——。
これを1つのプログラムで全部やろうとすると、 「無線に変えたらアプリも作り直し」という悲惨なことになります。 そこで役割ごとに仕事を分け、下の層は上の層に自分の中身を見せず、決められた形でだけ受け渡すように決めました。 これが階層化(レイヤリング)です。
階層化のうれしさは3つ
有線LANをWi-Fiに変えても、ブラウザやメールソフトは作り直しになりません。第1〜2層が変わっただけだからです。
「ケーブルは刺さっているか(L1)」「IPは振られているか(L3)」「名前は引けているか(L7)」と下から順に潰せます。
層の境目のルールさえ守れば、A社のルータとB社のスイッチとC社のPCが問題なく通信できます。
「なぜ分けるのか」をもう少し丁寧に、実際の切り分け例つきで読みたい場合は1-1 ネットワークとは・なぜ階層に分けるのかを見てください。
OSI参照モデル ― 通信を7階層に分けた共通言語
OSI参照モデル(Open Systems Interconnection)は、ISO(国際標準化機構)が定めた通信機能を7つの層に整理したモデルです。 実際の製品がこの通りに作られているわけではありませんが、 「それはL2の問題? L3の問題?」と話を通じさせるための共通語として、現場でも試験でも今なお使われます。
下の層ほど「物理に近い」層です。各層を押すと、右(スマホでは下)に詳しい説明が出ます。
0と1を、電気・光・電波といった物理的な信号に変換して送り出す層。
ケーブルの形やピンの並び、電圧、周波数といった「モノとしての決まりごと」を担当します。ここで扱うのは意味のないビットの列で、宛先という概念すらありません。LANケーブルが抜けている、断線している、という障害はすべてこの層の話です。
- PDU
- ビット
- 宛先
- なし
直接つながっている機器同士で、誤りなくデータを渡す層。
ビットの列を「フレーム」という単位にまとめ、MACアドレスで同じネットワーク内の相手を指定します。末尾のFCSで壊れていないかを検査し、壊れていれば捨てます。この層が見ているのは隣の機器までで、インターネットの向こう側は見えていません。
- PDU
- フレーム
- 宛先
- MACアドレス(48ビット)
ネットワークをまたいで、最終的な宛先まで届ける道を選ぶ層。
IPアドレスで世界中のホストを識別し、ルータがルーティングテーブルを見て次の転送先を決めます。ただしIPは「届けるよう努力する」だけで、到達も順序も保証しません(ベストエフォート)。大きすぎるデータの分割(フラグメンテーション)もこの層の仕事です。
- PDU
- パケット
- 宛先
- IPアドレス(IPv4は32ビット)
アプリケーション同士の通信を成立させ、必要なら確実性を担保する層。
ポート番号で「どのアプリ宛か」を指定します。TCPは3ウェイハンドシェイクで接続を確立し、順序の整理・再送・フロー制御まで面倒を見ます。UDPはそれらを省き、速さと軽さを取ります。第3層までは「機械に届ける」、第4層で初めて「アプリに届ける」になります。
- PDU
- セグメント(UDPはデータグラム)
- 宛先
- ポート番号(0〜65535)
通信の開始から終了までの「ひと続きのやりとり」を管理する層。
会話をいつ始めていつ終えるか、どちらが話す番か、途中で切れたらどこから再開するかを扱います。TCP/IPモデルではアプリケーション層に吸収されており、独立した層としては意識されることが少なめです。
- PDU
- データ
- 宛先
- セッションID など
データの表現形式をそろえ、送り手と受け手が同じ意味に解釈できるようにする層。
文字コード(UTF-8とShift_JISなど)、画像や音声の形式、圧縮、暗号化を担当します。送る側と受け取る側で「同じデータを同じ意味に解釈できる」状態を作るのが役目です。
- PDU
- データ
- 宛先
- なし
人やアプリが直接使うサービスそのものを提供する層。
Webの閲覧、メールの送受信、ファイル転送、名前解決など、目的ごとのプロトコルが並びます。ブラウザやメールソフトそのものではなく、それらが話す言葉の決まりがこの層です。
- PDU
- メッセージ
- 宛先
- URL / ドメイン名
TCP/IPモデル ― 実際のインターネットはこちら
OSIが「理解のための理論モデル」だとすると、TCP/IPは実際に動いている実装です。 いま私たちが使っているインターネットは、ほぼすべてTCP/IPで動いています。 こちらは4階層で、OSIの隣り合う層をまとめた形になっています。
| TCP/IP(4階層) | 代表的なプロトコル | データの呼び名 |
|---|---|---|
| アプリケーション層 | HTTP, HTTPS, DNS, DHCP, SSH | メッセージ |
| トランスポート層 | TCP, UDP | セグメント / データグラム |
| インターネット層 | IP, ICMP, ARP | パケット |
| ネットワーク | Ethernet, Wi-Fi (802.11) | フレーム → ビット |
カプセル化 ― データが層を降りるたび、封筒が増える
送信側ではデータが上の層から下の層へ渡され、各層で必要な情報(ヘッダ)が前に付け足されます。 これをカプセル化といいます。受信側では逆に、下から上へ渡しながらヘッダを1枚ずつはがしていきます(非カプセル化)。 下のボタンで、ブラウザが送った「GET /index.html」が電気信号になるまでを1段ずつ見てみましょう。
ブラウザが GET /index.html HTTP/1.1 というHTTPリクエストを作りました。この時点ではまだ「文章」でしかなく、どこへどう届くかの情報は何も付いていません。
TCPヘッダが付きます。送信元ポート52310 / 宛先ポート80、シーケンス番号、ACK番号などが入り、「相手のどのアプリ宛か」「何番目のデータか」が分かるようになりました。
IPヘッダが付きます。送信元 192.168.10.25 / 宛先 93.184.216.34 とTTLが入り、ルータはこれを見て世界中のどこへ転送するかを決められるようになりました。
Ethernetヘッダと、末尾に誤り検査用のFCSが付きます。宛先MACアドレスは最終目的地ではなく、次に渡す相手(自宅ルータ)のものです。ここが混乱しやすい点です。
完成したフレームが 0 と 1 の列になり、電気信号や電波としてケーブルへ流れ出ます。受信側はこの逆順に、ヘッダを1枚ずつはがしながら上の層へ渡していきます(非カプセル化)。
IPアドレス ― インターネット上の住所
IPアドレスは、ネットワーク上の機器を識別する番号です。IPv4では32ビット(0と1が32個)で、 人間が読みやすいよう8ビットずつ4つに区切り、10進数にして「.」でつないで書きます。 8ビットで表せるのは0〜255なので、192.168.10.25 のような形になります。
IPアドレスは「ネットワーク部」と「ホスト部」でできている
住所が「東京都千代田区」+「1-2-3」に分かれるように、IPアドレスもどのネットワークか(ネットワーク部)とその中の何番目の機器か(ホスト部)に分かれます。 どこまでがネットワーク部かを示すのがサブネットマスクで、255.255.255.0 や /24(CIDR表記)と書きます。 32ビットの区切り方やクラスの歴史まで詳しくは2-2 IPアドレスの構造 ― 32ビットをどう読むかで扱っています。
プライベートIPアドレスとNAT
IPv4は約43億個しかなく、世界中の機器に配るには足りません。そこで家庭や社内では 自由に使ってよいプライベートIPアドレス(RFC 1918)を使い、インターネットに出るときだけ ルータがグローバルIPアドレスに変換します。この変換がNAT / NAPTです。 自宅PCが 192.168.x.x なのはこのためです。
| 範囲 | CIDR | アドレス数 | 主な用途 |
|---|---|---|---|
| 10.0.0.0 〜 10.255.255.255 | /8 | 約1,678万 | 大規模な社内ネットワーク |
| 172.16.0.0 〜 172.31.255.255 | /12 | 約104万 | 中規模、クラウドのVPCなど |
| 192.168.0.0 〜 192.168.255.255 | /16 | 65,536 | 家庭用ルータの定番 |
NATとNAPTの違いや、外部から自宅サーバに接続できない理由(ポート開放)は2-4 プライベートIPアドレスとNATで扱っています。
特別な意味を持つアドレス
次の2つはプライベートIPアドレスとは別枠で予約された、特別な用途のアドレスです。
| 名称 | 範囲 | 意味 |
|---|---|---|
| ループバックアドレス | 127.0.0.0/8 | 自分自身を指すアドレス。ネットワークには出ていかない。 |
| APIPA(リンクローカル) | 169.254.0.0/16 | DHCPサーバが見つからないとき、OSが代わりに割り当てる仮のアドレス。 |
IPv6という続き
枯渇に対する本命の答えがIPv6です。128ビットに拡張され、 16進数を「:」で区切って 2001:0db8:85a3::8a2e:0370:7334 のように書きます。 連続する0のかたまりは :: で1回だけ省略できます(1つのアドレスで1回まで)。 表記の細かいルールは2-2 IPアドレスの構造の後半で扱っています。
サブネットを計算してみる
ネットワークを小さく区切ることをサブネット化といいます。 部署ごとに分けて無駄な通信を減らしたり、届く範囲を限定してセキュリティを上げたりするために行います。/24 を4つに分けると、こうなります。
計算のルールは3つだけ
- ホスト部のビット数= 32 − プレフィックス長。
- アドレス総数= 2(ホスト部のビット数)。
- 割り当て可能なホスト数= アドレス総数 − 2(先頭のネットワークアドレスと末尾のブロードキャストアドレスを除く)。
以下にIPアドレスとプレフィックス長を入れると、そのネットワークの範囲が出ます。数字を変えて試してください。
3ステップの詳しい手順、2進数でのAND演算、/31・/32という例外まで踏み込んだ解説は2-3 サブネットマスクの計算のやり方にあります。 計算だけを何度も試したい場合はサブネット計算機(単独ページ)も使えます。
TCPとUDP、ポート番号 ― 確実さを取るか、速さを取るか
IPは「とりあえず宛先に向けて投げる」だけで、届いたかどうかは保証しません(ベストエフォート)。 その上で確実に届ける責任を引き受けるのがTCP、保証を捨てて軽さを取るのがUDPです。 どちらを使うかはアプリケーションが選びます。
| 観点 | TCP | UDP |
|---|---|---|
| 接続 | あり(コネクション型) | なし(コネクションレス型) |
| 到達確認・再送 | ACKで確認し、届かなければ再送する | しない |
| 順序保証 | シーケンス番号で並べ直す | 保証しない |
| ヘッダサイズ | 20バイト〜 | 8バイト |
| 主な用途 | HTTP/HTTPS, メール, ファイル転送 | DNS, 音声通話, オンラインゲーム |
3ウェイハンドシェイク ― TCPが通信を始める3往復目までの合図
TCPはデータを送る前に、3回のやりとりでお互いの準備を確認します。 SYN(つなぎたい)、SYN+ACK(いいよ、こちらもつなぎたい)、ACK(了解)の3段階です。
シーケンス番号とACK番号が何を数えているか、ACKが返らないときの再送のしくみまでは4-2 3ウェイハンドシェイクと再送制御で扱っています。 「なぜこの2択になるのか」という判断基準から知りたい場合は4-1 TCPとUDPの違いを先に読んでください。
ポート番号 ― 「どのアプリ宛か」を示す部屋番号
IPアドレスが建物の住所なら、ポート番号は部屋番号です。 1台のサーバでWebもメールも動かせるのは、届いたデータをポート番号でアプリに振り分けているからです。 0〜65535の範囲があり、0〜1023はウェルノウンポートとして用途が決まっています。
| ポート | サービス | プロトコル |
|---|---|---|
| 22 | SSH | TCP |
| 53 | DNS | UDP / TCP |
| 67 / 68 | DHCP | UDP |
| 80 | HTTP | TCP |
| 443 | HTTPS | TCP |
3つの区分の詳細や、送信元ポートがどう決まるかは4-3 ポート番号とはで扱っています。
URLを入力してから画面が出るまで、層をまたいで何が起きているか
ここまでの層が全部登場します。自分のPC(192.168.10.25/24)からhttps://example.com/ を開く場面を例に、要点だけ順番に追いましょう。
- 1
名前をIPアドレスに変換するDNS / L7
まずDNSサーバに「example.com のIPは?」と尋ね、203.0.113.50 のような答えをもらいます。
- 2
相手が自分のネットワークの内か外かを判定するL3
自分のIPとサブネットマスクから、宛先が同一ネットワークかを計算します。外ならデフォルトゲートウェイに預けます。
- 3
次に渡す相手のMACアドレスを調べるARP / L2
ARPで尋ねるのは、最終的な宛先ではなく同じネットワーク内にいるゲートウェイのMACアドレスです。
- 4
カプセル化してルータを経由するL4〜L2
TCP→IP→Ethernetの順に包んで送り出します。宛先IPは変わりませんが、宛先MACはルータを1つ越えるたびに書き換わります。
- 5
TCPコネクションを確立するTCP / L4
サーバの443番ポートへ3ウェイハンドシェイク。ここで通信路が「開通」します。
- 6
TLSで暗号化の準備をするTLS / L6相当
サーバ証明書を検証して相手が本物か確かめ、共通鍵を安全に共有します。HTTPSの「S」はこの部分です。
- 7
HTTPリクエストを送り、レスポンスを受け取るHTTP / L7
GET / HTTP/1.1 を送ると、サーバは 200 OK とHTMLを返し、画面が表示されます。
ここで挙げた各段階のもっと詳しい説明(ARPとゲートウェイの関係、ルーティングの最長一致、NATでの書き換えなど)は3-1・3-2・3-3・2-4・5-3にあります。 全19回すべてがどう1本につながるかを、この例と同じ形でもっと丁寧にたどった総合回が5-4 Webページが表示されるまで(総合)です。
ネットワーク機器は、どの層で判断しているかで区別する
機器の違いは見た目ではなく「何を見て転送先を決めるか」で決まります。層と結びつけて覚えるのが近道です。
| 機器 | 層 | 見ているもの | ふるまい |
|---|---|---|---|
| ハブ(リピータ) | L1 | 何も見ない | 受け取った信号を、受信したポート以外の全ポートにそのまま流す。現在はほぼ使われない。 |
| スイッチ(L2スイッチ) | L2 | 宛先MACアドレス | MACアドレステーブルを見て、必要なポートにだけ転送する。LANの主役。 |
| ルータ | L3 | 宛先IPアドレス | 経路表を見て、別のネットワークへ中継する。ネットワークとネットワークの境目に立つ。 |
| L3スイッチ | L2–L3 | MACアドレスとIPアドレスの両方 | スイッチの速さを保ったまま、組織内のルーティングもこなす。 |
| ファイアウォール | L3–L4(L7も) | IPアドレス・ポート番号 | 通してよい通信かを判断して遮断する。アプリの中身まで見るものはWAFと呼ばれる。 |
MACアドレステーブルの学習のしかたや、コリジョンドメイン・ブロードキャストドメインの違いまで踏み込んだ解説は3-4 ハブ・スイッチ・ルータの違いで扱っています。
自分の手元で確かめるコマンドと、つながらないときの切り分け
読むより打つほうが早く身につきます。ターミナル(Windowsはコマンドプロンプト)で試してください。
$ ping -c 3 8.8.8.8 64 bytes from 8.8.8.8: icmp_seq=0 ttl=116 time=11.8 ms 64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=12.3 ms --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0.0% packet loss # Windows は -c 3 の代わりに -n 3 を使います。
$ ip addr # Linux $ ifconfig # macOS > ipconfig /all # Windows IPv4 アドレス . . . . . : 192.168.10.25 サブネット マスク . . . : 255.255.255.0 デフォルト ゲートウェイ : 192.168.10.1 # 169.254 で始まっていたらDHCPに失敗しています。
$ arp -a ? (192.168.10.1) at ac:de:48:aa:bb:cc [ether] on eth0 ? (192.168.10.30) at ac:de:48:dd:ee:ff [ether] on eth0
$ traceroute 8.8.8.8 1 192.168.10.1 1.2 ms ← 自宅ルータ 2 198.51.100.9 8.4 ms ← プロバイダ 3 * * * ← 応答を返さない機器 4 8.8.8.8 14.0 ms ← 目的地 # TTLを1, 2, 3…と増やしながら送り、各ルータの応答から経路を割り出しています。
$ nslookup example.com Server: 192.168.10.1 Name: example.com Address: 203.0.113.50 # pingが通らないとき、まずここが動くかを見ます。
今のPCがどの状態にあるかを、順番に確認していくとこうなります。
理解度チェック(全10問)
選んでから「採点する」を押すと、解説つきで答え合わせができます。
正解:第3層 ネットワーク層
IPアドレスとルーティングは第3層(ネットワーク層)の仕事です。第2層はMACアドレスで、同じネットワーク内までしか届きません。
正解:機器に割り当てられた48ビットの識別子で、同一ネットワーク内の宛先指定に使う
MACアドレスは48ビットで機器に固有、使うのは同じネットワーク内だけです。世界中に届けるのはIPアドレス(第3層)の役目です。
正解:192.168.0.0/16
192.168.0.0/16(RFC 1918)の範囲内です。127.0.0.0/8はプライベートIPアドレスではなく、自分自身を指すループバックアドレスの範囲です。
正解:192.168.10.0
/24 は上位24ビットがネットワーク部。残る第4オクテットを0にした192.168.10.0がネットワークアドレスです。255はブロードキャストアドレスになります。
正解:62台
32 − 26 = 6ビットがホスト部なので2⁶ = 64個。ネットワークアドレスとブロードキャストを除いて64 − 2 = 62台です。
正解:到達確認と再送
ポート番号もヘッダもIP上で動くことも両者に共通です。違いは、TCPがACKで到達を確認し、届かなければ再送する点にあります。
正解:SYN → SYN+ACK → ACK
クライアントのSYN、サーバのSYN+ACK、クライアントのACKで確立します。FINは切断時に使うフラグです。
正解:DNS
DNSです。DHCPはIPアドレスの自動配布、ARPはIPアドレスからMACアドレスを調べる仕組み、NATはプライベートIPとグローバルIPの変換です。
正解:DHCPサーバから応答がなく、OSが自動でアドレスを割り当てた(APIPA)
169.254.0.0/16はDHCPに失敗したときの自動設定アドレス(APIPA)です。まずケーブルやWi-Fi、ルータの状態を確認します。
正解:ルータ
スイッチはMACアドレス(第2層)を見て同一ネットワーク内で転送します。ルータは宛先IPアドレス(第3層)を見て、ネットワークをまたいで中継します。
用語集
- プロトコルprotocol
- 通信の手順と形式の取り決め。同じものを使う者同士でないと会話が成立しません。
- パケットpacket
- 分割して送られるデータの一塊。第3層でのデータの呼び名でもあります。
- LAN / WANLAN / WAN
- 建物内など狭い範囲のネットワークがLAN、それらを結ぶ広域のネットワークがWAN。
- デフォルトゲートウェイdefault gateway
- 宛先が自ネットワーク外だったときに転送を任せる出口。家庭ではルータがこれにあたります。
- DHCPdhcp
- IPアドレス・サブネットマスク・ゲートウェイ・DNSサーバを自動で配る仕組み。
- DNSdns
- ドメイン名とIPアドレスを対応づける分散データベース。インターネットの電話帳。
- ARParp
- IPアドレスからMACアドレスを問い合わせる、第2層のための補助プロトコル。
- ICMPicmp
- 到達確認やエラー通知を運ぶプロトコル。pingやtracerouteが使います。
- NAT / NAPTnat
- プライベートIPとグローバルIPを変換する機能。NAPTはポート番号も併用し、複数台で1つのグローバルIPを共有します。
- MTUmtu
- 1つのフレームで送れる最大データ量。Ethernetでは通常1500バイトで、超える分は分割されます。
- TLStls
- 通信を暗号化し、相手が本物かを証明書で確かめる仕組み。HTTPSの土台。
- 最長一致longest match
- ルーティングテーブルで複数の経路が当てはまるとき、プレフィックス長が最も長い行を選ぶルール。
各回でさらに詳しく
このページは要点だけをつないだ参照ページです。腰を据えて1つずつ、練習問題つきで学びたい場合はコース「はじめて学ぶ」(全19回)を最初から順番に読むことをおすすめします。 計算だけを何度も試したいときはサブネット計算機が単独ページで動きます。