ネットワークの全体像を一気に読む
OSI
なぜネットワークは「階層」に分けるのか
ネットワークとは、2台以上のコンピュータをつないでデータをやりとりする仕組みのことです。ただし、つなぐと一口に言っても、決めることは多くあります。
データを電気信号やWi-Fiの電波でどう表すか。同じ部屋の機器をどう見分けるか。地球の裏側の相手までの経路をどう選ぶか。届かなかったデータをどう再送するか。
これらを1つのプログラムで全部やろうとすると、有線を無線に変えただけでアプリも作り直すことになります。そこで、役割ごとに仕事を分けています。下の層は内部の仕組みを上の層に見せず、決められた形でだけデータを受け渡します。この分け方を階層化(レイヤリング)と呼びます。
階層化の利点は3つ
有線LANをWi-Fiに変えても、ブラウザやメールソフトを作り直す必要はありません。変わるのは第1〜2層だけだからです。
原因を下から順に絞り込めます。L1ではケーブルが挿さっているかを、L3ではIPアドレスが振られているかを、L7では名前を解決できているかを確かめます。
層の境目の決まりさえ守れば、A社のルータとB社のスイッチとC社のPCが問題なく通信できます。
分ける理由は、実際の切り分けの例とともに1-1 ネットワークとは ― なぜ層に分けるのかで丁寧に説明しています。
OSI参照モデル:通信を7階層に分けた共通言語
OSI参照モデル(Open Systems Interconnection)は、通信機能を7つの層に整理したモデルです。国際標準化機構(ISO)が定めました。実際の製品がこのとおりに作られているわけではありません。
それでも、「それはL2の問題? L3の問題?」と話を通じさせる共通語として、現場でも教科書でも今なお使われています。
下の層ほど物理に近い層です。各層を押すと、右に(スマホでは下に)詳しい説明が出ます。
0と1を、電気・光・電波といった物理的な信号にして送り出す層です。
ケーブルの形やピンの並び、電圧、周波数といった、モノとしての決まりごとを担当します。ここで扱うのは意味のないビットの列で、宛先という概念すらありません。LANケーブルが抜けている、断線している、という障害はすべてこの層の話です。
- PDU
- ビット
- 宛先
- なし
MACアドレスで指定した、直接つながった相手にフレームを届ける層です。
ビットの列を、フレームという単位にまとめます。届ける相手は、MACアドレスで指定した同じネットワーク内の相手です。この層が見ているのは隣の機器までで、インターネットの向こう側は見えていません。
末尾のFCSで壊れていないかを検査し、壊れていれば捨てます。Ethernetでは、そこで送り直しは行いません。
IPアドレスからMACアドレスを調べるプロトコルを、ARPと呼びます。ARPは、この層とすぐ上の第3層の間で働きます。どちらに分類するかは、資料によって分かれます。
- PDU
- フレーム
- 宛先
- MACアドレス(48ビット)
ネットワークをまたいで、最終的な宛先まで届ける道を選ぶ層です。
IPアドレスで、世界中のホストを識別します。ルータは、ルーティングテーブルを見て次の転送先を決めます。大きすぎるデータを分割するのも、この層の仕事です。この分割をフラグメンテーションと呼びます。
IPは、届けるよう努力するだけで、到達も順序も保証しません。このような届け方をベストエフォートと呼びます。
- PDU
- パケット
- 宛先
- IPアドレス(IPv4は32ビット)
アプリケーション同士の通信を成り立たせる層です。必要なら、届いたかの確認や再送まで行います。
ポート番号で、どのアプリ宛かを指定します。第3層までは機械に届ける段階で、第4層で初めてアプリに届ける段階になります。
TCPは、接続の前に3回のやり取りでお互いの準備を確認します。このやり取りを3ウェイハンドシェイクと呼びます。そのあとは、順序の整理・再送・フロー制御まで面倒を見ます。UDPはそれらを省き、速さと軽さを取ります。
- PDU
- セグメント(UDPはデータグラム)
- 宛先
- ポート番号(0〜65535)
通信の開始から終了までの、ひと続きのやりとりを管理する層です。
会話をいつ始めていつ終えるか、どちらが話す番か、途中で切れたらどこから再開するかを扱います。TCP/IPモデルでは、アプリケーション層に吸収されています。独立した層として意識されることは少なめです。
- PDU
- データ
- 宛先
- 層としてのアドレスはない(セッションIDなどで管理)
データの表現形式をそろえる層です。
文字コード、画像や音声の形式、圧縮、暗号化を担当します。文字コードには、UTF-8やShift_JISなどがあります。送る側と受け取る側で、同じデータを同じ意味に解釈できる状態を作るのが役目です。
- PDU
- データ
- 宛先
- なし
人やアプリが直接使うサービスそのものを提供する層です。
Webの閲覧・メールの送受信・ファイル転送・名前解決など、目的ごとのプロトコルが並びます。ブラウザやメールソフトそのものではなく、それらが話す言葉の決まりがこの層です。
- PDU
- メッセージ
- 宛先
- アドレスの仕組みはない(URL/ドメイン名を使うが、第7層独自のものではない)
TCP/IPモデル:実際のインターネットはこちら
OSIは、理解して会話するための参照モデルです。それに対して、TCP/IPはインターネットで実際に使われているプロトコル群です。今のインターネットは、ほぼすべてTCP/IPで動いています。それを整理したTCP/IPモデルは4階層で、OSIの隣り合う層をまとめた形になっています。
| TCP/IP | 代表的な | データの |
|---|---|---|
| アプリケーション層 | HTTP, HTTPS, DNS, DHCP, SSH | メッセージ |
| トランスポート層 | TCP, UDP | セグメント / データグラム |
| インターネット層 | IP, ICMP | パケット |
| ネットワーク | Ethernet, Wi-Fi (802.11) | フレーム → ビット |
カプセル化:ヘッダを足す層を通るたびに、包みが増える
送信側では、データが上の層から下の層へ渡されます。第4・3・2層を通るたびに、ヘッダとして必要な情報が付け足されます。これをカプセル化と呼びます。
受信側では逆に、データを下から上へ渡しながらヘッダを1枚ずつ外していきます。これを非カプセル化と呼びます。次の図では、ブラウザが送った「GET /index.html」が電気信号になるまでを1段ずつ確認できます。
ブラウザが、GET /index.html HTTP/1.1 というHTTPリクエストを作りました。この時点では、まだただの文字列です。どこへどう届けるかの情報は何も付いていません。
TCPヘッダが付きます。ヘッダには、送信元ポート52310 / 宛先ポート80やシーケンス番号、ACK番号などが入ります。これで、相手のどのアプリ宛てか、何番目のデータかが分かるようになります。
IPヘッダが付きます。ヘッダには、送信元 192.168.10.25 / 宛先 203.0.113.50 とTTLが入ります。ルータは、このヘッダを見てどこへ転送するかを決めます。
Ethernetヘッダが付きます。末尾には、誤りを検査するためのFCSも付きます。ヘッダの宛先MACアドレスは、最終目的地のものではありません。次に渡す相手である自宅ルータのものです。
完成したフレームは、0 と 1 の列になります。この列が、電気や光の信号、または電波として送り出されます。受信側は逆の順に、ヘッダを1枚ずつはがして上の層へ渡します。この作業を非カプセル化と呼びます。
ヘッダの中身を見ると、その層の仕事が分かります。TCPヘッダにはポート番号が、IPヘッダにはIPアドレスが、Ethernetヘッダには MACアドレスが入ります。
ポート番号はどのアプリ宛かを、IPアドレスはどのホスト(機器)宛かを、MACアドレスは隣のどの機器宛かを表します。層ごとに宛先の細かさが違うと考えると、混乱しません。
各層のヘッダサイズや、非カプセル化の手順は、カプセル化の記事に詳しく書いています。
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ビットの区切り方やクラスの歴史は、IPアドレスの構造の記事で詳しく説明しています。
プライベートIPアドレスとNAT
IPv4のアドレスは約43億個しかなく、世界中の機器に配るには足りません。そこで家庭や社内では、自由に使ってよいアドレスを使います。これがプライベートIPアドレスで、RFC 1918で定められています。
インターネットに出るときだけ、ルータがプライベートIPアドレスをグローバル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 | 約105万 | 中規模向け |
| 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です。IPv6のアドレスは128ビットに拡張されています。16進数を「:」で区切り、2001:db8:85a3::8a2e:370:7334 のように書きます。
0が連続する部分は :: で省略できますが、省略できるのは1つのアドレスで1回までです。表記の細かい決まりは、2-2 IPアドレスの構造 ― 32ビットをどう読むかの後半にまとめています。
サブネットを計算してみる
ネットワークを小さく区切ることをサブネット化と呼びます。目的の1つは、部署ごとに分けて無駄な通信を減らすことです。届く範囲を限定して、セキュリティを高める目的もあります。/24 を4つに分けると、次のようになります。
計算の決まりは3つだけ
- ホスト部のビット数= 32 − プレフィックス長。
- アドレス総数= 2(ホスト部のビット数)。
- 割り当て可能なホスト数= アドレス総数 − 2。先頭のネットワークアドレスと、末尾のブロードキャストアドレスを除きます。
次の計算機にIPアドレスとプレフィックス長を入力すると、そのネットワークの範囲を計算できます。
- CIDR表記
- 192.168.10.0/24
- サブネットマスク
- 255.255.255.0
- ネットワークアドレス
- 192.168.10.0
- ブロードキャスト
- 192.168.10.255
- 割り当て可能な範囲
- 192.168.10.1
〜 192.168.10.254 - ホスト数
- 254 台
- アドレス総数
- 256
- 入力したIPアドレスの種別
- プライベート
2進表記 11000000.10101000.00001010.00011001
太字の上位24ビットがネットワーク部で、残りがホスト部です。
2-3 サブネットマスクの計算のやり方では、3ステップの手順に加えて、2進数でのAND演算や、/31・/32という例外も説明しています。計算だけを何度も試したい場合は、サブネット計算機(単独ページ)も使えます。
TCPとUDP、ポート番号:届いたか確かめるか、速さを取るか
IPは宛先に向けて送り出すだけで、届いたかどうかは保証しません。このやり方をベストエフォートと呼びます。
届かなかったことを送信側が把握できるようにするのがTCPで、届いていなければ再送します。その確認を省いて軽さを優先するのがUDPです。どちらを使うかは、アプリケーションが選びます。
| 観点 | TCP | UDP |
|---|---|---|
| 接続 | あり(コネクション型) | なし(コネクションレス型) |
| 到達確認・再送 | ACKで確認し、届かなければ再送する | しない |
| 順序保証 | シーケンス番号で並べ直す | 保証しない |
| ヘッダサイズ | 20バイト〜 | 8バイト |
| 主な用途 | HTTP/HTTPS, メール, ファイル転送 | DNS, 音声通話, オンラインゲーム |
3ウェイハンドシェイク:TCPが通信を始める3回のやりとり
TCPはデータを送る前に、片道3回・往復1.5回のやりとりでお互いの準備を確認します。やりとりは、SYN、SYN+ACK、ACKの3段階です。
まず、SYNで接続を求めます。相手はSYN+ACKで応じると同時に、自分からも接続を求めます。最後のACKで了解を返します。SYNを送ってからSYN+ACKが返るまでの1往復が終わるまで、データは送り始められません。
シーケンス番号とACK番号が何を数えているかは、4-2 TCPの3ウェイハンドシェイクと再送制御で説明しています。ACKが返らないときの再送の仕組みも、そこで説明しています。TCPとUDPの選び方を知りたい場合は、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 ポート番号とは ― IPアドレスとの役割分担にまとめています。
URLを入力してから画面が出るまで、層をまたいで何が起きているか
ここまでの層がすべて登場します。自分のPCから https://example.com/ を開く場面を例に、要点だけを順番に追います。PCのアドレスは 192.168.10.25/24 とします。
- 1
名前を
IPアドレスに 変換する DNS / L7 まず、DNSサーバに「example.com のIPアドレスは?」と問い合わせます。203.0.113.50 のような答えが返ってきます。
このDNSへの問い合わせ自体も、1つの通信です。そのため、これを送り出す前に、次の手順2(宛先が同じネットワーク内かの判定)と手順3(ARP)が済んでいます。
- 2
相手が
自分の ネットワークの 内か 外かを 判定する L3 自分のIPアドレスとサブネットマスクから、宛先が同じネットワークかを計算します。外なら、デフォルトゲートウェイに任せます。
- 3
次に
渡す相手の MACアドレスを 調べる ARP / L2〜L3 ARPで調べるのは、最終的な宛先ではなく、同じネットワーク内にあるゲートウェイのMACアドレスです。
- 4
TCPコネクションを
確立する TCP / L4〜L2 最初に送り出されるのはSYNパケットです。SYNは、TCP、IP、Ethernetの順にヘッダで包まれます(カプセル化)。包まれたSYNは、手順2と3で調べたゲートウェイを経由して、ネットワークの外へ送られます。
途中で宛先IPは変わりません。一方、宛先MACはルータを1つ越えるたびに書き換わります。
サーバの443番ポートからSYN+ACKが返り、PCがACKを送ると、3ウェイハンドシェイクが完了します。
- 5
TLSで
暗号化の 準備を する TLS / L6相当 まず、サーバ証明書を検証して相手が本物かを確かめます。次に、暗号に使う共通鍵を安全に共有します。HTTPSの「S」はこの部分です。
- 6
HTTPリクエストを
送り、 レスポンスを 受け取る HTTP / L7 PCが GET / HTTP/1.1 を送ります。サーバは 200 OK とHTMLを返します。これで画面が表示されます。
ページが開かないときに、ping 8.8.8.8 は通るのに、ping example.com では「名前が見つからない」というエラーが出るとします。この場合、原因はDNSによる名前解決に絞り込めます。
ただし、相手がpingに使うICMPに応答しない設定のこともあるので、応答が返らないだけでは断定できません。nslookup example.com で、名前を解決できるかを直接確かめるのが確実です。
ARPとゲートウェイの関係、ルーティングの最長一致、NATでの書き換えなど、各段階は次の記事で詳しく説明しています。
- 3-1 デフォルトゲートウェイとは
- 3-2 ARPとは ― IPアドレスからMACアドレスを知る仕組み
- 3-3 ルーティングとは ― ルータの道の選び方
- 2-4 プライベートIPアドレスとNATのしくみ
- 5-3 HTTPとHTTPS(TLS) ― 何が違うのか
全19本の記事の内容がどうつながるかは、5-4 Webページが表示されるまでの流れで、この例と同じ形で詳しく説明しています。
ネットワーク機器は、どの層で判断しているかで区別する
機器の違いは見た目ではなく、何を見て転送先を決めるかで決まります。層と結びつけて覚えるのが近道です。
| 機器 | 層 | 見ている | ふる |
|---|---|---|---|
| ハブ(リピータ) | L1 | 何も見ない | 受け取った信号を、受信したポート以外の全ポートにそのまま流します。現在はほぼ使われません。家庭でハブと呼ばれる製品は、実際にはほとんどがL2のスイッチングハブです。 |
| スイッチ(L2スイッチ) | L2 | 宛先MACアドレス | MACアドレステーブルを見て、必要なポートにだけ転送します。LANの中心となる機器です。 |
| ルータ | L3 | 宛先IPアドレス | 経路表を見て、別のネットワークへ中継します。ネットワークとネットワークの境目に置きます。 |
| L3スイッチ | L2–L3 | MACアドレスとIPアドレスの両方 | スイッチの速さを保ったまま、組織内のルーティングもこなします。 |
| ファイアウォール | L3–L4(L7も) | IPアドレス・ポート番号 | 通してよい通信かを判断し、通さない通信は遮断します。Webアプリへの攻撃を防ぐ専用のものをWAFと呼びます。 |
スイッチがMACアドレステーブルを学習するしかたは、ハブ・スイッチ・ルータの記事で説明しています。コリジョンドメインとブロードキャストドメインの違いも、そこで解説しています。ファイアウォールが通信を許可・遮断する仕組みは、ファイアウォールの記事で詳しく解説しています。
自分の手元で確かめるコマンドと、つながらないときの切り分け
読むより実際に入力するほうが早く身につきます。ターミナルで試してください。Windowsでは、コマンドプロンプトを使います。
$ ping -c 3 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: icmp_seq=0 ttl=116 time=11.822 ms 64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=12.347 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=11.905 ms --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 11.822/12.025/12.347/0.230 ms # 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の状態を順番に確認していく流れは、次のとおりです。
デフォルトゲートウェイやルーティングテーブルをコマンドで確認する手順は、次の記事で説明しています。
pingとtracerouteの出力は、ping・tracerouteの使い方と見方で1行ずつ詳しく確認できます。
理解度チェック(全10問)
正解:第3層 ネットワーク層
IPアドレスと
正解:機器に
MACアドレスは
正解:192.168.0.0/16
192.168.0.0/16の
正解:192.168.10.0
/24 は、
正解:62台
ホスト部は 32 − 26 = 6ビットなので、
正解:到達確認と
ポート番号を
正解:SYN → SYN+ACK → ACK
クライアントが
正解:DNS
正解は
正解:DHCPサーバから
169.254.0.0/16は、
正解:ルータ
スイッチは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
用語集
- プロトコルprotocol
- 通信の手順と形式の取り決めです。同じプロトコルを使う機器の間でないと、通信は成立しません。
- パケットpacket
- 分割して送られるデータのひとかたまりです。第3層でのデータの呼び名でもあります。
- LAN / WANLAN / WAN
- 建物内など狭い範囲のネットワークがLANで、それらを結ぶ広域のネットワークがWANです。
- デフォルトゲートウェイdefault gateway
- 宛先が自分のネットワークの外のときに、転送を任せる出口です。家庭では、ルータがこれにあたります。
- DHCPdhcp
- IPアドレス、サブネットマスク、ゲートウェイ、DNSサーバを自動で配る仕組みです。
- DNSdns
- ドメイン名とIPアドレスを対応づける分散データベースです。世界中に分散した住所録のようなものです。
- ARParp
- IPアドレスからMACアドレスを問い合わせるプロトコルで、第2層と第3層の間で働きます。どちらに分類するかは資料によって異なります。
- ICMPicmp
- 到達確認やエラー通知を運ぶプロトコルです。pingやtracerouteが使います。
- NAT / NAPTnat
- プライベートIPとグローバルIPを変換する機能です。NAPTはポート番号も変換するので、複数台で1つのグローバルIPを共有できます。
- MTUmtu
- 1つのフレームで送れる最大データ量です。Ethernetでは通常1500バイトです。超えた場合、IPv4ではDFビット次第で分割されるか、破棄されてICMPで通知されます。IPv6では、途中のルータは分割しません。
- TLStls
- 通信を暗号化し、相手が本物かを証明書で確かめる仕組みです。HTTPSはこの仕組みの上で動きます。
- 最長一致longest match
- ルーティングテーブルで複数の経路が当てはまるときの決まりで、プレフィックス長が最も長い行を選びます。
各記事でさらに詳しく
このページは要点だけをつないだ参照ページです。練習問題を解きながら1つずつ学びたい場合は、ネットワークの入門コース(全19本)を最初から順番に読むことをおすすめします。計算だけを何度も試したいときは、サブネット計算機のページを使えます。
本でも学びたいときは、ネットワークの本・参考書の選び方・目的別の勉強の順番で、目的に合う本と、各記事と範囲が重なる章を確かめられます。
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
