Как правило, сетевой мост - это устройство уровня L2, которое соединяет несколько сегментов сети в один. У него нет IP-адресов, и он просто отправляет кадры в каждый сегмент, кроме того, из которого он был получен (или более умный).
Но с мостом Linux вы получаете интерфейс с IP-адресом. Рассмотрим следующие диаграмма с участием docker
контейнеры:
(источник: docker.com)
В данном случае интерфейсы, о которых я говорю, docker0
и my_bridge
.
Затем вы используете veth
пары для подключения контейнеров к мосту. Один конец veth
пара представлена интерфейсом с IP-адресом, который вы можете видеть в контейнере. Другой конец не имеет IP-адреса, он принадлежит пространству имен сети хоста. И ты можешь видеть master docker0
или что-то рядом с ним в ip a
вывод. Этот конец пары можно рассматривать как разъем, который вы подключаете к порту моста.
Кроме того, я вижу 172.17.0.0/16 dev docker0 ...
правило в таблице маршрутизации хоста, которое позволяет отправлять пакеты с хоста в контейнер.
Но тогда я также могу отправлять пакеты из контейнера на хост eth0
интерфейс. Которая находится в другой подсети. И я не вижу master docker0
рядом с хозяином eth0
интерфейс в ip a
вывод. Что, вероятно, все равно не имеет смысла, поскольку мост не может соединять разные подсети. Так что эту часть (и ту, что из предыдущего абзаца), наверное, нельзя считать частью моста. Скорее как дополнительное поведение, связанное с мостом Linux.
Кроме того, когда я отправляю пакеты из одного контейнера в другой, я вижу их в сетевом пространстве имен хоста (хост iptables
обрабатывает их).
Как бы я ни старался, я не могу представить диаграмму с мостом Linux, который я не мог бы выбрать. Что касается диаграммы выше, она выглядит так, как будто мост соединяет разные подсети, чего не может выполнить физический мост.
Я бы, наверное, предпочел поставить мост между my_bridge
и veth
пары. Но тогда следует признать, что вы затыкаете концы veth
пары в my_bridge
, а не в мост. И что с мостом дает возможность отправлять пакеты от хоста к контейнеру и от контейнера к хосту. eth0
интерфейс.
Таким образом, похоже, что мост Linux - это сетевой мост с некоторыми дополнительными особенностями. И не так-то просто изобразить это на схеме, не внося неточностей? Был ли я неправ в чем-то выше?
Вы описали, и ваше изображение изображает, маршрутизация между двумя мостами и физическим интерфейсом, не являющимся частью моста. Среди многих других вещей, которые Linux делает, это маршрутизация уровня 3, и это то, что происходит, когда пакеты проходят между мостами и физическим интерфейсом, не являющимся частью какого-либо моста.