IPアドレス、サブネットマスク、そしてポート番号は、ネットワーク通信の基盤となる重要な要素です。IPアドレスはネットワーク上でデバイスを識別し、サブネットマスクはそのアドレスをネットワーク部分とホスト部分に分けます。ポート番号は、同一デバイス内で複数のアプリケーションを区別する役割を持ちます。この記事では、これらの関係を初心者にもわかりやすく説明し、特にIPアドレスとサブネットマスクがどのように相互作用するか、そしてポート番号の詳細についても掘り下げます。
基本概念の説明
IPアドレスとは
IPアドレス(Internet Protocol Address)は、インターネット上でデバイスを識別するための一意の番号です。デバイスに割り当てられた住所のようなもので、インターネットやローカルネットワーク内でデータが正しい場所に届くように役立ちます。IPアドレスには、IPv4(例: 192.168.1.1)とIPv6(例: 2001:0db8::7334)の2種類がありますが、ここでは一般的なIPv4を中心に説明します。
サブネットマスクとは
サブネットマスクは、IPアドレスのどの部分がネットワーク部分で、どの部分がホスト(個々のデバイス)部分かを決定します。ネットワーク部分は、全デバイスが同じでなければならない部分です。一方、ホスト部分は、ネットワーク内の個々のデバイスを識別します。サブネットマスクは、IPアドレスをネットワークとホストに分けるための「フィルター」のように機能します。
ネットワーク部分とホスト部分
サブネットマスクの「255」に対応する部分がネットワーク部分を示し、IPアドレスのデバイスが属するネットワークを示します。「0」に対応する部分がホスト部分で、同じネットワーク内で個々のデバイスを識別します。
例えば、サブネットマスクが255.255.255.0の場合、最初の3つのオクテットがネットワーク部分を示し、最後の1つのオクテットがホスト部分を示します。つまり、IPアドレス192.168.1.45
と192.168.1.100
は同じネットワーク(192.168.1
)に属していますが、ホスト番号(45と100)が異なるため、異なるデバイスを表します。
具体例での解説
- 255.255.255.0 の場合: ネットワーク部分が
255
でホスト部分が0
です。IPアドレスが192.168.1.45
なら、ネットワーク部分は192.168.1
で、ホスト部分は45
です。ホスト部分が「0」から「255」までの範囲を取るため、同じネットワーク内で254台のデバイス(ホスト)が利用できます。例えば、192.168.1.1
から192.168.1.254
までが利用可能です(0と255は予約済みアドレス)。 - 255.255.255.192 の場合: 最後のオクテットは192なので、2進数では「11000000」となります。つまり、最初の6ビットがネットワーク部分、最後の2ビットがホスト部分です。ホスト部分が2ビットしかないので、同じサブネット内では4つのアドレスしか使えません。この場合、ホスト数は22 – 2 = 2台(ネットワークアドレスとブロードキャストアドレスを除く)です。例えば、
192.168.1.0
から192.168.1.63
のサブネットには62台のデバイスが接続可能です。
サブネットマスクの役割
- 大きなネットワークの分割: サブネットマスクを変更することで、1つの大きなネットワークをいくつかの小さなサブネットに分割することが可能です。これにより、ネットワーク内のトラフィックを効率的に管理し、セキュリティを強化することができます。
- IPアドレス範囲の指定: サブネットマスクによって、IPアドレスの範囲がどこまで使えるかが決まります。たとえば、255.255.255.0のサブネットマスクでは、0から255のホストアドレスを使うことができますが、255.255.255.192ではその範囲が制限され、ホスト数が少なくなります。
ポート番号とは
ポート番号は、IPアドレスに加えて、デバイス内で動作するアプリケーションを識別するために使われます。ポート番号は、デバイス内の「部屋番号」のような役割を果たし、特定のサービスやアプリケーションとの通信を確立します。
ポート番号の分類
- ウェルノウンポート(0〜1023): 予約されたポート番号で、特定の一般的なサービスに使用されます。たとえば、HTTPはポート80、HTTPSはポート443、メールのSMTPはポート25を使用します。
- 登録済みポート(1024〜49151): 特定のアプリケーションが使用するポート番号で、一般的にはサードパーティアプリケーションが利用します。
- 動的/プライベートポート(49152〜65535): クライアントアプリケーションが動的に割り当てるために使われるポートです。クライアントがサーバーに接続する際に、空いているポート番号が自動的に選ばれます。
ポート番号の詳細な使用例
- ポート80: HTTP通信(Webブラウジング)
- ポート443: HTTPS通信(暗号化されたWebブラウジング)
- ポート25: SMTP(メール送信)
- ポート22: SSH(セキュアなリモートアクセス)
各デバイスは、同じIPアドレスを持ちながら複数のポート番号を持つことができ、これにより1つのデバイスで同時に異なるサービスを提供することが可能になります。たとえば、同じIPアドレスでWebサイトを提供し(ポート80)、SSH接続を受け付ける(ポート22)ことができます。
IPアドレス、サブネットマスク、ポート番号の簡単なまとめ
項目 | 説明 | 例 |
---|---|---|
IPアドレス | ネットワーク上でのデバイスの住所 | 192.168.1.1(IPv4) 2001:0db8::7334(IPv6) |
サブネットマスク | IPアドレスをネットワーク部分とホスト部分に分ける | 255.255.255.0 |
ポート番号 | 同一デバイス内のサービスやアプリケーションを識別 | HTTPは80、HTTPSは443 |
各言語でのIPアドレスとポート番号の使用例
Python: ソケット通信におけるIPアドレスとポート番号
import socket
# サーバーのIPアドレスとポート番号を指定
server_ip = '127.0.0.1'
server_port = 8080
# ソケットを作成
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((server_ip, server_port)) # IPアドレスとポート番号でバインド
s.listen()
print(f"Server running on {server_ip}:{server_port}")
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
C#: IPアドレスとポート番号の使用例
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main(string[] args)
{
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
int port = 8080;
TcpListener server = new TcpListener(ipAddress, port);
server.Start();
Console.WriteLine($"Server running on {ipAddress}:{port}");
while (true)
{
TcpClient client = server.AcceptTcpClient();
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
stream.Write(buffer, 0, bytesRead);
}
}
}
C++: IPアドレスとポート番号の使用例
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = htons(8080);
bind(server_fd, (struct sockaddr*)&address, sizeof(address));
listen(server_fd, 3);
std::cout << "Server running on 127.0.0.1:8080" << std::endl;
int client_fd = accept(server_fd, nullptr, nullptr);
char buffer[1024] = {0};
read(client_fd, buffer, 1024);
send(client_fd, buffer, 1024, 0);
close(client_fd);
close(server_fd);
return 0;
}
Java: IPアドレスとポート番号の使用例
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
String ip = "127.0.0.1";
int port = 8080;
ServerSocket serverSocket = new ServerSocket(port, 50, InetAddress.getByName(ip));
System.out.println("Server running on " + ip + ":" + port);
while (true) {
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String line;
while ((line = in.readLine()) != null) {
out.println(line);
}
}
}
}
JavaScript: IPアドレスとポート番号の使用例
const net = require('net');
const server = net.createServer((socket) => {
socket.on('data', (data) => {
socket.write(data);
});
});
const host = '127.0.0.1';
const port = 8080;
server.listen(port, host, () => {
console.log(`Server running on ${host}:${port}`);
});
まとめ
IPアドレス、サブネットマスク、ポート番号は、ネットワーク通信の基本的な要素です。IPアドレスはデバイスを識別し、サブネットマスクはネットワークとホスト部分を分け、ポート番号はデバイス内の特定のアプリケーションを指定します。これらの要素を理解することで、ネットワークの設計や管理、通信プロトコルの仕組みをより深く理解することができます。について掘り下げていきましょう。
コメント
コメント一覧 (1件)
[…] 4-1-2. IPアドレスとポート番号 […]