インターネットプロトコルの基礎 - TCP/IP・ポート・IPv4/IPv6【LPIC-1 109.1】
この記事で達成できること
- TCP/IP 4階層モデルの各層と役割を説明できる
- IPv4 アドレスをネットワーク部とホスト部に分け、サブネットマスク/CIDR で表せる
- プライベートアドレス範囲とブロードキャストアドレスを判別できる
- IPv6 のコロン16進表記と省略規則を正しく適用できる
- ウェルノウンポートと
/etc/servicesの対応を確認できる - TCP(コネクション型)と UDP(コネクションレス型)を使い分けられる
LPIC-1 主題 109.1「インターネットプロトコルの基礎」の中核。アドレス計算とプロトコルの役割分担を押さえれば、ネットワーク設定やトラブル対応の土台が固まる。
TCP/IP はどんな階層で動くのか
TCP/IP は 4 つの階層に役割を分担する。下位層が上位層を運ぶ「カプセル化」の構造で、各層は隣接層とだけやり取りする。
| 層 | 名称 | 役割 | 代表プロトコル |
|---|---|---|---|
| 4 | アプリケーション層 | アプリ間のデータ表現・やり取り | HTTP, SSH, DNS, SMTP, FTP, DHCP |
| 3 | トランスポート層 | エンドツーエンドの通信制御 | TCP, UDP |
| 2 | インターネット層 | ホスト間のルーティング・アドレッシング | IP, ICMP |
| 1 | リンク層(ネットワークインターフェース層) | 同一物理ネットワーク内の伝送 | Ethernet, ARP |
OSI 参照モデルの 7 階層と対比されることが多いが、LPIC-1 では TCP/IP の 4 階層モデルで役割を理解しておけば十分。トランスポート層の「ポート番号」とインターネット層の「IP アドレス」を組み合わせて通信相手を特定する点が要となる。
RFC 1122(Requirements for Internet Hosts)はこのモデルをリンク層/インターネット層/トランスポート層/アプリケーション層として定義している。層の境界はポート番号(トランスポート層)と IP アドレス(インターネット層)で分かれると覚えるとよい。
IPv4 アドレスはどう読むのか
IPv4 アドレスは 32 ビットを 8 ビットずつ 4 つに区切り、各 8 ビットを 10 進数で表記する(ドット10進表記)。各オクテットは 0〜255 の範囲を取る。
アドレスは「ネットワーク部」と「ホスト部」に分かれ、その境界をサブネットマスクが示す。
ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
inet6 fe80::5054:ff:fe12:3456/64 scope link
inet 192.168.1.10/24 の /24 がサブネットマスク長(CIDR 表記)。/24 は先頭 24 ビットがネットワーク部、残り 8 ビットがホスト部であることを意味する。brd 192.168.1.255 がブロードキャストアドレス。
サブネットマスクと CIDR の対応
サブネットマスクは「ネットワーク部のビットを 1、ホスト部のビットを 0」にした 32 ビット値。CIDR 表記(/n)は先頭から連続する 1 の個数を示す。
| CIDR | サブネットマスク | ホストビット | 利用可能ホスト数 |
|---|---|---|---|
/8 |
255.0.0.0 | 24 | 16,777,214 |
/16 |
255.255.0.0 | 16 | 65,534 |
/24 |
255.255.255.0 | 8 | 254 |
/30 |
255.255.255.252 | 2 | 2 |
利用可能ホスト数は「2 のホストビット乗 − 2」。差し引く 2 つは、ホスト部が全 0 の「ネットワークアドレス」と全 1 の「ブロードキャストアドレス」で、いずれも個別ホストには割り当てられない。
プライベートアドレス範囲
インターネット上で重複しないグローバルアドレスとは別に、組織内部で自由に使える範囲が RFC 1918 で予約されている。
| 範囲 | CIDR | クラス相当 |
|---|---|---|
10.0.0.0 〜 10.255.255.255 |
10.0.0.0/8 |
クラス A |
172.16.0.0 〜 172.31.255.255 |
172.16.0.0/12 |
クラス B |
192.168.0.0 〜 192.168.255.255 |
192.168.0.0/16 |
クラス C |
172.16.0.0/12 は 172.16 〜 172.31 までで、172.32 は含まない点に注意。試験ではこの範囲の境界がよく問われる。
127.0.0.0/8(特に 127.0.0.1)は IPv4 のループバックアドレスで、自ホストを指す。プライベートアドレスとは別枠の予約範囲。
IPv6 の表記と省略規則
IPv6 アドレスは 128 ビット。16 ビットずつ 8 つのブロックに区切り、各ブロックをコロンで区切った 16 進数で表記する(コロン16進表記)。
2001:0db8:0000:0000:0000:ff00:0042:8329
長くなるため、2 つの省略規則がある。
- 各ブロック先頭の 0 は省略できる(
0db8→db8、0000→0) - 連続する 0 のブロックは
::で 1 回だけ省略できる
上記アドレスは次のように短縮される。
2001:db8::ff00:42:8329
:: は 1 つのアドレス内で 1 回しか使えない。2001:db8::1::1 のように 2 回使うと、省略されたブロック数が一意に決まらず無効なアドレスになる。これは試験頻出の誤りパターン。
主要な IPv6 アドレス
| アドレス/範囲 | 意味 |
|---|---|
::1 |
ループバックアドレス(IPv4 の 127.0.0.1 相当) |
:: |
未指定アドレス(全ビット 0) |
fe80::/10 |
リンクローカルアドレス(同一リンク内でのみ有効) |
ff00::/8 |
マルチキャストアドレス |
fe80:: で始まるリンクローカルアドレスは、ルーターを越えず同一セグメント内でのみ使える。ip addr の出力で scope link と表示されるのがこれにあたる。
ポート番号と /etc/services の関係
IP アドレスがホストを特定するのに対し、ポート番号はホスト上のどのアプリケーションかを特定する 16 ビット(0〜65535)の番号。用途で 3 区分される。
| 区分 | 範囲 | 用途 |
|---|---|---|
| ウェルノウンポート | 0〜1023 | 主要サービス(root 権限が必要) |
| 登録済みポート | 1024〜49151 | IANA に登録されたアプリ |
| 動的/プライベートポート | 49152〜65535 | クライアント側の一時的な接続元 |
サービス名とポート番号の対応は /etc/services に定義されている。
grep -E '^(ssh|http|https|domain|smtp|ftp) ' /etc/services
ftp 21/tcp ssh 22/tcp smtp 25/tcp domain 53/tcp domain 53/udp http 80/tcp https 443/tcp
各行は「サービス名 ポート番号/プロトコル」の形式。domain(DNS)のように TCP と UDP の両方を持つサービスもある。
主要プロトコルとポート番号
| プロトコル | ポート | トランスポート | 役割 |
|---|---|---|---|
| FTP | 21(制御)/ 20(データ) | TCP | ファイル転送 |
| SSH | 22 | TCP | 暗号化されたリモートログイン |
| SMTP | 25 | TCP | メール送信 |
| DNS | 53 | UDP / TCP | 名前解決 |
| DHCP | 67(サーバ)/ 68(クライアント) | UDP | IP アドレス自動割り当て |
| HTTP | 80 | TCP | Web 通信 |
| HTTPS | 443 | TCP | 暗号化された Web 通信 |
DNS は通常 UDP 53 を使い、応答サイズが大きい場合(ゾーン転送など)に TCP 53 を使う。この「DNS は UDP と TCP の両方」という点は頻出。
TCP と UDP はどう違うのか
トランスポート層の TCP と UDP は、信頼性と速度のトレードオフで使い分ける。
| 観点 | TCP | UDP |
|---|---|---|
| 接続 | コネクション型 | コネクションレス型 |
| 信頼性 | 再送・順序保証あり | 保証なし |
| オーバーヘッド | 大きい | 小さい |
| 用途 | HTTP, SSH, SMTP, FTP | DNS, DHCP, ストリーミング |
TCP は通信開始時に「3 ウェイハンドシェイク」で接続を確立する。
- クライアント → サーバ:
SYN(接続要求) - サーバ → クライアント:
SYN/ACK(要求受理+応答) - クライアント → サーバ:
ACK(確認)
この 3 段階を経てからデータ転送が始まるため、パケットの到達と順序が保証される。一方 UDP はハンドシェイクを行わず、いきなりデータを送る。確認応答がない分、低遅延だがパケットロスは検知しない。
現在の待ち受けポートは ss で確認できる。
ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
-t が TCP、-l が待ち受け(LISTEN)状態、-n が数値表示、-p がプロセス表示。UDP を見るには -t を -u に変える。
ICMP(Internet Control Message Protocol)はインターネット層のプロトコルで、TCP/UDP のようなポート番号を持たない。ping の到達確認や traceroute の経路調査で使われるエラー・制御メッセージ用のプロトコル。
よくあるミスと対処
ミス1: サブネットの利用可能ホスト数を「2 のホストビット乗」と数える
ネットワークアドレス(全 0)とブロードキャストアドレス(全 1)の 2 つを引き忘れるパターン。/24 なら 256 ではなく 254 が正解。「2 のホストビット乗 − 2」を必ず適用する。
ミス2: TCP と UDP の役割を取り違える
「信頼性が必要 = TCP、速度・軽量が必要 = UDP」が原則。DNS の通常クエリや DHCP が UDP である点を、HTTP/SSH(TCP)と混同しやすい。
ミス3: IPv6 で :: を 2 回使う
:: は 1 アドレスにつき 1 回まで。複数の 0 ブロックがあっても、省略は 1 か所に限られる。残りは 0 を明記する。
ミス4: プライベートアドレス範囲の境界を誤る
特に 172.16.0.0/12 は 172.16 〜 172.31 の範囲。172.32.x.x をプライベートと誤認しないこと。
ミス5: ループバックを忘れる
IPv4 は 127.0.0.1、IPv6 は ::1。両方が「自ホスト」を指す予約アドレスである点を押さえる。
トラブルシューティング
症状: ip addr で IPv4 アドレスが表示されない
原因: インターフェースが down している、または DHCP からアドレスを取得できていない
確認:
ip addr show
対処: インターフェース状態が DOWN なら ip link set eth0 up で起動。DHCP 利用環境ならクライアントの再取得を行う。
症状: サービス名からポート番号が引けない
原因: /etc/services に該当サービス名のエントリが無い、または綴りが違う
確認:
grep -i ssh /etc/services
対処: 正しいサービス名で検索する。独自サービスは /etc/services に追記すれば名前解決できるが、ポート番号での指定でも通信は可能。
症状: ループバック通信はできるが外部に到達しない
原因: ループバック(127.0.0.1 / ::1)は自ホスト内で完結するため、外部疎通とは無関係
確認:
ip addr show lo ping -c1 192.168.1.1
対処: 外部疎通はループバックではなく、eth0 等の物理インターフェースのアドレスとデフォルトゲートウェイで確認する。
作業完了チェックリスト
- [ ] TCP/IP 4階層の各層と代表プロトコルを言える
- [ ]
/24等の CIDR からホスト部ビットと利用可能ホスト数を計算した - [ ] プライベートアドレス 3 範囲の境界を確認した
- [ ] IPv6 の
::省略を 1 回だけ適用した - [ ]
/etc/servicesで主要サービスのポートを確認した - [ ]
ssで TCP / UDP の待ち受けポートを確認した
まとめ
| 項目 | 要点 |
|---|---|
| 階層モデル | アプリ / トランスポート / インターネット / リンクの 4 層 |
| IPv4 | 32 ビット・ドット10進、CIDR でネットワーク部を表す |
| ホスト数 | 2 のホストビット乗 − 2 |
| プライベート | 10/8・172.16/12・192.168/16 |
| IPv6 | 128 ビット・コロン16進、:: は 1 回のみ |
| ポート | ウェルノウン 0-1023、/etc/services で確認 |
| TCP / UDP | コネクション型(信頼性)vs コネクションレス型(軽量) |
インターネットプロトコルの基礎は、ネットワーク設定・DNS・トラブルシューティングすべての前提となる。アドレス計算とプロトコルの役割分担を固めたら、実際の設定とトラブル対応へ進もう。