ポート番号を知らないと、「pingは通るのに、つながらない」理由が分かりません。「サーバーに ping は通るのに、リモートデスクトップだけつながらないんです」
これも、情シスあるあるです。ping が通る=つながる、と思いたくなりますが、実は、そうとは限りません。理由は、今回のテーマ、ポート番号にあります。
シリーズ「情シスのためのネットワーク基礎」の第3回です。前回(第2回:DNS・DHCP・ARP)で、住所の調べ方・配り方を見ました。今回は、住所(IP アドレス)の先にある、窓口の番号の話です。
結論:住所はビルの場所、ポート番号は「何階の何号室」
IP アドレスは、機器(ビル)を指します。ポート番号は、その中の、どのサービス(部屋)に用があるかを指します。
| 要素 | たとえ | 役割 |
|---|---|---|
| IP アドレス | ビルの住所 | どの機器か |
| ポート番号 | 部屋番号 | その機器の、どのサービスか |
| TCP | 復唱して確認する配達 | 届いたかを確かめながら送る |
| UDP | 「はいよ!」と投げる屋台 | 確認せずに、さっと送る |
ポート番号は 16ビット、つまり、0〜65535 の番号です。
TCP と UDP の違い
| TCP | UDP | |
|---|---|---|
| 接続 | 先に接続を作る(接続型) | 接続を作らない |
| 信頼性 | 届かなければ再送する。順番も保つ | 届く保証はない |
| 速さ・軽さ | 手間がかかる分、やや重い | 軽い |
| 使われる場面 | Web、メール、リモートデスクトップ、ファイル転送 | 名前解決(DNS)、動画・音声の配信、VoIP など |
TCP の接続は、3回のやり取り(3ウェイハンドシェイク)で作られます。
- クライアント → サーバー:
SYN(「話していいですか?」) - サーバー → クライアント:
SYN-ACK(「いいですよ、そちらは?」) - クライアント → サーバー:
ACK(「はい、始めましょう」)
食事でいえば、「注文いいですか?」「どうぞ」「じゃあ、これを」の3往復です。ここで失敗すると、接続自体ができず、アプリは「つながりません」と言います。
UDP は、確認なしで投げっぱなしです。届かなくても、気づきません(アプリ側で、必要なら確認します)。DNS の問い合わせは、軽さを優先して、基本的に UDP です。
よく見るポート番号
| 番号 | 用途 | 主なプロトコル |
|---|---|---|
| 22 | SSH | TCP |
| 53 | DNS | UDP / TCP |
| 80 | HTTP(暗号化なしの Web) | TCP |
| 443 | HTTPS(暗号化ありの Web) | TCP |
| 3389 | リモートデスクトップ(RDP) | TCP |
Microsoft の Test-NetConnection には、-CommonTCPPort という指定があり、HTTP、RDP、SMB、WINRM は、番号を覚えていなくても指定できます。
実機で確認:ポート番号は、開いているか
ポートの確認には、Test-NetConnection を使います。ping、TCP の接続テスト、経路の確認ができる、便利なコマンドです。
Test-NetConnection example.com -Port 443
Test-NetConnection example.com -Port 3389 -WarningAction SilentlyContinue | Select-Object RemotePort, TcpTestSucceeded

- 443 番:
TcpTestSucceeded : True。HTTPS の窓口は、開いていて、接続できました。出力に、InterfaceAlias(どのアダプターから出たか)とSourceAddress(こちらの IP アドレス)も出ています。 - 3389 番:
False。Web サーバーであるexample.comが、リモートデスクトップの窓口を開けていないのは、当然です。
大事なのは、「ping は通る」と「そのポートに接続できる」は、別のテストだということです。TcpTestSucceeded が True なら、その番号の窓口は、開いていて、接続できたことが分かります。
自分の PC では、どのポートが開いているか
逆に、自分の PC が、どのポートで待ち受けているかも見られます。
Get-NetTCPConnection -State Listen | Sort-Object LocalPort | Select-Object -First 6 LocalAddress, LocalPort, OwningProcess
Get-NetUDPEndpoint | Sort-Object LocalPort | Select-Object -First 4 LocalAddress, LocalPort, OwningProcess

LocalPortが、待ち受けているポート番号です。OwningProcessは、そのポートを使っているプロセスの ID です。Get-Process -Id <番号>に渡せば、どのプログラムかが分かります。LocalAddressが0.0.0.0や::なら、どのアドレス宛でも待ち受けている、という意味です。特定のアドレス(127.0.2.3など)なら、その宛先だけです。
「身に覚えのないポートが開いている」ときは、OwningProcess から、何のプログラムかを辿るのが、調査の基本です。
僕のやらかし:ping が通るから、安心していた
リモートデスクトップで、あるサーバーに入れない、という連絡がありました。僕は、まず ping を打って、返ってくるのを見て、「ネットワークは大丈夫です」と答えてしまいました。
でも、本人は入れない。冷静になって、Test-NetConnection -Port 3389 を打つと、False。サーバーの手前のファイアウォールが、3389 を止めていたのが原因でした。
ping が通るのは、「建物の住所には、たどり着ける」というだけです。目的の部屋の鍵が開いているかは、別問題でした。レストランに電話が通じたからといって、ちょうど、その席が空いているとは限らないのと同じです。
それ以来、「つながらない」と言われたら、住所(ping)→ 部屋(ポート)の順に、確認しています。
今回覚えたコマンド
| コマンド | 意味 |
|---|---|
Test-NetConnection <相手> -Port <番号> |
そのポートに、TCP で接続できるかを調べる |
Test-NetConnection <相手> -CommonTCPPort RDP |
よく使うポートを、名前で指定する |
Get-NetTCPConnection -State Listen |
自分の PC が待ち受けている TCP ポート |
Get-NetUDPEndpoint |
自分の PC が使っている UDP ポート |
tnc |
Test-NetConnection の短い別名 |
次回予告
次回は、スイッチ・ルーター・VLAN・NAT。町を作る部品たちが、それぞれ何をしているのかを、実機の経路の表示と一緒に整理します。「家のルーターのおかげで、なぜ、複数の機器が1つのアドレスでネットに出られるのか」も、分かります。
参考
- Test-NetConnection(Microsoft Learn)
- RFC 9293:Transmission Control Protocol (TCP)
- RFC 768:User Datagram Protocol (UDP)
ITもごはんも、腹八分目が長続きのコツ!


コメント