Локальная связность: IP-адреса, Маски, ARP и работа Switch
В прошлой статье мы разобрали, как биты бегают по проводам и как данные упаковываются в «матрешку» (инкапсуляция). Теперь пришло время оживить нашу сеть. Представьте, что вы подключили три компьютера в один коммутатор (Switch). Как они находят друг друга? Как компьютер понимает, кому предназначено сообщение?
Здесь в игру вступают три кита локальной сети: IP-адресация, Маска подсети и протокол ARP.
IP-адрес: Логический паспорт устройства
MAC-адрес, о котором мы говорили ранее, «вшит» в сетевую карту на заводе. Это как отпечаток пальца: уникальный, но хаотичный. По отпечатку пальца нельзя понять, в какой стране или городе живет человек.
Чтобы организовать доставку данных, нужна иерархия. Эту роль выполняет IP-адрес (Internet Protocol Address). Это логический адрес, который выдается администратором или автоматически.
Самая распространенная версия — IPv4. Это 32-битное число, которое для удобства записывают в виде четырех десятичных чисел, разделенных точками (октетов).
Пример: 192.168.1.10
Каждый IP-адрес состоит из двух частей:
Адрес сети (Network ID): Название улицы.
Адрес хоста (Host ID): Номер дома.Но где заканчивается улица и начинается номер дома? В адресе 192.168.1.10 улицей может быть 192.168.1, а домом 10. Или улицей 192.168, а домом 1.10. Чтобы компьютер знал, где граница, нужна Маска подсети.
Маска подсети: Граница миров
Маска подсети (Subnet Mask) — это шаблон, который накладывается на IP-адрес. Она говорит компьютеру: «Вот эта часть адреса — общая для всех наших (сеть), а вот эта — уникальный номер соседа (хост)».
Маска всегда состоит из последовательности единиц, за которыми следуют нули.
* 255 в маске означает: «Смотри на это число в IP-адресе, это часть адреса сети».
* 0 в маске означает: «Это число — адрес конкретного устройства».
Рассмотрим классический пример:
* IP: 192.168.1.10
* Маска: 255.255.255.0
Компьютер выполняет побитовую операцию И (AND) между IP и Маской, чтобы получить адрес сети.
Где — адрес сети, — адрес устройства, — маска подсети, а — побитовое умножение.
Давайте посчитаем на простом примере последнего октета (числа). Если у нас IP заканчивается на 10, а маска на 0:
Если маска 255 (в бинарном виде все единицы), то число остается неизменным.
В итоге для 192.168.1.10 с маской 255.255.255.0:
* Первые три числа (192.168.1) — это Сеть.
* Последнее число (10) — это Хост.
!Как маска подсети делит IP-адрес на адрес сети и адрес устройства
Зачем это нужно?
Перед отправкой любого пакета компьютер задает себе главный вопрос: «Получатель находится в моей сети или в чужой?»
Компьютер берет свой IP и свою Маску -> вычисляет свою Сеть.
Берет IP получателя и свою Маску -> вычисляет Сеть получателя.
Сравнивает.
*
Если сети совпадают: Получатель — мой сосед. Я отправлю данные ему напрямую.
*
Если сети разные: Получатель далеко. Я отправлю данные на
Шлюз (Gateway/Router), пусть он разбирается.
Switch (Коммутатор): Умный почтальон
Допустим, компьютер понял, что получатель находится в одной с ним локальной сети. Данные спускаются на Канальный уровень (Layer 2), где правят бал MAC-адреса и устройство под названием Switch.
Свитч выглядит как коробка с кучей разъемов (портов). В отличие от старых хабов (Hub), которые тупо копировали сигнал во все порты, Свитч — интеллектуальное устройство.
У Свитча есть MAC-таблица (CAM table). Она работает так:
| Порт | MAC-адрес устройства |
| :--- | :--- |
| 1 | AA:AA:AA:AA:AA:AA |
| 2 | BB:BB:BB:BB:BB:BB |
Алгоритм работы Свитча:
Обучение (Learning): Когда кадр заходит в порт №1, Свитч смотрит на MAC-адрес отправителя. Он записывает: «Ага, устройство с MAC AA... живет на порту 1».
Продвижение (Forwarding): Затем Свитч смотрит на MAC-адрес получателя.
Если он знает, где этот MAC (есть в таблице), он отправляет кадр только* в нужный порт.
Если он не знает* этого адреса, он отправляет кадр во
все порты, кроме того, откуда пришел сигнал (это называется Flood).
!Коммутатор отправляет данные точечно, используя таблицу MAC-адресов
ARP: Недостающее звено
Здесь возникает проблема.
* Мы (как люди и программы) знаем IP-адрес получателя (например, 192.168.1.5).
* Свитч и сетевая карта умеют доставлять только по MAC-адресу.
Как узнать MAC-адрес соседа, зная только его IP? Нам нужен протокол ARP (Address Resolution Protocol).
Это работает как перекличка в классе:
Запрос (ARP Request): Ваш компьютер кричит на всю сеть: «Эй, кто здесь имеет IP 192.168.1.5? Скажи мне свой MAC!».
* Этот запрос отправляется на специальный
Broadcast MAC-адрес:
FF:FF:FF:FF:FF:FF. Свитч обязан разослать такой кадр абсолютно всем.
Ответ (ARP Reply): Устройство с IP 192.168.1.5 слышит запрос, узнает себя и отвечает (уже лично вам): «Это я! Мой MAC — BB:BB...».
Кэширование: Ваш компьютер запоминает эту связку (IP -> MAC) в своей ARP-таблице, чтобы не кричать каждый раз.Движение пакета в простой сети (Step-by-Step)
Давайте соберем всё вместе.
Дано:
* Компьютер А (IP: 10.0.0.1, MAC: AAAA)
* Компьютер Б (IP: 10.0.0.2, MAC: BBBB)
* Они подключены к одному Свитчу.
* А хочет отправить файл Б.
Процесс:
Проверка маски: Компьютер А накладывает маску на свой IP и IP Б. Результат: «Мы в одной сети».
Поиск MAC: Компьютер А смотрит в свою ARP-таблицу: «Знаю ли я MAC для 10.0.0.2?»
Сценарий 1: Не знаю.* Компьютер А формирует ARP-запрос. Свитч рассылает его всем. Б отвечает своим MAC-адресом. А сохраняет его.
Инкапсуляция:
* Данные упаковываются в Пакет (IP отправителя
10.0.0.1, IP получателя
10.0.0.2).
* Пакет упаковывается в Кадр (MAC отправителя
AAAA, MAC получателя
BBBB).
Отправка: Кадр летит в провод к Свитчу.
Коммутация: Свитч получает кадр на порту 1.
* Обновляет таблицу: «
AAAA на порту 1».
* Смотрит получателя:
BBBB. Ищет в таблице.
* Находит: «
BBBB на порту 2».
Доставка: Свитч отправляет кадр только в порт 2.
Прием: Компьютер Б получает кадр, сверяет MAC (совпал), снимает упаковку и забирает данные.!Алгоритм действий компьютера перед отправкой данных в локальной сети
Итоги
IP-адрес — это логический адрес. С помощью Маски подсети он делится на адрес Сети (улица) и адрес Хоста (дом).
Маска подсети нужна, чтобы понять: получатель «свой» (в локальной сети) или «чужой» (нужен роутер).
ARP — это клей между IP и MAC. Он позволяет узнать физический адрес устройства по его IP-адресу через широковещательный запрос.
Switch (Коммутатор) работает на 2-м уровне (Канальном). Он использует MAC-адреса для точечной доставки данных и не смотрит на IP-адреса.
Broadcast (FF:FF:FF:FF:FF:FF) — это адрес «для всех». Свитч рассылает такие кадры во все порты.