В чем разница между коммутатором (switch) и маршрутизатором (router) в контексте компьютерных сетей?

«В чем разница между коммутатором (switch) и маршрутизатором (router) в контексте компьютерных сетей?» — вопрос из категории Сети, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Коммутатор (L2-свитч) и маршрутизатор (роутер) — это сетевые устройства, работающие на разных уровнях модели OSI и решающие разные задачи.

Критерий Коммутатор (Switch) Маршрутизатор (Router)
Уровень OSI Канальный (L2) Сетевой (L3)
Адресация Работает с MAC-адресами (физическими адресами сетевых карт). Работает с IP-адресами (логическими адресами).
Основная функция Сегментация LAN (локальной сети). Создает отдельные домены коллизий для каждого порта и эффективно пересылает кадры (frames) между устройствами в одной подсети, используя таблицу MAC-адресов (CAM-table). Соединение разных сетей. Определяет оптимальный путь для пакетов (packets) между различными IP-сетями (например, между вашей домашней сетью и интернетом), используя таблицу маршрутизации.
Домен широковещания Обычно все порты коммутатора находятся в одном широковещательном домене (VLAN может сегментировать). Порт маршрутизатора является границей широковещательного домена. Он по умолчанию не пропускает широковещательный трафик (broadcast) между сетями.
Пример аналогии Телефонная станция в одном офисе. Она соединяет внутренние номера (MAC), зная, кто где сидит. Почтовое отделение. Оно смотрит на индекс города (сеть IP) и адрес улицы (хост IP), чтобы отправить письмо в другой город (другую сеть).

Пример в контексте программирования (сокеты):

// Приложение работает на уровне L4 (TCP/UDP) и выше, но использует результаты работы L2 и L3.
// 1. Ваша программа (например, на C++ с библиотекой Boost.Asio) создает сокет.
boost::asio::ip::tcp::socket socket(io_context);
// 2. Вы указываете IP-адрес и порт удаленного сервера (L3+L4).
boost::asio::ip::tcp::endpoint endpoint(
    boost::asio::ip::make_address("93.184.216.34"), // IP-адрес (работа маршрутизатора)
    80 // Порт
);
// 3. При попытке соединения:
//    - Операционная система смотрит в свою таблицу маршрутизации, чтобы найти шлюз (router) для целевой IP-сети.
//    - Затем ARP-протокол находит MAC-адрес этого шлюза в локальной сети (работа коммутатора).
//    - Коммутатор доставляет кадр с вашего компьютера до порта маршрутизатора.
//    - Маршрутизатор обрабатывает IP-пакет и пересылает его дальше в интернет.
socket.connect(endpoint);

Итог: Коммутатор — для эффективной локальной связи, маршрутизатор — для глобальной связности между сетями.