
IPアドレスとポート番号の違いを、自分のPCのコマンドで確かめる(ipconfig・ss・netstat)
障害報告の会話を、絵にして理解する
「サーバーの IP は 192.0.2.10 で、443 番が開いていません」
「ゲートウェイまでは ping が通るけど、その先がダメですね」
言葉は知っているのに、頭の中で絵にならない。現場でよくある場面です。IP アドレス、ポート、プライベートとグローバル、ゲートウェイ。どれも「なんとなく」のまま使えてしまうからです。
この記事では、用語を暗記するのではなく、自分の端末のコマンド出力を見ながら理解します。
この記事でわかること:
IP アドレスとポートが、それぞれ何を決めているか
プライベート IP とグローバル IP の違い
自分の端末の IP・ゲートウェイを確認する方法
いま自分の端末が、どこの何と通信しているかの見方
「ping が通るのに Web が見えない」が起きる理由
前提知識:特にありません。ターミナル(Windows は PowerShell かコマンドプロンプト、macOS と Linux は端末)を開ければ十分です。
この記事は、シリーズ「手を動かして学ぶ Web とネットワークの土台」の第2回です。第1回(URL を開いて起きる5段階を curl で確かめる)を読んでいると流れがつかみやすいですが、読んでいなくても進められます。
結論:IP は「どの機器か」、ポートは「その機器のどのサービスか」
通信相手は、2つの情報で決まります。
IP アドレス:ネットワーク上の「どの機器か」を示す番号
ポート番号:その機器の中の「どのサービス(プログラム)か」を示す番号
住所と部屋番号にたとえると、こうなります。
相手 = 192.0.2.10 の 443 番
(建物の住所) (部屋番号)
あなたの端末 サーバー 192.0.2.10
192.168.1.20:50123 ---> 22番 SSH
80番 HTTP
443番 HTTPS <-- ここに届く端末側の 192.168.1.20 は、次の節で説明するプライベート IP の例です。サーバー側はドキュメント用に予約された例のアドレスで、実在の機器とは関係ありません。
建物(IP)にたどり着いても、部屋(ポート)に誰もいなければ、用件は受け付けてもらえません。「IP は合っているのに繋がらない」の多くは、この部屋の側の話です。
もう一つ大事な点があります。送る側にもポート番号があります。 図の 50123 がそれで、端末が通信のたびに空いている番号を一時的に選びます。返事はこの番号宛てに戻ってきます。接続ひとつは「送信元 IP:ポート」と「宛先 IP:ポート」の組で区別されます。
よく出てくるポート番号は、22(SSH)、53(DNS)、80(HTTP)、443(HTTPS)です。サービスごとの慣例で、設定で変えることもできます。
プライベート IP とグローバル IP
IP アドレスには、インターネット上で使える グローバル IP と、社内や家庭の中だけで使う プライベート IP があります。プライベート IP に使う範囲は決まっています。
10.0.0.0 〜 10.255.255.255
172.16.0.0 〜 172.31.255.255
192.168.0.0 〜 192.168.255.255
インターネットへ出るときは、ルーターなどが NAT(内側のアドレスを外向けのアドレスに付け替える仕組み)で、グローバル IP に変換します。
[PC 192.168.1.20] -+
[PC 192.168.1.21] -+- [ルーター] --> インターネット
[PC 192.168.1.22] -+ 内側: 192.168.1.1
外側: グローバル IP(1つ)同じ 192.168.1.20 という番号が、世界中の別々の家や会社に存在します。障害報告で「IP を教えて」と言われたら、内側の IP なのか、外から見える IP なのかを先に確認すると、話がかみ合います。
手元で確認する①:自分の IP とゲートウェイ
読み取りだけで、何も変更しません。
Windows
ipconfig /all使っているアダプター(Wi-Fi か有線)の部分だけを見ます。表示言語によって項目名は異なります(英語表示では IPv4 Address、Default Gateway など)。
IPv4 アドレス:この端末の IP
サブネット マスク:同じネットワークの範囲を決める値(/24 なら先頭 24 ビットが共通)
デフォルト ゲートウェイ:外へ出るときの出口(ルーター)
DNS サーバー:名前を IP に引くときの問い合わせ先
出力の例(抜粋。値は架空です):
IPv4 アドレス . . . . . . . : 192.168.1.20
デフォルト ゲートウェイ . . : 192.168.1.1
DNS サーバー . . . . . . . : 192.168.1.1macOS と Linux
Linux では次の2つです。
ip addr
ip routeip addr の inet 192.168.1.20/24 が端末の IP です。/24 はサブネットマスクの短い書き方です。ip route の default via 192.168.1.1 が、デフォルトゲートウェイです。
macOS では ifconfig en0 と netstat -rn を使います。インターフェース名は環境によって異なります。
つまずきやすい点
アダプターが複数あるのは普通です。仮想マシンやコンテナ、VPN があると見慣れない IP が並びます。出口が複数ある場合は、経路の優先度(メトリック)で決まります。Linux なら ip route get 203.0.113.5 で、その宛先に使われる出口が分かります。
169.254.x.x が出ていたら、IP の自動取得(DHCP)に失敗した状態のことが多いです。
画面に出るのは「内側の IP」です。外から見えるグローバル IP は、ルーターの管理画面などで確認します。ただし、回線事業者側でも NAT をかける構成では、管理画面の WAN 側に 100.64.0.0/10 の範囲などが表示され、外から見える IP と一致しないことがあります。
手元で確認する②:いま、どこの何と通信しているか
ブラウザでページを開いたまま、実行してみてください。
ss -tnWindows は netstat -ano、macOS は netstat -an -p tcp です。
出力の例(Linux。値は架空です):
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.1.20:50123 203.0.113.5:443
ESTAB 0 0 192.168.1.20:50188 198.51.100.9:4431行が1つの接続です。左が「自分の IP と一時的なポート」、右が「相手の IP とポート」です。:443 なら HTTPS で話しています。ESTAB(Windows と macOS では ESTABLISHED)は、接続が確立している状態です。
Windows と macOS の netstat は列の並びが異なり、Local Address と Foreign Address の順で表示されます。左が自分、右が相手という読み方は同じです。
接続が複数になるのは普通です。ブラウザのタブや更新確認など、相手もさまざまです。
自分の端末が「部屋を開けて待っている」状態は LISTEN です。Linux の ss -tln や Windows の netstat -ano | findstr LISTENING で見ます。サーバーを立てたのに外から繋がらないときは、待ち受けが 127.0.0.1(同じ端末の中だけ)になっていないかを最初に見ます。0.0.0.0 なら IPv4 のすべてのアドレス宛てを待ち受けています。
よくある勘違い:ping が通れば Web も見えるとは限らない
ping は、相手の機器に「届くか」だけを見ます。ICMP というポート番号を持たない種類の通信を使います。Web を見るには、さらに 443 番の部屋に誰かがいて応答する必要があります。
ping は通るが Web は見えない:機器は生きているが、Web サービスが止まっている、またはポートが塞がれている
ping は通らないが Web は見える:ICMP だけを遮断している機器は珍しくありません
ポートまで確かめるには、次のようにします。
Test-NetConnection www.example.com -Port 443
nc -vz www.example.com 443上が Windows(PowerShell)、下が macOS と Linux です。TcpTestSucceeded : True や succeeded が出れば、443 番の部屋まで届いています。文言は OS や版によって異なります。nc が入っていない環境では、curl -v telnet://www.example.com:443 や、bash の timeout 5 bash -c '</dev/tcp/www.example.com/443' && echo open でも確かめられます。失敗したときの文言の違い(拒否されたのか、応答がないのか)は、第4回で扱います。
冒頭の会話に戻ります。「ゲートウェイまでは ping が通る」は、自分の端末から出口のルーターまでは届いている、という意味です。「その先がダメ」は、ルーターの外側の経路か、相手の 443 番のどちらかで止まっている、ということです。ping と、ポートの確認を組み合わせると、止まっている場所が絞れます。
今日の確認メモ
自分の IP はいくつか。10./172.16〜31./192.168. で始まればプライベート、それ以外ならグローバルの可能性が高い
外へ出る出口(デフォルトゲートウェイ)はどれか
通信している相手の IP と、ポートは何番か
ping が通ることと、ポートに繋がることは別の確認だと説明できる
このシリーズで扱うこと
続きの回は、次の予定です。内容は変わることがあります。手元のコマンドで確かめながら進めます。
第3回:DNS の名前解決を dig で1段ずつ追う。リゾルバ・権威サーバー・キャッシュの動き。dig のコマンド集と、切り分け用のスクリプトつき(有料記事)
第4回:TCP と UDP の違いを手元で確かめる。3ウェイハンドシェイク・タイムアウト・接続拒否の見え方(有料記事)
第5回:HTTP のリクエストとレスポンスを自分で読む。メソッド・ヘッダ・ステータスを curl で確かめる(有料記事)
第6回:HTTPS の裏側。TLS ハンドシェイクと証明書を openssl s_client で読む(有料記事)
次回は、IP とセットで使われる「名前」の話、DNS です。第1回と、シリーズをまとめたマガジンは、記事の公開ページからたどれます。
※技術的な内容を複数の観点で確認したうえで公開しています。誤りに気づかれた場合はコメントでお知らせください。