IPアドレスとポート番号とはなにか
IPアドレスとは
IPアドレスとは、ネットワークインターフェースごとに割り当てられる番号です。IPv4、IPv6という2つのバージョンがあります(違いは後述)。
ネットワークインターフェースとは、機器やコンテナなどの中にある、通信を担当するプログラム部分のことです(詳細は後述)。
物理機器には物理ネットワークインターフェースが、コンテナなど物理的機器をもたないものには仮想ネットワークインターフェースが入っています。そのネットワークインターフェースが、自宅のパソコンやサーバーコンピューター、コンテナに入っていて、1つまたは複数のIPアドレスが割当られているという構造です。
IPアドレスの種類
IPアドレスには2つの種類があります:
1. パブリックIPアドレス
- ICANNという国連のような立ち位置の組織が発行している番号
- いくつかの組織を経由してISPに有償で貸与
- ISP等から一般ユーザーに貸与
- インターネット上で一意な番号のため、直接アクセス可能
2. プライベートIPアドレス
- アプリ内部などで使用
- 独自で発行可能
- ネットワークが別であれば重複して存在可能
- インターネットから直接アクセス不可
IPv4とIPv6の違い
IPv4
- 32ビットアドレス(例: 192.168.1.1)
- 約43億個のアドレスが理論上可能
- すでにアドレスが枯渇
- ピリオドで区切られた4つの数字(0-255)
- 現在も主流
IPv6
- 128ビットアドレス
- ほぼ無限のアドレス空間
- 例: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
- コロンで区切られた8つの16進数
- 実際に運用されている
- モバイル端末のアドレスはだいたいIPv6
現在、たいていのネットワークインターフェースでは両方の形態に対応できます。IPv4にしか対応していないウェブサーバーも存在しますが、ISPやキャリアなどが間に入って特殊な変換技術によりアクセス可能にしているため、ユーザー側はどちらの規格なのか気にせずに接続することができています。
ネットワークインターフェース
ネットワークインターフェースには、以下の2種類があります:
1. 物理インターフェース
実際のハードウェアデバイスが存在
- 有線LAN(Ethernet)
- 無線LAN(Wi-Fi)
- モバイル通信(4G/5G)
2. 仮想インターフェース
ソフトウェアで実装
- ループバック通信(localhost)
- コンテナネットワーク
- VPNトンネリング
- ネットワークブリッジ
ポート番号とプロトコル
1つのIPアドレスには、TCPとUDPという2つの通信プロトコルがあり、それぞれのプロトコルが0から65535までのポート番号を持っています。
TCPとUDPの違い
TCP:確実性重視(少し遅い)
確実に届ける必要があるデータに使用
- Webサイトの閲覧
- メールの送受信
- ファイルのダウンロード
UDP:速度重視(多少の欠落を許容)
多少データが欠けても問題ない用途に使用
- オンラインゲーム
- ビデオ通話
- ライブ配信
TCP, UDPは明示的に指定できますが、指定しない場合は、ポート番号ごとにデフォルトのプロトコルが決められています:
- 80番ポート → TCPがデフォルト(HTTP)
- 443番ポート → TCPがデフォルト(HTTPS)
- 53番ポート → UDPがデフォルト(DNS)
- 123番ポート → UDPがデフォルト(NTP:時刻同期)
- 22番ポート → TCPがデフォルト(SSH)
- 25番ポート → TCPがデフォルト(SMTP:メール送信)
ポート番号の分類
1. Well-known ports(ウェルノウンポート)
- 範囲:0-1023
- 特権ポート
- 主要なサービス用に予約
- 例:
- 80/tcp:HTTP
- 443/tcp:HTTPS
- 22/tcp:SSH
- 53/udp:DNS
2. Registered ports(登録済みポート)
- 範囲:1024-49151
- アプリケーション用に登録されたポート
- 例:
- 3306:MySQL
- 5432:PostgreSQL
3. Dynamic/Private ports(動的/プライベートポート)
- 範囲:49152-65535
- 自由に使用可能
- 一時的な接続に使用
これらの管理はIANA(Internet Assigned Numbers Authority)という組織が行っています。
プロトコルとポート番号の自動選択
つまり、httpで接続を試みれば80番が、httpsなら443番、sshなら22番が自動的に選ばれます。mysql -h hostname -u username -pなどでコマンドラインからあmysqlに接続しようとすると、自動的に3306が選ばれるということですね。
IPアドレスの指定方法
例えば 172.217.31.110:443/tcp
のように指定できます。
URLが https://172.217.31.110
の場合、httpsだから443ポート、443ポートだからtcpという形でポートとプロトコルを省略できます。
まとめ
各機器やコンテナには、IPアドレスが割り当てられています。通信する時は、そのIPアドレスの特定のポート番号を指定して行います。そして、データは複数の機器を経由して、目的のIPアドレスとポートまで届けられます。つまり「どの機器の」「どのポート」と通信するかを指定して、バケツリレーのようにデータを届ける仕組みになっているわけです。
しかしながら、例えば、ブラウザからサイトにアクセスするとき、URLって、こういう、番号じゃないですね。something.comとかsomething.co.jpとかですよね。OK。次はその部分、ドメインについて解説します。
Discussion