インターネットプロトコルの基礎 - TCP/IP・ポート・IPv4/IPv6【LPIC-1 109.1】

インターネットプロトコルの基礎 - 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.010.255.255.255 10.0.0.0/8 クラス A
172.16.0.0172.31.255.255 172.16.0.0/12 クラス B
192.168.0.0192.168.255.255 192.168.0.0/16 クラス C

172.16.0.0/12172.16172.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 つの省略規則がある。

  1. 各ブロック先頭の 0 は省略できる(0db8db800000
  2. 連続する 0 のブロックは :: で 1 回だけ省略できる

上記アドレスは次のように短縮される。

2001:db8::ff00:42:8329

主要な 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 ウェイハンドシェイク」で接続を確立する。

  1. クライアント → サーバ: SYN(接続要求)
  2. サーバ → クライアント: SYN/ACK(要求受理+応答)
  3. クライアント → サーバ: 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/12172.16172.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/8172.16/12192.168/16
IPv6 128 ビット・コロン16進、:: は 1 回のみ
ポート ウェルノウン 0-1023、/etc/services で確認
TCP / UDP コネクション型(信頼性)vs コネクションレス型(軽量)

インターネットプロトコルの基礎は、ネットワーク設定・DNS・トラブルシューティングすべての前提となる。アドレス計算とプロトコルの役割分担を固めたら、実際の設定とトラブル対応へ進もう。

次に読む