はじめに
現在、Arduinoを使ってネットワーク通信を行うプログラムを勉強しています。
Wi-Fi接続の設定コードを書いていたとき、ふと気になる記述を見つけました。
// 実際のコード(イメージ)
const char* ssid = "MY_WIFI_SSID";
const char* password = "MY_PASSWORD";
int serverport = 80; // ← これは何??
SSIDやパスワードがWi-Fi接続に必要なのは分かります。
しかし、その下にある serverport = 80 という記述。
「サーバーポート? 80? なんで80なの? 100じゃダメなの?」と疑問に思いました。
今回は、この「謎の数字」の正体と、その裏にある「ウェルノウンポート」などのルールについてまとめます。
結論:このコードは何をしているのか?
先に結論から言うと、この serverport = 80 は、「訪問者が迷わないように、わかりやすい『正面玄関(80番)』を開けて待っていますよ」 という宣言です。
-
serverport: 変数名(ここは人間が適当に付けた名前) -
80: ポート番号(ここが重要!)
通常、Webサイトを見るとき、私たちはブラウザに「どの扉から入るか」をいちいち指示しません。それは、「Webサイトなら、とりあえず80番の正面玄関に行けばいい」 という世界共通のルールがあるからです。
では、そもそも「ポート番号」ってなに?なぜ「80」なのでしょうか?
ポート番号=「マンションの部屋番号」
よく例えられるのが、IPアドレスとポート番号の関係です。
- IPアドレス:マンションの住所(どのPCに届けるか)
- ポート番号:マンションの部屋番号(そのPCの中の、どのソフトに届けるか)
PCの中では、ブラウザ、メール、ゲームなど、たくさんのソフト(プロセス)が動いています。
「IPアドレス(住所)」だけだと、届いたデータを「どのソフト(部屋)」に渡せばいいか分かりません。
そこで、「Webサイトのデータなら80番の部屋へ」「メールなら25番の部屋へ」というふうに、番号によってデータの届け先を振り分けています。
冒頭のコードは、「私のArduinoは80番の部屋で待機します!」と指定していたわけです。
ポート番号のルール(ウェルノウンとレジスタード)
この「部屋番号(ポート番号)」は 0番〜65535番 までありますが、好き勝手に使っていいわけではなく、IANAという組織によって管理・分類されています。
特に重要なのが以下の2つです。
1. ウェルノウンポート (Well-known Ports)
- 範囲: 0番 〜 1023番
- 役割: インターネットの基本的なシステムのために予約されている番号
いわば、マンションの「管理人室」や「共有ロビー」のような場所です。これらは「この番号といえばこの機能!」と世界中で決まっています。
| 番号 | サービス名 | 用途 |
|---|---|---|
| 80 | HTTP | Webサイトの閲覧(今回のコードはこれ!) |
| 443 | HTTPS | 暗号化されたWebサイトの閲覧 |
| 22 | SSH | サーバーの遠隔操作 |
| 25 | SMTP | メールの送信 |
冒頭のコードで 80 が使われていたのは、そのプログラムが 「Webサーバー(HTTP)」として振る舞うため でした。
ここを勝手に変えてしまうと、アクセスしてくるブラウザ側が「あれ?Webサイトが見つからないぞ?」と迷子になってしまいます。
2. レジスタードポート (Registered Ports)
- 範囲: 1024番 〜 49151番
- 役割: 特定のアプリケーションやソフトウェアが登録して使う番号
こちらは、特定の企業のソフトやゲームなどが「うちはこの番号を使います」と登録して利用する番号です。
| 番号 | サービス名 | 用途 |
|---|---|---|
| 3306 | MySQL | データベース接続 |
| 8080 | HTTP代替 | 80番が使えない時によく開発用で使われる |
| 25565 | Minecraft | マインクラフトのマルチプレイ |
まとめ
コードに出てきた serverport = 80 の正体は、「Webサーバーとして通信するために、世界標準の『80番』の正面玄関を開けて待っておく」 という意味でした。
- 0〜1023番 (ウェルノウンポート): Webやメールなど、ネットの基本機能用(勝手に使うのは避ける)
- 1024〜49151番 (レジスタードポート): 各アプリ用
普段何気なくコピペしていたコードの数字にも、ちゃんと「そこでなければならない理由」があることが分かりました。
もし自分で通信アプリを作るときは、既存の重要なポート番号と被らないように注意したいと思います。