usepoint
menu

Адресация и идентификаторы: как IP, MAC и порты организуют сети

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

ip-mac-port

Содержание

Для адресации и идентификации используются три ключевых «типа адресов»:

  • IP-адрес - логический адрес устройства в мире TCP/IP;
  • MAC-адрес - физический идентификатор сетевого адаптера (сетевой карты);
  • Порт - номер сервиса/приложения на конкретном IP-адресе.

IP-адрес: логический адрес устройства

IP-адрес - это число, по которому устройство видно в сетевом мире TCP/IP.

Сегодня используются две версии:

  1. IPv4 - более старый и до сих пор основной.
    • 192.168.0.5
    • 10.0.3.17
    • 203.0.113.42
    • Записывается как 4 числа от 0 до 255, разделенных точками:
  2. IPv6 - новая версия с сильно большим адресным пространством.
    • 2001:0db8:85a3:0000:0000:8a2e:0370:7334
    • Записывается в виде 8 блоков шестнадцатеричных чисел, разделённых двоеточиями:
    • Можно сокращать нули: 2001:db8::1

Зачем понадобился IPv6

Адресов IPv4 мало - примерно 4,3 млрд. Когда интернет сильно вырос (дома, телефоны, умные устройства, сервера, облака), стало понятно, что если мы каждому дадим уникальный публичный IPv4, их просто не хватит.

IPv6 решает это радикально - там настолько много адресов, что можно выделять огромные блоки подсетей и не экономить.

На практике сейчас внутренняя логика и базовая теория обычно объясняется на IPv4 - проще и нагляднее, а IPv6 постепенно внедряют провайдеры и крупные сервисы, но в голове всё равно можно думать:
«это тоже просто адрес узла, только записанный по-другому».

Уникальность IP-адресов

В одной логической сети (внутри одной подсети) IP-адреса должны быть уникальны. Не может быть двух разных устройств с одинаковым IP в одной и той же сети - будет конфликт.

В глобальном интернете публичные IP-адреса тоже уникальны, чтобы пакет с этим адресом мог однозначно дойти до нужного владельца.

Но есть нюанс - приватные IP-адреса (например, 192.168.0.10) могут повторяться в разных локальных сетях, потому что эти сети не видят друг друга напрямую и на границе стоят маршрутизаторы и NAT (чуть позже разберём).

Поэтому корректнее сказать, что IP-адрес - это «адрес в какой-то сети». Внутри одной сети он должен быть уникален.
Один и тот же приватный IP может встречаться в тысячах разных офисов и квартир, но они отделены друг от друга маршрутизаторами.

Подсети и маски

Чтобы управлять не отдельными IP-адресами, а группами, сеть делят на подсети.

Подсеть - это группа IP-адресов, объединённая логически и технически. Для них можно задавать общие правила доступа.

Запись подсети:

  • 192.168.5.0/24
    или
  • «сеть 192.168.5.0 с маской 255.255.255.0»

Здесь:

  • 192.168.5.0 - «базовый адрес сети»;
  • /24 - это маска в коротком виде:
    означает «24 бита отводим под номер сети, остальные - под номер устройства».

Что это значит по сути:

  • адреса от 192.168.5.0 до 192.168.5.255 принадлежат одной подсети;
  • из них:
    • 192.168.5.0 - служебный адрес сети,
    • 192.168.5.255 - broadcast (спец-адрес рассылки всем в этой сети),
    • реальные устройства используют адреса 192.168.5.1–192.168.5.254.

Маска подсети «по-старому»

Запись /24 - это сокращение от маски 255.255.255.0

Эта маска говорит:

  • первые три числа (255.255.255) - это часть адреса сети;
  • последнее (0) - можно изменять для адреса конкретного устройства.

Зачем нужны подсети

Подсети упрощают маршрутизацию, так как роутерам не нужно хранить маршрут к каждому IP, достаточно - к подсетям. Также упрощают безопасность - можно сказать:

    • «подсеть с адресами 10.0.1.0/24 - фронтенд-сервера»;
    • «подсеть 10.0.2.0/24 - базы данных»;
    • «разрешаем доступ к БД только из подсети фронтендов».

Статические и динамические IP-адреса

Статический IP

Статический IP-адрес - это IP, который прописывают вручную или жёстко закрепляют за устройством/клиентом. Он не меняется при перезагрузке устройства, не меняется при переподключении и считается «постоянным».

Примеры, где нужен статический IP:

  • публичный адрес сайта (203.0.113.10);
  • IP адрес внешнего API;
  • IP адрес VPN-шлюза;
  • иногда: важные внутренние сервисы, когда куча других систем настроена именно на этот IP.

