Ответ
Маска подсети — это битовая маска, которая определяет, какая часть IP-адреса идентифицирует сеть, а какая — конкретный узел (хост) в этой сети.
Принцип работы:
- Представлена 32-битным числом (для IPv4), где последовательные единицы (
1) обозначают сетевую часть, а нули (0) — хостовую. - Применяется побитовая операция AND между IP-адресом и маской для получения адреса сети.
Пример:
- IP-адрес:
192.168.1.10(в двоичном виде:11000000.10101000.00000001.00001010) - Маска:
255.255.255.0(в двоичном виде:11111111.11111111.11111111.00000000) - Адрес сети = IP & Маска =
192.168.1.0
Практическое применение в Java (определение принадлежности к сети):
import java.net.InetAddress;
import java.net.UnknownHostException;
public class SubnetChecker {
public static boolean isInSameSubnet(String ip1, String ip2, String subnetMask)
throws UnknownHostException {
InetAddress a1 = InetAddress.getByName(ip1);
InetAddress a2 = InetAddress.getByName(ip2);
InetAddress mask = InetAddress.getByName(subnetMask);
byte[] b1 = a1.getAddress();
byte[] b2 = a2.getAddress();
byte[] m = mask.getAddress();
for (int i = 0; i < b1.length; i++) {
if ((b1[i] & m[i]) != (b2[i] & m[i])) {
return false; // Адреса в разных подсетях
}
}
return true; // Адреса в одной подсети
}
public static void main(String[] args) throws UnknownHostException {
System.out.println(isInSameSubnet("192.168.1.10", "192.168.1.20", "255.255.255.0")); // true
System.out.println(isInSameSubnet("192.168.1.10", "192.168.2.10", "255.255.255.0")); // false
}
}
Зачем это нужно? Маски подсети позволяют эффективно делить большие сети на меньшие (подсети) для улучшения маршрутизации, безопасности и управления.
Ответ 18+ 🔞
А, маска подсети, ёпта! Ну это ж классика, блядь, как "Муму" у Тургенева, только без утопления собаки, но с тем же трагическим максимализмом, сука!
Представь себе, что IP-адрес — это, блядь, адрес дома. Ну, типа, "улица Ленина, дом 10, квартира 5". Так вот, маска подсети — это такая, блядь, хитрая жопа, которая говорит: "Слушай, чувак, а давай мы тут на хуй забьём на квартиры и будем смотреть только на улицу и дом!". Или наоборот: "А давай мы будем смотреть на каждый горшок с цветком на балконе!".
Как эта падла работает, блядь:
- Это просто 32 бита (для нашего старого доброго IPv4), где сплошные единички (
1) кричат: "ЭТО СЕТЬ, БЛЯДЬ, ТУТ НЕ ЛЕЗЬ!", а нулики (0) шепчут: "А тут уже хост, можно похавать, тут наши ребята". - Чтобы выяснить, кто в какой сети, надо наложить эту маску на IP через операцию AND. Это как умножить, но только для битов, сука. Если оба бита единицы — будет единица. Всё остальное — ноль, в рот меня чих-пых!
Пример, чтобы не обосраться:
- Адрес узла:
192.168.1.10(внутри:11000000.10101000.00000001.00001010) - Маска:
255.255.255.0(внутри:11111111.11111111.11111111.00000000) - Адрес сети = IP & Маска =
192.168.1.0
Видишь? Маска 255.255.255.0 сказала: "Первые три октета — это святое, это сеть, а последний октет — это уже ваши разборки, похуй". Вот и получилась сеть 192.168.1.0.
А вот как это на Java проверить, чтобы не быть, как Герасим, немым и тупым:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class SubnetChecker {
public static boolean isInSameSubnet(String ip1, String ip2, String subnetMask)
throws UnknownHostException {
InetAddress a1 = InetAddress.getByName(ip1);
InetAddress a2 = InetAddress.getByName(ip2);
InetAddress mask = InetAddress.getByName(subnetMask);
byte[] b1 = a1.getAddress();
byte[] b2 = a2.getAddress();
byte[] m = mask.getAddress();
for (int i = 0; i < b1.length; i++) {
if ((b1[i] & m[i]) != (b2[i] & m[i])) {
return false; // Адреса в разных подсетях, пиздец, не пущаем!
}
}
return true; // Адреса в одной подсети, проходи, братан
}
public static void main(String[] args) throws UnknownHostException {
System.out.println(isInSameSubnet("192.168.1.10", "192.168.1.20", "255.255.255.0")); // true
System.out.println(isInSameSubnet("192.168.1.10", "192.168.2.10", "255.255.255.0")); // false
}
}
А нахуя это всё, спрашивается? Да чтобы порядок был, блядь! Чтобы не было, как в той басне: все пиздуют по одной большой сети, друг другу пакеты мешают, безопасность — хуй, а трафик — как говно в проруби. Маска позволяет разбить эту толпу на аккуратные дворы-подсети. Для маршрутизации (чтобы знать, куда слать), для безопасности (чтобы чужие не лезли) и для управления, чтобы не было, блядь, бардака. Вот и вся философия, ебать мои старые костыли!