メインコンテンツへスキップ
見出し画像

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.1

    macOS と Linux

    Linux では次の2つです。

    ip addr
    ip route

    ip 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 -tn

    Windows は 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:443

    1行が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回と、シリーズをまとめたマガジンは、記事の公開ページからたどれます。

    ※技術的な内容を複数の観点で確認したうえで公開しています。誤りに気づかれた場合はコメントでお知らせください。

     
     
    IT・テクノロジーの実務を、現場で使える形で解説する有料記事のアカウントです。仕組みの理解から、コマンド・手順・判断の考え方まで。障害対応や設計で迷ったときに読み返せる記事を、少しずつ増やしていきます。

    あなたへのおすすめ