В чем отличие маршрутизации от коммутации и на каких устройствах они происходят
Что проверяют
Понимаете ли вы, как пакет доходит от сервиса до базы в соседней подсети, а не только номера уровней OSI. Для DevOps следом часто спрашивают, где это происходит в Linux, Docker или облачной сети и как выяснить, почему один хост «не видит» другой.
Как отвечать
- коммутация (L2): пересылка кадров внутри одного широковещательного домена (сегмента, VLAN) по MAC-адресам. Коммутатор сам заполняет таблицу MAC-адресов, запоминая адрес отправителя и порт. Кадр на неизвестный адрес рассылается во все порты, поэтому петли опасны, и от них защищает STP;
- маршрутизация (L3): передача пакетов между разными сетями по IP. Маршрутизатор ищет в таблице маршрут с самым длинным совпадающим префиксом, уменьшает TTL и пересобирает L2-заголовок: MAC-адреса меняются на каждом хопе, IP остаются прежними, если нет NAT;
- откуда маршруты: статические, от протоколов динамической маршрутизации (OSPF внутри сети, BGP между автономными системами и во многих дата-центрах), плюс маршрут по умолчанию;
- устройства: коммутаторы, маршрутизаторы и L3-коммутаторы, которые умеют и то и другое и маршрутизируют между VLAN аппаратно. А также любой Linux-хост.
Свяжите это с повседневной работой. Хост решает, куда слать пакет, по своей маске: адрес в своей подсети, значит ARP-запрос и отправка напрямую; иначе кадр уходит на MAC шлюза по умолчанию. В Linux ip route показывает таблицу маршрутизации, ip neigh таблицу ARP. Bridge docker0 это программный коммутатор, а сам хост маршрутизирует, если включён net.ipv4.ip_forward. В облаке роль маршрутизатора играют таблицы маршрутизации VPC.
Где спотыкаются
Говорят, что коммутатор «работает с IP». Классический L2-коммутатор IP-заголовок не читает, адрес у него бывает только для управления.
Считают, что при прохождении через маршрутизатор меняются IP-адреса. Меняются MAC, а IP переписывает только NAT.
Не могут объяснить, зачем хосту шлюз по умолчанию, и путают маску подсети с маршрутом. Из-за этого не находят причину, когда два сервиса в разных подсетях не видят друг друга.