Динамический IP

Динамический IP-адрес - это адрес, который устройство получает автоматически при подключении к сети и который может меняться после перезагрузки роутера, при переподключении к провайдеру и при окончании «срока аренды» адреса. Он не закреплён навсегда за конкретным клиентом.

Примеры:

  • домашний интернет у физических лиц;
  • Wi-Fi в кафе;
  • многие офисные внутренние сети (ноутбукам не важно, какой у них IP сегодня).

Почему вообще используют динамические адреса, а не только статические?

  1. Экономия адресов
    У провайдера или организации ограниченный пул адресов (особенно IPv4). Держать за каждым клиентом постоянный адрес - расточительно. Если клиент сейчас не в сети, его адрес можно выдать другому, кто сейчас подключился.
  2. Упрощение администрирования
    Не нужно вручную прописывать IP на каждом ноутбуке/телефоне. Достаточно подключиться - IP выдаётся автоматически. Если сетку надо чуть изменить (диапазон адресов, маску и т.д.), не нужно бегать по всем сотрудникам.
  3. Большинству клиентов не нужен постоянный адрес
    Пользователь просто «ходит в интернет» - открывает сайты, смотрит видео или играет. Ему не нужно, чтобы другие подключались к нему (к его ноутбуку) как к «серверу». Значит, стабильность публичного IP необязательна.
  4. Безопасность
    С точки зрения атакующего сложнее целенаправленно атаковать конкретного пользователя, если его внешний IP меняется. Это не сильная защита, но лишняя сложность для злоумышленников.

Как работает выдача динамических адресов (DHCP)

Чтобы динамические IP не выдавать вручную, используют специальный сервис.

DHCP (Dynamic Host Configuration Protocol) - протокол, по которому устройство говорит сети «Я новенький. Дайте мне, пожалуйста, IP и настройки», а сервер отвечает: «Вот тебе IP, маска, шлюз и DNS. Пользуйся до такого-то времени».

Теперь разберем чуть подробней:

Ноутбук подключился физически. Ты воткнул кабель или подключился к Wi-Fi. Ноутбук ещё не знает свой IP-адрес. Он пока просто «видит», что есть связь с сетью, но адрес ему никто не выдавал.

Ноутбук спрашивает: “Кто тут раздаёт адреса?”. В сети принято, что за раздачу адресов отвечает специальная служба - её называют DHCP-сервер.

DHCP-сервер - программа (часто внутри роутера), которая раздаёт IP-адреса и даёт остальные настройки сети.

Ноутбук отправляет по сети специальное сообщение примерно такого смысла: «Я новый. У меня ещё нет IP.
Есть ли здесь DHCP-сервер? Дайте мне настройки сети».

Это сообщение уходит всем в локальной сети (так называемый широковещательный запрос) - потому что у ноутбука ещё нет ни своего IP, ни IP сервера.

В сети есть либо роутер с включённой функцией DHCP, либо отдельный сервер с этой ролью. Он получает вопрос ноутбука и отвечает: «Я DHCP-сервер. Вот твои настройки».

В ответе он присылает несколько важных вещей:

  1. IP-адрес
    - твой номер в этой сети.
    Пример: 192.168.1.37.
  2. Маска подсети
    - правило, которое говорит ноутбуку:
    «вот эти адреса считаем “своими” (в моей локальной сети),
    а все остальные - “где-то там, снаружи”».
    Пример: 255.255.255.0 или /24.
  3. Шлюз по умолчанию
    - IP-адрес роутера, через который нужно выходить «наружу»,
    то есть в другие сети и в интернет.
    Пример: 192.168.1.1.
    Можно думать так:
    «Если адрес получателя не из моей локальной сети - отправляй всё этому дядьке, он разберётся».
  4. DNS-сервер
    - адрес сервиса, который знает, какие доменные имена (google.com, example.com) соответствуют каким IP-адресам.
    Пример: 8.8.8.8 или IP DNS-сервера провайдера.
    Это как «телефонный справочник интернета»:
    спрашиваешь: “какой IP у site.com?” - получаешь ответ.

Получив ответ, ноутбук:

  1. Запоминает выданный IP-адрес - теперь у него есть «номер в сети».
  2. Сохраняет маску подсети - понимает, кто «соседи», а кто «внешние».
  3. Записывает шлюз по умолчанию - знает, к кому слать всё “в интернет”.
  4. Записывает DNS-сервер - знает, у кого спрашивать IP по доменным именам.

