Какой диапазон значений у IP-адресов IPv4 и IPv6?

Ответ

Диапазоны IP-адресов различаются для IPv4 и IPv6.

IPv4

  • Формат: 32 бита, представляемые как четыре десятичных числа (октета) от 0 до 255, разделенных точками (например, 192.168.1.1).
  • Общий диапазон: От 0.0.0.0 до 255.255.255.255.
  • Частные (не маршрутизируемые в Интернете) диапазоны RFC 1918:
    • 10.0.0.010.255.255.255 (маска /8)
    • 172.16.0.0172.31.255.255 (маска /12)
    • 192.168.0.0192.168.255.255 (маска /16)
  • Широковещательный адрес в локальной сети: 255.255.255.255.

IPv6

  • Формат: 128 бит, представляемые как восемь групп по четыре шестнадцатеричных цифры, разделенных двоеточиями (например, 2001:0db8:85a3:0000:0000:8a2e:0370:7334).
  • Общий диапазон: От :: (все нули) до ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff.
  • Важные зарезервированные диапазоны:
    • ::1/128 — адрес loopback.
    • fe80::/10 — link-local адреса (аналог APIPA 169.254.x.x в IPv4).
    • fc00::/7 — уникальные локальные адреса (ULA, аналог частных диапазонов в IPv4).
    • ff00::/8 — multicast адреса.

Пример проверки IPv4 на C++:

#include <string>
#include <sstream>
#include <vector>

bool isValidIPv4(const std::string& ip) {
    std::vector<int> parts;
    std::stringstream ss(ip);
    std::string part;

    while (std::getline(ss, part, '.')) {
        if (part.empty()) return false;
        for (char c : part) if (!isdigit(c)) return false;

        int num = std::stoi(part);
        if (num < 0 || num > 255) return false;
        parts.push_back(num);
    }
    return parts.size() == 4;
}

Ответ 18+ 🔞

А, ну это про айпишники, да? Ёпта, сидишь ты такой, настраиваешь роутер, а там тебе — введи адрес. И начинается: то точку забыл, то число больше 255 впихнул, а оно тебе — ошибка, иди нахуй. Давайте разберёмся, что к чему, а то волнение ебать, с этими цифрами.

Вот есть два главных типа, как два брата, но один старше и тупее, а второй младше и заумный до овердохуища.

IPv4 — старый дед, но пока живой

  • Как выглядит: Четыре числа через точки, от 0 до 255. Типа 192.168.1.1. Всего 32 бита, если кому интересно.
  • Где вообще могут быть адреса: От 0.0.0.0 до 255.255.255.255. Но не все они для нас, простых смертных.
  • Наши, домашние, внутренние (RFC 1918): Те, которые в интернет не светятся, чтоб не позориться. Запомни три штуки:
    • 10.0.0.010.255.255.255 (огромная сеть, маска /8)
    • 172.16.0.0172.31.255.255 (поменьше, маска /12)
    • 192.168.0.0192.168.255.255 (самая популярная, маска /16) — вот это у тебя скорее всего на роутере и висит.
  • Крик на всю деревню: 255.255.255.255 — это чтобы орать всем устройствам в локальной сети сразу.

IPv6 — молодой и дерзкий, но нихуя не понятный

  • Как выглядит: Восемь кусков из шестнадцатеричных цифр, разделённых двоеточием. Например, 2001:0db8:85a3:0000:0000:8a2e:0370:7334. Ёб твою мать, 128 бит! Адресов — просто овердохуища.
  • Диапазон: От :: (полный ноль) до ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff (полная хуйня).
  • Важные штуки, которые выделили:
    • ::1/128 — это localhost, себя любимого.
    • fe80::/10 — link-local, типа "я сам с собой договорился", когда DHCP сдох.
    • fc00::/7 — наши, внутренние, типа частных в IPv4.
    • ff00::/8 — для рассылки всем-всем-всем (multicast).

А вот, бля, пример кода на C++, как проверить IPv4 Чтоб не вводить хуйню в программу. Смотри, тут всё просто: разбиваем строку по точкам, смотрим, чтобы было ровно 4 числа, и каждое было от 0 до 255. Если нет — значит, пидарас шерстяной что-то напутал.

#include <string>
#include <sstream>
#include <vector>

bool isValidIPv4(const std::string& ip) {
    std::vector<int> parts;
    std::stringstream ss(ip);
    std::string part;

    while (std::getline(ss, part, '.')) {
        if (part.empty()) return false;
        for (char c : part) if (!isdigit(c)) return false;

        int num = std::stoi(part);
        if (num < 0 || num > 255) return false;
        parts.push_back(num);
    }
    return parts.size() == 4;
}

Вот и вся магия. Главное — не перепутать, где точка, а где двоеточие, а то получится какая-то мартышлюшка, а не адрес.