LPIC Level1 復習ラジオ 22:ネットワーク総復習
音声
目次
ネットワーク通信の全体像
ネットワーク通信は、一つの仕組みだけで成立しているわけではありません。名前、IPアドレス、MACアドレス、ポート番号、経路などが、それぞれ異なる役割を担当します。
| 情報 | 主な役割 | 例 |
|---|---|---|
| ホスト名・ドメイン名 | 人やアプリケーションが通信相手を名前で指定する | www.example.com |
| IPアドレス | IPネットワーク上の送信元と宛先を識別する | 192.0.2.10、2001:db8::10 |
| MACアドレス | 同じリンク上で次にフレームを渡す相手を識別する | 02:00:5e:10:00:01 |
| ポート番号 | 同じ端末上のどのアプリケーションへ渡すかを識別する | SSHの22、HTTPSの443など |
| ルーティング情報 | 宛先へ送るためのインターフェースや次のゲートウェイを選ぶ | default via 192.0.2.1 |
Webサイトへ接続する大まかな流れ
- DNSなどを使い、名前に対応するIPアドレスを調べる
- 宛先IPアドレスに対して、ルーティングテーブルから経路を選ぶ
- 同一ネットワークなら宛先端末、別ネットワークならゲートウェイを次の転送先にする
- IPv4ではARPを使い、次の転送先のMACアドレスを調べる
- Ethernetフレームの中へIPパケットを格納し、リンク上へ送信する
- TCPやUDPがポート番号を使い、目的のアプリケーションへデータを届ける
OSI参照モデル
OSI参照モデルは、ネットワーク通信の機能を七つの階層に分けて整理する考え方です。実際のプロトコルが必ず一つの層へ完全に収まるわけではありませんが、障害箇所を分類するときに役立ちます。
| 層 | 名称 | 主な役割 | 例 |
|---|---|---|---|
| 第7層 | アプリケーション層 | アプリケーションへ通信機能を提供する | HTTP、DNS、SSH、SMTP |
| 第6層 | プレゼンテーション層 | データ表現、文字コード、暗号化、圧縮などを扱う | データ形式、暗号化処理 |
| 第5層 | セッション層 | 通信の開始、維持、終了を管理する | セッション管理 |
| 第4層 | トランスポート層 | アプリケーション間の転送、ポート、信頼性を扱う | TCP、UDP |
| 第3層 | ネットワーク層 | 異なるネットワーク間の転送と経路選択を行う | IPv4、IPv6、ICMP、ルーティング |
| 第2層 | データリンク層 | 同じリンク上でフレームを転送する | Ethernet、MACアドレス、スイッチ |
| 第1層 | 物理層 | 電気信号、光、電波などでビットを運ぶ | ケーブル、コネクタ、無線信号 |
障害を層で整理する例
- リンクがDOWN、ケーブルが未接続:第1層または第2層
- 同じLAN内でARPが解決できない:主に第2層周辺
- IPアドレスやデフォルトルートが誤っている:第3層
- 相手まで到達するがTCP接続できない:第4層、ファイアウォール、待受状態など
- IPアドレスでは接続できるが名前では失敗する:第7層のDNSや名前解決設定
下の層で問題が起きると、上の層も利用できません。まずリンク、次にIP、経路、名前解決、アプリケーションという順に確認すると整理しやすくなります。
TCP/IPモデル
インターネットで使われるプロトコル群は、一般にTCP/IPモデルの四層で整理されます。
| TCP/IPモデル | 主な役割 | 主な例 | OSI層の目安 |
|---|---|---|---|
| アプリケーション層 | アプリケーション向けの通信機能 | HTTP、DNS、SSH、DHCP | 第5層から第7層 |
| トランスポート層 | アプリケーション間のデータ転送 | TCP、UDP | 第4層 |
| インターネット層 | IPアドレスによる配送と経路選択 | IPv4、IPv6、ICMP | 第3層 |
| リンク層 | 直接接続されたリンク上での転送 | Ethernet、無線LAN、ARP | 第1層と第2層 |
カプセル化
送信側では、上位層のデータへ各層のヘッダーなどを付加します。受信側では逆の順番で取り外し、アプリケーションへ渡します。
アプリケーションデータ
↓ TCP・UDPヘッダーを付加
セグメントまたはデータグラム
↓ IPヘッダーを付加
IPパケット
↓ Ethernetヘッダーなどを付加
フレーム
TCPとUDP
| 観点 | TCP | UDP |
|---|---|---|
| 接続 | 通信前に接続を確立する | 接続確立を行わない |
| 信頼性 | 順序制御、再送、確認応答などを行う | プロトコル自身では再送や順序保証を行わない |
| 単位 | バイトストリーム | データグラム |
| 代表例 | SSH、HTTP、HTTPS | DNSの一般的な問い合わせ、DHCPなど |
TCPの代表的な接続確立は、SYN、SYN-ACK、ACKの三段階です。ただし、TCP接続が確立できても、アプリケーションの認証や処理が成功するとは限りません。
ss -lntup
ss -tn
ssでは、待受ソケットやTCP接続の状態を確認できます。
IPアドレスとプレフィックス
IPアドレスは、IPネットワーク上のインターフェースを識別するために使われます。アドレスだけでなく、プレフィックス長と組み合わせてネットワーク範囲を判断します。
IPv4
IPv4アドレスは32ビットです。通常は、8ビットずつ十進数で区切って表します。
192.168.10.25/24
/24は、先頭24ビットがネットワーク部分であることを表します。この場合、一般的なネットワーク範囲は192.168.10.0/24です。
| 範囲・アドレス | 主な意味 |
|---|---|
10.0.0.0/8 | プライベートIPv4アドレス |
172.16.0.0/12 | プライベートIPv4アドレス |
192.168.0.0/16 | プライベートIPv4アドレス |
127.0.0.0/8 | ループバック。代表例は127.0.0.1 |
169.254.0.0/16 | IPv4リンクローカル |
0.0.0.0/0 | すべてのIPv4宛先に一致するデフォルト経路 |
IPv6
IPv6アドレスは128ビットで、16進数とコロンを使います。連続するゼロは、アドレス内で一度だけ::として省略できます。
2001:db8:10::25/64
::1
fe80::1
::1:IPv6のループバックfe80::/10:IPv6リンクローカル::/0:IPv6のデフォルト経路
確認コマンド
ip -br address
ip -4 address show
ip -6 address show
ip route get 198.51.100.10
MACアドレスと同一ネットワーク
MACアドレスは、Ethernetなどのリンク層で、同じリンク上の送信元と宛先を識別するために使われます。一般的なEthernetのMACアドレスは48ビットです。
02:00:5e:10:00:01
ルーターを越えるたびに、リンク層のフレームは作り直されます。そのため、送信元MACアドレスと宛先MACアドレスはホップごとに変わります。一方、通常のIP転送では、最終宛先IPアドレスは変わりません。
同じネットワークへ送る場合
- 宛先IPアドレスとプレフィックスから、相手が同一ネットワークだと判断する
- ARPで相手のIPv4アドレスに対応するMACアドレスを調べる
- 相手のMACアドレスを宛先にしてフレームを送る
別のネットワークへ送る場合
- ルーティングテーブルからゲートウェイを選ぶ
- ARPでゲートウェイのMACアドレスを調べる
- ゲートウェイのMACアドレスを宛先にしてフレームを送る
- IPパケットの宛先IPアドレスは、最終的な通信相手を示す
ip link show
ip -br link
ip neighbour show
MACアドレスは変更できる場合があるため、「機器そのものを絶対に証明する番号」と考えるのは不正確です。
ARP
ARPは、IPv4アドレスに対応するリンク層アドレス、一般的にはMACアドレスを調べるためのプロトコルです。
基本的な流れ
- 送信元が「このIPv4アドレスを持つ端末は誰か」というARP Requestをブロードキャストする
- 該当する端末が、自分のMACアドレスをARP Replyで返す
- 得られた対応関係を近隣キャッシュへ一時的に保存する
- 以後のフレーム送信で、そのMACアドレスを利用する
ip neighbour show
ip neigh show dev enp0s3
ip neigh show 192.0.2.1
| 状態 | 意味 |
|---|---|
REACHABLE | 最近到達できることを確認した |
STALE | 情報はあるが、最近の到達確認はない |
DELAY | 確認を少し待っている |
PROBE | 到達確認を試行している |
INCOMPLETE | MACアドレスをまだ取得できていない |
FAILED | 近隣解決に失敗した |
INCOMPLETEやFAILEDが続く場合は、相手が同じリンク上にいない、プレフィックスが誤っている、VLANが異なる、相手が停止している、リンク障害があるなどを確認します。
ARPで覚えるポイント
- ARPはIPv4で使われる
- ARPが解決する対象は、同じリンク上の相手または次のゲートウェイ
- 遠隔地の最終サーバーのMACアドレスを直接調べるわけではない
- IPv6ではARPではなくNeighbor Discoveryを使う
古いarpコマンドもありますが、現在はip neighbourによる確認が基本です。
DNS
DNSは、ドメイン名とIPアドレスなどの情報を対応付ける、階層型で分散された仕組みです。
名前解決の大まかな流れ
- アプリケーションが、ホスト名に対応するアドレスを必要とする
- システムの名前サービス設定やローカルキャッシュを確認する
- 必要なら設定されたDNSリゾルバーへ問い合わせる
- リゾルバーがキャッシュ、ルート、TLD、権威DNSサーバーなどを使って回答を得る
- 結果がアプリケーションへ返され、一定時間キャッシュされる
| レコード | 主な内容 |
|---|---|
| A | 名前に対応するIPv4アドレス |
| AAAA | 名前に対応するIPv6アドレス |
| CNAME | 別名から正規名への対応 |
| MX | メール配送先 |
| NS | ゾーンを担当する権威DNSサーバー |
| PTR | 逆引きで使う名前への対応 |
| SOA | ゾーンの管理情報 |
| TXT | 文字列情報 |
Linuxの名前解決に関係するファイル
| ファイル | 主な役割 |
|---|---|
/etc/nsswitch.conf | 名前サービスの参照元と順序を指定する |
/etc/hosts | IPアドレスとホスト名を静的に対応付ける |
/etc/resolv.conf | DNSリゾルバー、検索ドメイン、リゾルバーオプションなどを指定する |
grep '^hosts:' /etc/nsswitch.conf
cat /etc/hosts
cat /etc/resolv.conf
getent hosts example.com
dig example.com A
dig example.com AAAA
dig -x 192.0.2.10
getent hostsは、/etc/nsswitch.confに設定された名前サービスの順序を通して確認します。digはDNSへ問い合わせ、DNS応答を詳しく確認します。両者の結果が異なる場合は、/etc/hosts、NSS、ローカルキャッシュ、問い合わせ先DNSサーバーなどを分けて確認します。
代表的なDNS応答
NOERROR:問い合わせ処理は成功。ただし、指定タイプの回答が空の場合もあるNXDOMAIN:問い合わせた名前が存在しないSERVFAIL:DNSサーバーが処理を完了できなかったREFUSED:DNSサーバーが問い合わせを拒否した
DHCP
DHCPは、端末へIPアドレスや各種ネットワーク設定を自動的に配布するためのプロトコルです。
主な配布情報
- IPアドレス
- サブネットマスクまたはプレフィックス
- デフォルトゲートウェイ
- DNSサーバー
- ドメイン名や検索ドメイン
- リース時間
DHCPv4のDORA
| 段階 | メッセージ | 意味 |
|---|---|---|
| 1 | Discover | クライアントが利用可能なDHCPサーバーを探す |
| 2 | Offer | サーバーが利用可能なアドレスや設定を提案する |
| 3 | Request | クライアントが利用したい提案を要求する |
| 4 | ACK | サーバーが割り当てを承認する |
DHCPv4サーバーは通常UDP 67番、クライアントはUDP 68番を使います。クライアントがまだIPアドレスを持たない段階では、ブロードキャストが利用されます。
ブロードキャストは通常ルーターを越えないため、別ネットワーク上のDHCPサーバーを利用する場合はDHCPリレーが使われます。
Linuxでの確認
ip -br address
ip route
cat /etc/resolv.conf
journalctl -b | grep -i dhcp
NetworkManager、systemd-networkd、dhclientなど、DHCPを扱う仕組みは環境によって異なります。設定変更や再取得では、利用中のネットワーク管理方式を確認します。
取得できない場合の見方
- インターフェースがDOWNになっていないか
- ケーブル、無線、VLANなどリンク層が正しいか
- DHCPサーバーまたはリレーへ到達できる構成か
- アドレスプールが枯渇していないか
- 固定IP設定とDHCP設定が競合していないか
- ログにDiscover、Offer、Request、ACKのどこまで記録されているか
169.254.0.0/16のアドレスが付いている場合、DHCP取得に失敗し、リンクローカルアドレスが選ばれた可能性があります。ただし、実装や設定によって動作は異なるため、ログも確認します。
ルーティング
ルーティングは、宛先IPアドレスに対して、どのインターフェースから、どの次の転送先へ送るかを決める仕組みです。Linuxホストも、自分が送信するパケットについてルーティングテーブルを参照します。
ip route show
ip -4 route
ip -6 route
ip route get 203.0.113.10
代表的な表示
default via 192.0.2.1 dev enp0s3
192.0.2.0/24 dev enp0s3 proto kernel scope link src 192.0.2.10
198.51.100.0/24 via 192.0.2.254 dev enp0s3
| 表示 | 意味 |
|---|---|
default | より具体的な経路がない宛先に使う |
via | 次に渡すゲートウェイ |
dev | 送信に使うインターフェース |
src | 送信元として選ばれるアドレス |
metric | 同程度の経路候補の優先度判断に使われる値 |
最長プレフィックス一致
複数の経路が宛先に一致する場合、一般に最もプレフィックス長が長い、つまり最も具体的な経路が選ばれます。
0.0.0.0/0
198.51.0.0/16
198.51.100.0/24
宛先が198.51.100.25なら、三つの中では198.51.100.0/24が最も具体的です。
デフォルトルート
デフォルトルートがなくても、直接接続された同一ネットワーク内とは通信できる場合があります。しかし、より遠いネットワークへ出る経路がなければ、外部通信はできません。
ルーターとして転送する場合
sysctl net.ipv4.ip_forward
sysctl net.ipv6.conf.all.forwarding
Linuxをルーターとして使い、受信したパケットを別インターフェースへ転送する場合は、IP forwardingの設定やファイアウォール、戻り経路も確認します。
通信の流れと障害切り分け
ネットワーク障害では、手元から外側へ、下位層から上位層へ確認します。
基本的な確認順序
- インターフェースが存在し、リンクがUPか
- IPアドレスとプレフィックスが正しいか
- ルーティングテーブルとデフォルトルートが正しいか
- 特定宛先へ実際にどの経路が選ばれるか
- 同一ネットワークまたはゲートウェイへ到達できるか
- ARP・近隣キャッシュで次の相手を解決できるか
- 名前解決が成功するか
- 目的のTCP・UDPポートやアプリケーションが利用できるか
ip -br link
ip -br address
ip route
ip route get 198.51.100.10
ip neighbour show
ping -c 4 192.0.2.1
getent hosts example.com
dig example.com
ss -lntup
curl -v https://example.com/
症状から考える場所
| 症状 | 主な確認対象 |
|---|---|
| インターフェースがDOWN | リンク、ネットワーク管理設定、ケーブル、無線 |
| IPアドレスが付かない | DHCP、固定設定、リンク、VLAN、ログ |
| 同一ネットワークの相手へ届かない | プレフィックス、ARP、VLAN、相手の状態、重複IP |
| ゲートウェイへ届くが外部へ届かない | デフォルトルート、上流ルーター、戻り経路、ファイアウォール |
| IPアドレスでは成功し、名前では失敗 | DNS、/etc/hosts、/etc/nsswitch.conf、/etc/resolv.conf |
| pingは通るがSSHやWebへ接続できない | 待受ポート、サービス、ファイアウォール、アプリケーション設定 |
| 特定端末だけ通信が不安定 | 重複IP、ARPキャッシュ、リンク品質、端末固有設定 |
一連の通信を言葉で追う
curl https://example.com/を実行した場合、まず名前解決でIPアドレスを得ます。次に、カーネルがルーティングテーブルから経路を選びます。宛先が別ネットワークなら、ARPでゲートウェイのMACアドレスを調べます。その後、TCP接続を確立し、TLSやHTTPの処理へ進みます。
このため、エラーが出た位置によって確認対象が変わります。
- 名前を解決できない:DNSやNSS
- Network is unreachable:ルーティング
- No route to host:経路、近隣解決、ファイアウォールなど
- Connection refused:相手まで到達したが、ポートで待ち受けていない可能性
- Connection timed out:途中で破棄、応答なし、経路不備など
- TLSやHTTPのエラー:接続後の暗号化やアプリケーション層
30秒チェック
- OSI参照モデルで、IPとルーティングは主に第何層でしょうか。
- TCP/IPモデルの四つの層を、上から順に答えてください。
- 別ネットワーク上のサーバーへ送るとき、最初のフレームの宛先MACアドレスは通常誰のものでしょうか。
- ARPは、何と何の対応を調べるでしょうか。
- IPv6でARPの代わりに使われる仕組みは何でしょうか。
/etc/nsswitch.confと/etc/resolv.confは、名前解決で何が違うでしょうか。- DHCPv4のDORAを順番に答えてください。
- 複数の経路が一致するとき、一般にどの経路が優先されるでしょうか。
- デフォルトルートがなくても通信できる可能性がある範囲はどこでしょうか。
- IPアドレスでは接続でき、ホスト名では失敗する場合、最初に疑う仕組みは何でしょうか。
答えを表示
- 第3層のネットワーク層
- アプリケーション層、トランスポート層、インターネット層、リンク層
- 次の転送先であるデフォルトゲートウェイなどのMACアドレス
- IPv4アドレスとMACアドレスなどのリンク層アドレス
- Neighbor Discovery
nsswitch.confは名前サービスの参照元と順序、resolv.confはDNSリゾルバーなどの設定- Discover、Offer、Request、ACK
- 最長プレフィックス一致により、最も具体的な経路
- 直接接続された同一ネットワーク
- DNSを含む名前解決設定
要約
- OSI参照モデルは七層、TCP/IPモデルは一般に四層で通信機能を整理します。
- IPアドレスはIPネットワーク上の宛先、MACアドレスは同じリンク上の次の転送先を示します。
- 別ネットワークへ送るとき、フレームの宛先MACはゲートウェイ、IPパケットの宛先IPは最終相手です。
- ARPはIPv4アドレスとリンク層アドレスを対応付け、IPv6ではNeighbor Discoveryを使います。
- DNSは名前とアドレスなどを対応付けます。LinuxではNSS、
/etc/hosts、/etc/resolv.confも確認します。 getent hostsはシステムの名前サービス経由、digはDNS問い合わせの確認に向きます。- DHCPv4の基本的な取得順序はDiscover、Offer、Request、ACKです。
- ルーティングでは最長プレフィックス一致が基本で、デフォルトルートはより具体的な経路がない宛先に使われます。
ip route getで、特定宛先へ実際に選ばれる経路を確認できます。- 障害時は、リンク、IP、経路、ARP、DNS、ポート、アプリケーションの順に切り分けます。
参考資料
- ITU-T X.200:Open Systems Interconnection — Basic Reference Model
- RFC 1122:Requirements for Internet Hosts — Communication Layers
- RFC 1123:Requirements for Internet Hosts — Application and Support
- RFC 1918:Address Allocation for Private Internets
- RFC 8200:Internet Protocol, Version 6 Specification
- RFC 826:An Ethernet Address Resolution Protocol
- RFC 1034:Domain Names — Concepts and Facilities
- RFC 1035:Domain Names — Implementation and Specification
- RFC 2131:Dynamic Host Configuration Protocol
- RFC 2132:DHCP Options and BOOTP Vendor Extensions
- ip(8) — Linux manual page
- ip-address(8) — Linux manual page
- ip-link(8) — Linux manual page
- ip-neighbour(8) — Linux manual page
- ip-route(8) — Linux manual page
- hosts(5) — Linux manual page
- nsswitch.conf(5) — Linux manual page
- resolv.conf(5) — Linux manual page
- getent(1) — Linux manual page