Все эти данные он записывает в настройки своей сетевой карты.

С этого момента ноутбук может общаться с соседями по локальной сети (например, с принтером), ходить в интернет через роутер и открывать сайты по именам (ya.ru, google.com), а не по голым IP.

При этом IP-адрес выдаётся на время - это называется lease (аренда). Когда срок подходит к концу, устройство может продлить аренду или получить новый IP, если старый отдали кому-то другому.

NAT и CGNAT: как один публичный IP делят многие

Как уже говорили выше, с IPv4-адресами туго, их мало. Поэтому придумали NAT (Network Address Translation) - механизм подмены адресов.

NAT (трансляция сетевых адресов) - это механизм на роутере, который с одной стороны видит внутреннюю сеть с приватными IP, а с с другой - интернет с публичными IP. Он подменяет адреса в пакетах так, чтобы изнутри в интернет всё выглядело, как будто запросы идут с одного или нескольких публичных адресов, при этом разные внутренние устройства могут пользоваться одним внешним IP.

Пример домашней сети:

  • внутри у тебя:
    • ноутбук: 192.168.0.10,
    • телефон: 192.168.0.11,
    • ТВ-приставка: 192.168.0.12.
  • роутер:
    • снаружи имеет один публичный IP, например 203.0.113.50;
    • внутри - IP 192.168.0.1.

Когда ноутбук открывает сайт:

  1. Изнутри запрос идёт от 192.168.0.10 к внешнему адресу.
  2. Роутер получает пакет, меняет:
    • 192.168.0.10203.0.113.50,
    • запоминает у себя в таблице, что «если оттуда придёт ответ, его нужно вернуть на 192.168.0.10».
  3. В интернет уходит пакет с публичного IP роутера.
  4. Ответ приходит на 203.0.113.50, роутер по таблице понимает:
    • «это для ноутбука 192.168.0.10»,
    • меняет адрес обратно и отправляет внутрь.

Так один внешний IP может обслуживать десятки/сотни внутренних устройств. Это называется NAT или маскарадинг (маскарад: за одним лицом скрывается толпа).

CGNAT - NAT у провайдера

CGNAT (Carrier-Grade NAT) - это NAT на стороне провайдера.

С домашним роутером всё понятно: ты видишь у роутера «внешний IP» - это тот, который виден в интернете.

Но иногда у тебя вообще нет “своего” публичного IP. Провайдер даёт тебе внутренний адрес в своей сети, например: 100.64.x.x или что-то из приватных диапазонов. А уже у провайдера стоит большой NAT, который подменяет твой адрес и адресы других клиентов на какой-то набор публичных IP, и тогда много абонентов провайдера разделяют один и тот же внешний IP (или небольшой пул). Извне сложно (или вообще невозможно) «пробиться» к конкретной машине внутри, потому что провайдер не знает, кому из N клиентов направить входящий запрос.

MAC-адрес: физический идентификатор адаптера

Повторим термины:

Сетевой адаптер - железка/модуль, который подключает устройство к сети (Ethernet-разъём, Wi-Fi-модуль).

MAC-адрес - уникальный идентификатор этого адаптера.

Важно помнить, что MAC не виден и не используется в глобальной маршрутизации по интернету. Один и тот же приватный IP (192.168.0.10) может встречаться и у тебя дома, и в чужом офисе, но MAC у устройств будет разный и сети между собой не пересекаются.

Порты: как на одном IP живёт много сервисов

Порт: номер «двери» сервиса. Напомним:

Порт - это число от 0 до 65535, по которому операционная система понимает, какому приложению отдать входящий трафик.

Комбинация IP-адрес + порт = конкретный сервис на конкретном устройстве.

Порт можно воспринимать как «номер двери» или «номер квартиры» внутри дома с определённым адресом.

Примеры:

  • 203.0.113.10:80 - веб-сервер по HTTP;
  • 203.0.113.10:443 - тот же сервер, но HTTPS;
  • 203.0.113.10:25565 - Minecraft-сервер;
  • 203.0.113.10:5432 - сервер базы данных PostgreSQL.

Строгая обязательность тут только у некоторых протоколов, но «по традиции» используется:

Веб и API:

  • 80 - HTTP,
  • 443 - HTTPS.

Администрирование и базы:

  • 22 - SSH (удалённый доступ к серверу),
  • 5432 - PostgreSQL,
  • 3306 - MySQL.

Почта:

  • 25 - SMTP (отправка почты),
  • 110 - POP3 (получение почты),
  • 143 - IMAP (получение почты).