IP Addressing, Subnetting, and CIDR
Overview
- What you’ll learn: IPv4 address structure, address classes, private ranges, subnet masks, CIDR notation, how to calculate subnets, and an introduction to IPv6.
- Prerequisites: Lesson 11 – OSI Model and TCP/IP Protocol Suite
- Estimated reading time: 22 minutes
Introduction
IP addresses are the fundamental identifiers that allow devices to communicate on a network. Every server, workstation, router, and IoT device needs at least one IP address to participate in network communication. Understanding how IP addresses work, how to divide networks into subnets, and how CIDR notation simplifies addressing is essential for any Linux system administrator.
In this lesson, you will learn the structure of IPv4 addresses, the concept of address classes and private ranges, how subnet masks define network boundaries, and how CIDR provides a flexible way to allocate addresses. We will also introduce IPv6, the next generation of IP addressing.
IPv4 Address Structure
An IPv4 address is a 32-bit number, typically written in dotted decimal notation as four octets separated by dots. Each octet represents 8 bits, with values ranging from 0 to 255.
# IPv4 address structure
192.168.1.10
# Binary representation
11000000.10101000.00000001.00001010
# Each octet is 8 bits (32 bits total)
# Octet 1: 192 = 11000000
# Octet 2: 168 = 10101000
# Octet 3: 1 = 00000001
# Octet 4: 10 = 00001010
# View your IP address on Linux
$ ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 192.168.1.10/24 brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feab:cdef/64 scope link
valid_lft forever preferred_lft forever
Network and Host Portions
Every IP address is divided into two parts: the network portion (identifies which network the device belongs to) and the host portion (identifies the specific device on that network). The subnet mask determines where the division occurs.
# IP address: 192.168.1.10
# Subnet mask: 255.255.255.0
#
# Network part: 192.168.1.0 (first 24 bits)
# Host part: .10 (last 8 bits)
#
# Binary breakdown:
# IP: 11000000.10101000.00000001.00001010
# Mask: 11111111.11111111.11111111.00000000
# Net: 11000000.10101000.00000001.00000000 (AND operation)
Address Classes (Historical)
Originally, IPv4 addresses were divided into five classes. While classful addressing has been replaced by CIDR, understanding classes helps when reading older documentation:
- Class A (1.0.0.0 – 126.255.255.255): /8 mask. 126 networks, ~16.7 million hosts each.
- Class B (128.0.0.0 – 191.255.255.255): /16 mask. 16,384 networks, ~65,534 hosts each.
- Class C (192.0.0.0 – 223.255.255.255): /24 mask. ~2.1 million networks, 254 hosts each.
- Class D (224.0.0.0 – 239.255.255.255): Multicast addresses.
- Class E (240.0.0.0 – 255.255.255.255): Reserved for experimental use.
Private IP Address Ranges
RFC 1918 defines three private address ranges that are not routable on the public Internet. These are used within internal networks and are translated to public addresses via NAT (Network Address Translation):
# Private IP ranges (RFC 1918)
10.0.0.0/8 10.0.0.0 – 10.255.255.255 (16,777,216 addresses)
172.16.0.0/12 172.16.0.0 – 172.31.255.255 (1,048,576 addresses)
192.168.0.0/16 192.168.0.0 – 192.168.255.255 (65,536 addresses)
# Special addresses
127.0.0.0/8 Loopback (localhost)
169.254.0.0/16 Link-local (APIPA, when DHCP fails)
0.0.0.0 "Any" address (used for default routes and binding)
255.255.255.255 Broadcast address
Subnet Masks
A subnet mask is a 32-bit number that masks the network portion of an IP address. It consists of consecutive 1s (network bits) followed by consecutive 0s (host bits).
# Common subnet masks
/8 = 255.0.0.0 (Class A default)
/16 = 255.255.0.0 (Class B default)
/24 = 255.255.255.0 (Class C default)
/25 = 255.255.255.128 (2 subnets from a /24)
/26 = 255.255.255.192 (4 subnets from a /24)
/27 = 255.255.255.224 (8 subnets from a /24)
/28 = 255.255.255.240 (16 subnets from a /24)
/30 = 255.255.255.252 (Point-to-point links, 2 usable hosts)
/32 = 255.255.255.255 (Single host route)
CIDR Notation
CIDR (Classless Inter-Domain Routing) was introduced in 1993 to replace classful addressing and slow the exhaustion of IPv4 addresses. CIDR uses a suffix notation indicating how many bits form the network prefix.
# CIDR notation examples
192.168.1.0/24 # 256 addresses (254 usable hosts)
10.0.0.0/8 # 16,777,216 addresses
172.16.0.0/12 # 1,048,576 addresses
192.168.1.0/26 # 64 addresses (62 usable hosts)
# Calculate usable hosts: 2^(32-prefix) - 2
# /24: 2^8 - 2 = 254 usable hosts
# /26: 2^6 - 2 = 62 usable hosts
# /30: 2^2 - 2 = 2 usable hosts
# /27: 2^5 - 2 = 30 usable hosts
Subnetting in Practice
Subnetting is the process of dividing a larger network into smaller sub-networks. This improves security, reduces broadcast domains, and makes efficient use of address space.
Subnetting Example
# Given: 192.168.1.0/24 — divide into 4 equal subnets
#
# We need 2 extra bits (2^2 = 4 subnets), so /24 becomes /26
# Each subnet has 2^6 = 64 addresses (62 usable)
#
# Subnet 1: 192.168.1.0/26 (hosts: .1 – .62, broadcast: .63)
# Subnet 2: 192.168.1.64/26 (hosts: .65 – .126, broadcast: .127)
# Subnet 3: 192.168.1.128/26 (hosts: .129 – .190, broadcast: .191)
# Subnet 4: 192.168.1.192/26 (hosts: .193 – .254, broadcast: .255)
# Verify with ipcalc (install: sudo apt install ipcalc)
$ ipcalc 192.168.1.0/26
Address: 192.168.1.0 11000000.10101000.00000001.00 000000
Netmask: 255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard: 0.0.0.63 00000000.00000000.00000000.00 111111
=>
Network: 192.168.1.0/26 11000000.10101000.00000001.00 000000
HostMin: 192.168.1.1 11000000.10101000.00000001.00 000001
HostMax: 192.168.1.62 11000000.10101000.00000001.00 111110
Broadcast: 192.168.1.63 11000000.10101000.00000001.00 111111
Hosts/Net: 62 Class C, Private Internet
Configuring a Subnet on Linux
# Add an IP address with a /26 subnet
$ sudo ip addr add 192.168.1.65/26 dev ens33
# Verify the configuration
$ ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 192.168.1.65/26 brd 192.168.1.127 scope global ens33
# Check which subnet an address belongs to
$ ipcalc 192.168.1.100/26
Network: 192.168.1.64/26
HostMin: 192.168.1.65
HostMax: 192.168.1.126
Broadcast: 192.168.1.127
IPv6 Introduction
IPv6 uses 128-bit addresses, providing a vastly larger address space than IPv4. Addresses are written as eight groups of four hexadecimal digits separated by colons.
# IPv6 address format
2001:0db8:85a3:0000:0000:8a2e:0370:7334
# Simplified (leading zeros dropped, consecutive zero groups replaced with ::)
2001:db8:85a3::8a2e:370:7334
# Common IPv6 addresses
::1 # Loopback (equivalent to 127.0.0.1)
fe80::/10 # Link-local addresses
2000::/3 # Global unicast addresses
ff00::/8 # Multicast addresses
# View IPv6 addresses on Linux
$ ip -6 addr show
1: lo: <LOOPBACK,UP,LOWER_UP>
inet6 ::1/128 scope host
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP>
inet6 fe80::20c:29ff:feab:cdef/64 scope link
inet6 2001:db8::10/64 scope global
Key Takeaways
- IPv4 addresses are 32-bit numbers written in dotted decimal notation; each address has a network and host portion defined by the subnet mask.
- Private ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) are reserved for internal networks and are not routed on the Internet.
- CIDR notation (/prefix) replaces classful addressing, allowing flexible allocation of IP address blocks.
- Subnetting divides larger networks into smaller segments, improving organization, security, and efficiency.
- Use
ipcalcto quickly compute network, broadcast, and host ranges for any CIDR block. - IPv6 provides 128-bit addresses, solving the IPv4 exhaustion problem and simplifying network configuration with features like auto-configuration.
What’s Next
In Lesson 13, you will learn Socket Programming Fundamentals — how applications communicate over the network using the socket API, with hands-on examples using Python and netcat.
繁體中文
概述
- 學習目標:IPv4 位址結構、位址類別、私有範圍、子網遮罩、CIDR 表示法、子網計算方法,以及 IPv6 介紹。
- 先決條件:第 11 課 – OSI 模型與 TCP/IP 協定套件
- 預計閱讀時間:22 分鐘
簡介
IP 位址是允許裝置在網路上通訊的基本識別碼。每台伺服器、工作站、路由器和物聯網裝置都需要至少一個 IP 位址才能參與網路通訊。了解 IP 位址的工作原理、如何將網路劃分為子網,以及 CIDR 表示法如何簡化定址,對任何 Linux 系統管理員來說都是必不可少的。
IPv4 位址結構
IPv4 位址是一個 32 位元的數字,通常以點分十進位表示法寫成四個八位元組,以點分隔。每個八位元組代表 8 個位元,值範圍從 0 到 255。
網路部分和主機部分
每個 IP 位址分為兩部分:網路部分(識別裝置所屬的網路)和主機部分(識別該網路上的特定裝置)。子網遮罩決定分界線在哪裡。
位址類別(歷史)
最初 IPv4 位址被分為五個類別。雖然有類別定址已被 CIDR 取代,但了解類別有助於閱讀較舊的文件:
- A 類(1.0.0.0 – 126.255.255.255):/8 遮罩。126 個網路,每個約 1670 萬台主機。
- B 類(128.0.0.0 – 191.255.255.255):/16 遮罩。16,384 個網路,每個約 65,534 台主機。
- C 類(192.0.0.0 – 223.255.255.255):/24 遮罩。約 210 萬個網路,每個 254 台主機。
- D 類(224.0.0.0 – 239.255.255.255):多播位址。
- E 類(240.0.0.0 – 255.255.255.255):保留供實驗用途。
私有 IP 位址範圍
RFC 1918 定義了三個不可在公共網際網路上路由的私有位址範圍。這些用於內部網路,並透過 NAT(網路位址轉換)轉換為公共位址:
- 10.0.0.0/8:10.0.0.0 – 10.255.255.255(16,777,216 個位址)
- 172.16.0.0/12:172.16.0.0 – 172.31.255.255(1,048,576 個位址)
- 192.168.0.0/16:192.168.0.0 – 192.168.255.255(65,536 個位址)
子網遮罩
子網遮罩是一個 32 位元的數字,用於遮蔽 IP 位址的網路部分。它由連續的 1(網路位元)和隨後的連續 0(主機位元)組成。
CIDR 表示法
CIDR(無類別域間路由)於 1993 年引入,取代有類別定址並減緩 IPv4 位址耗盡。CIDR 使用後綴表示法,指示多少位元構成網路前綴。
子網劃分實務
子網劃分是將較大的網路分割成較小子網路的過程。這可以改善安全性、減少廣播域,並有效利用位址空間。
IPv6 介紹
IPv6 使用 128 位元位址,提供比 IPv4 大得多的位址空間。位址寫成八組四個十六進位數字,以冒號分隔。
重要觀念
- IPv4 位址是 32 位元數字,以點分十進位表示法寫成;每個位址有由子網遮罩定義的網路和主機部分。
- 私有範圍(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)保留供內部網路使用,不在網際網路上路由。
- CIDR 表示法(/前綴)取代有類別定址,允許靈活分配 IP 位址區塊。
- 子網劃分將較大的網路分為較小的區段,改善組織、安全性和效率。
- 使用
ipcalc快速計算任何 CIDR 區塊的網路、廣播和主機範圍。 - IPv6 提供 128 位元位址,解決 IPv4 耗盡問題,並透過自動設定等功能簡化網路設定。
下一步
在第 13 課中,您將學習 Socket 程式設計基礎——應用程式如何使用 socket API 在網路上通訊,並透過 Python 和 netcat 進行實作練習。
日本語
概要
- 学習内容:IPv4アドレス構造、アドレスクラス、プライベート範囲、サブネットマスク、CIDR表記、サブネット計算方法、およびIPv6の紹介。
- 前提条件:レッスン11 – OSIモデルとTCP/IPプロトコルスイート
- 推定読了時間:22分
はじめに
IPアドレスは、デバイスがネットワーク上で通信するための基本的な識別子です。すべてのサーバー、ワークステーション、ルーター、IoTデバイスは、ネットワーク通信に参加するために少なくとも1つのIPアドレスが必要です。IPアドレスの仕組み、ネットワークをサブネットに分割する方法、CIDR表記がアドレッシングをどのように簡素化するかを理解することは、Linuxシステム管理者にとって不可欠です。
IPv4アドレス構造
IPv4アドレスは32ビットの数値で、通常ドットで区切られた4つのオクテットのドット付き10進表記で記述されます。各オクテットは8ビットを表し、値の範囲は0から255です。
ネットワーク部分とホスト部分
すべてのIPアドレスは2つの部分に分かれます:ネットワーク部分(デバイスが属するネットワークを識別)とホスト部分(そのネットワーク上の特定のデバイスを識別)。サブネットマスクが分割点を決定します。
アドレスクラス(歴史的)
当初、IPv4アドレスは5つのクラスに分けられていました。クラスフルアドレッシングはCIDRに置き換えられましたが、クラスを理解することは古いドキュメントを読む際に役立ちます:
- クラスA(1.0.0.0 – 126.255.255.255):/8マスク。126ネットワーク、各約1670万ホスト。
- クラスB(128.0.0.0 – 191.255.255.255):/16マスク。16,384ネットワーク、各約65,534ホスト。
- クラスC(192.0.0.0 – 223.255.255.255):/24マスク。約210万ネットワーク、各254ホスト。
- クラスD(224.0.0.0 – 239.255.255.255):マルチキャストアドレス。
- クラスE(240.0.0.0 – 255.255.255.255):実験用に予約。
プライベートIPアドレス範囲
RFC 1918は、パブリックインターネット上でルーティングされない3つのプライベートアドレス範囲を定義しています。これらは内部ネットワークで使用され、NAT(ネットワークアドレス変換)を介してパブリックアドレスに変換されます:
- 10.0.0.0/8:10.0.0.0 – 10.255.255.255(16,777,216アドレス)
- 172.16.0.0/12:172.16.0.0 – 172.31.255.255(1,048,576アドレス)
- 192.168.0.0/16:192.168.0.0 – 192.168.255.255(65,536アドレス)
サブネットマスク
サブネットマスクは、IPアドレスのネットワーク部分をマスクする32ビットの数値です。連続する1(ネットワークビット)の後に連続する0(ホストビット)で構成されます。
CIDR表記
CIDR(クラスレスドメイン間ルーティング)は1993年にクラスフルアドレッシングを置き換え、IPv4アドレスの枯渇を遅らせるために導入されました。CIDRはネットワークプレフィックスを構成するビット数を示すサフィックス表記を使用します。
サブネット分割の実践
サブネット分割は、大きなネットワークを小さなサブネットワークに分割するプロセスです。セキュリティの向上、ブロードキャストドメインの縮小、アドレス空間の効率的な使用を実現します。
IPv6の紹介
IPv6は128ビットアドレスを使用し、IPv4よりもはるかに大きなアドレス空間を提供します。アドレスはコロンで区切られた4桁の16進数の8グループとして記述されます。
重要ポイント
- IPv4アドレスはドット付き10進表記で記述される32ビットの数値で、各アドレスにはサブネットマスクで定義されるネットワーク部分とホスト部分があります。
- プライベート範囲(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)は内部ネットワーク用に予約され、インターネット上ではルーティングされません。
- CIDR表記(/プレフィックス)はクラスフルアドレッシングを置き換え、IPアドレスブロックの柔軟な割り当てを可能にします。
- サブネット分割は大きなネットワークを小さなセグメントに分割し、組織化、セキュリティ、効率性を向上させます。
ipcalcを使用して任意のCIDRブロックのネットワーク、ブロードキャスト、ホスト範囲を素早く計算できます。- IPv6は128ビットアドレスを提供し、IPv4の枯渇問題を解決し、自動設定などの機能でネットワーク設定を簡素化します。
次のステップ
レッスン13では、ソケットプログラミングの基礎を学びます——アプリケーションがソケットAPIを使用してネットワーク上でどのように通信するか、Pythonとnetcatによるハンズオンの例を紹介します。