Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Маска подсети
Маска подсети (subnet mask) — это 32-битное число в IPv4, которое определяет, какая часть IP-адреса относится к сетевому адресу, а какая — к адресу хоста в этой сети. Она используется для разделения IP-адресов на сетевые подсети и является фундаментальным понятием в компьютерных сетях.
Как работает маска подсети
Маска подсети состоит из последовательности единиц (1), за которыми следует последовательность нулей (0). Единицы обозначают сетевую часть адреса, нули — хостовую часть.
Пример маски подсети:
- Десятичный формат:
255.255.255.0 - Двоичный формат:
11111111.11111111.11111111.00000000 - CIDR нотация:
/24
Применение маски подсети
Для определения сетевого адреса выполняется поразрядная конъюнкция (AND) между IP-адресом и маской подсети:
public class SubnetMaskExample {
public static void main(String[] args) {
// IP-адрес: 192.168.1.130
// Маска подсети: 255.255.255.0 (/24)
String ipAddress = "192.168.1.130";
String subnetMask = "255.255.255.0";
// Результат операции AND:
// 192.168.1.130 AND 255.255.255.0 = 192.168.1.0
// Это сетевой адрес подсети
byte[] ip = {(byte)192, (byte)168, 1, (byte)130};
byte[] mask = {(byte)255, (byte)255, (byte)255, 0};
byte[] network = new byte[4];
for (int i = 0; i < 4; i++) {
network[i] = (byte)(ip[i] & mask[i]);
}
System.out.println("IP: " + ipToString(ip));
System.out.println("Маска: " + ipToString(mask));
System.out.println("Сетевой адрес: " + ipToString(network));
}
static String ipToString(byte[] bytes) {
return String.format("%d.%d.%d.%d",
bytes[0] & 0xFF, bytes[1] & 0xFF,
bytes[2] & 0xFF, bytes[3] & 0xFF);
}
}
Стандартные маски подсети
| CIDR | Маска | Хостов в сети | Использование |
|---|---|---|---|
| /24 | 255.255.255.0 | 254 | Локальная сеть (LAN) |
| /25 | 255.255.255.128 | 126 | Подсети |
| /26 | 255.255.255.192 | 62 | Маленькие подсети |
| /30 | 255.255.255.252 | 2 | Связь маршрутизаторов |
| /16 | 255.255.0.0 | 65534 | Большие сети |
| /8 | 255.0.0.0 | 16777214 | Огромные сети |
Вычисление количества адресов
Количество адресов в подсети вычисляется по формуле:
- Адресов в сети = 2^(32 - CIDR)
- Адресов хостов = 2^(32 - CIDR) - 2 (вычитаем сетевой и широковещательный адреса)
Пример:
- Маска
/24: 2^(32-24) = 2^8 = 256 адресов, из них 254 для хостов - Маска
/30: 2^(32-30) = 2^2 = 4 адреса, из них 2 для хостов
Практическое применение в Java сетевых приложениях
import java.net.InetAddress;
public class NetworkCalculations {
public static boolean isInSubnet(String ipAddress, String subnetCIDR)
throws Exception {
String[] parts = subnetCIDR.split("/");
String networkAddress = parts[0];
int prefixLength = Integer.parseInt(parts[1]);
// Преобразуем IP-адреса в 32-битные целые числа
int ip = ipToInt(InetAddress.getByName(ipAddress));
int network = ipToInt(InetAddress.getByName(networkAddress));
// Создаём маску подсети
int mask = (0xFFFFFFFF << (32 - prefixLength));
// Проверяем, находится ли IP в подсети
return (ip & mask) == (network & mask);
}
private static int ipToInt(InetAddress addr) {
byte[] octets = addr.getAddress();
int result = 0;
for (byte octet : octets) {
result = (result << 8) | (octet & 0xFF);
}
return result;
}
public static void main(String[] args) throws Exception {
// Проверяем, находится ли 192.168.1.100 в подсети 192.168.1.0/24
boolean inSubnet = isInSubnet("192.168.1.100", "192.168.1.0/24");
System.out.println("IP в подсети: " + inSubnet); // true
inSubnet = isInSubnet("192.168.2.100", "192.168.1.0/24");
System.out.println("IP в подсети: " + inSubnet); // false
}
}
Почему маска подсети важна для Java-разработчиков
Хотя Java-разработчики редко работают напрямую с масками подсетей, их понимание критично для:
- Конфигурирования микросервисных архитектур в Docker/Kubernetes
- Сетевой безопасности и настройки firewall правил
- Отладки сетевых проблем в распределённых приложениях
- Работы с облачными сервисами (AWS, Azure), где управление VPC требует знания подсетей
- Развёртывания приложений в корпоративных сетях с несколькими подсетями
Маска подсети — это основной инструмент для логической организации IP-адресов и обеспечения правильной маршрутизации пакетов в компьютерных сетях.