IPアドレスとポート番号の基本理解

ip-address-port-number

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.45192.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アドレスはデバイスを識別し、サブネットマスクはネットワークとホスト部分を分け、ポート番号はデバイス内の特定のアプリケーションを指定します。これらの要素を理解することで、ネットワークの設計や管理、通信プロトコルの仕組みをより深く理解することができます。について掘り下げていきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (1件)

コメントする

目次