Linux入門:コマンド操作のきほん

ネットワークの基礎知識

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

このレッスンで分かること

  • TCP/IP は 4 層 (アプリ / トランスポート / ネットワーク / リンク) で構成されます
  • IP + ポート でサービスを特定、DNS でホスト名 → IP を解決します
  • 現代は ip / ss を使い、旧来の ifconfig / netstat は非推奨

ネットワークの基礎知識 とは

ネットワークの基礎知識を習得します。IPアドレスやポート番号などを学びましょう。本レッスンでは、ネットワークの基礎知識 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ Linux でネットワークを学ぶのか

現代のサーバーはほぼすべてネットワーク経由で操作され、サービスもネットワーク越しに提供されます。Web サーバーが API リクエストを受ける、データベースが裏側で通信する、CI からデプロイ先にファイルを送る、ローカル開発機から本番のログを取り寄せる。これらすべてが TCP/IP というプロトコルの上で動いており、Linux はこの世界で最もよく使われている OS です。

アプリ開発者であってもネットワークの基本を理解しておくと、トラブルが起きたときに切り分けが圧倒的に速くなります。たとえば 「ブラウザから API が見えない」場合、原因はクライアント側 (DNS, JS) なのか、ネットワーク経路 (firewall, ルーティング) なのか、サーバー側 (プロセスが落ちている、ポートが違う) なのかを順に確認する必要があります。本章ではその下地となるコマンド群を扱います。

TCP/IP のレイヤを整理する

ネットワークは何枚もの層に分けて考えるのが伝統で、有名なのが OSI 参照モデルです。実務で頻繁に登場するのは 4 層程度です。

レイヤ役割代表例
アプリケーション層サービスごとの約束事HTTP, HTTPS, SSH, DNS
トランスポート層エンド間の通信品質TCP, UDP
ネットワーク層経路選択 (ルーティング)IP, ICMP
リンク層物理的な配線とフレーム送出Ethernet, Wi-Fi

下位レイヤがその上のレイヤを支え、各層は隣の層としか会話しないというのが基本ルールです。curl https://example.com を打つと、内部では HTTP → TCP → IP → Ethernet の順にデータが包まれ、相手のサーバー側で逆順に解体されます。

ホスト名と IP アドレス

通信相手を特定する番号が IP アドレスです。IPv4 では 192.0.2.1 のような 4 つの整数、IPv6 では 2001:db8::1 のような 16 進数表現を使います。人間が覚えるのは大変なので、example.com のようなホスト名を DNS で IP アドレスに変換します。

ターミナル

getent hosts example.com # 93.184.216.34 example.com

getent は名前解決の標準的なツールで、/etc/hosts や DNS サーバーの結果をまとめて返します。古い nslookuphost も同じ目的で使えます。dig を使うとさらに詳細な DNS レスポンスを確認できます。

ポートとサービスの対応

同じ IP アドレスでも、複数のサービスを同時に動かすためにポート番号 (0 から 65535) を使い分けます。よく使うものを覚えておくと、トラブルシュートが早くなります。

ポートプロトコル用途
22TCPSSH
53TCP/UDPDNS
80TCPHTTP
443TCPHTTPS
3306TCPMySQL
5432TCPPostgreSQL
6379TCPRedis

図解 ネットワーク通信の流れ

diagram (will load when visible)

図の流れを順序リストで書き直すと、次の通りです。

  1. クライアントが curl https://api.example.com を実行する
  2. DNS でホスト名を IP アドレスに変換する
  3. その IP に対して TCP 接続を確立する (3-way handshake)
  4. HTTPS リクエストを送信する
  5. サーバーがリクエストを処理する
  6. レスポンスをクライアントに返す

curl https://api.example.com という 1 コマンドの裏では、上の図のような流れが走っています。途中のどこで詰まっているかを切り分けるために、本章のコマンド群を使い分けます。

旧コマンドと現代版

古い記事では ifconfignetstat がよく登場しますが、これらは net-tools パッケージのコマンドで非推奨になっています。現代の Linux ディストリビューションでは iproute2 パッケージの ip / ss を使うのが標準です。本コースでもこの新しい方を使います。

ターミナル

# 旧 (非推奨) # ifconfig # netstat -tlnp # 現代版 ip a ss -tlnp

手元の Linux に ifconfig がないと焦らないでください。意図的にインストールされていないだけで、ip a を覚えれば同等以上のことができます。Docker の Alpine ベースイメージでは iproute2 も標準で入っていないので、必要なら apk add iproute2 で導入します。

クライアントとサーバーの役割

ネットワーク通信は、待ち受け側の サーバー と接続しに行く クライアント に分けて考えると整理しやすいです。サーバーは特定のポートで listen し、クライアントはランダムな高位ポートから接続してきます。ss -tlnp で listen 中のポート、curl でクライアント側の挙動を観察できます。

コマンド 1 つひとつを覚えるより、まず「自分はクライアント側を見ているのか、サーバー側を見ているのか」を意識する癖をつけてください。トラブルの原因が分かるスピードがまったく違ってきます。

トラブル切り分けの定石

実務で サイトが見えない という相談を受けたら、おおむね次の順で見ていきます。

  1. 名前解決ができるか (getent hosts example.comdig)
  2. 経路が通っているか (pingmtrtraceroute)
  3. ポートが開いているか (curl -v https://...nc -vz host 443)
  4. アプリが応答するか (curl https://...、ステータスコード確認)
  5. 自分側のサーバー設定 (ss -tlnpip a/etc/hosts)

このレッスン以降で、ここに登場するコマンドを順番に学んでいきます。

この章のポイント

ここまでの要点 4 層モデルで切り分け、IP + ポートでサービスを特定。DNS → 経路 → ポート → アプリの順に絞り込む。ip ss が現代の標準。

まとめ

  • ネットワークは複数の層が重なって動く。トラブル時はどの層の話かを意識する
  • ホスト名は DNS で IP に変換され、IP とポートでサービスを特定する
  • 旧コマンド ifconfig / netstat は非推奨。ip / ss を使う
  • クライアント側か、サーバー側か、どちらの視点で観察しているかを常に意識する
  • 切り分けは DNS → 経路 → ポート → アプリの順に進めると速い

次のレッスン

次は ping で接続確認 で、ネットワークの基礎知識を習得します を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. ネットワーク基礎 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. ネットワーク基礎 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

参考リンク