Docker

就物理橋而言,Linux 橋是什麼?

  • May 8, 2020

通常,網橋是將多個網段連接為一個的L2設備。它沒有 IP,基本上只是將幀發送到每個段,除了接收它的段(或更智能的段)。

但是使用 Linux 網橋,您會得到一個帶有 IP 地址的介面。考慮下docker容器:

(來源:docker.com

在這種情況下,我正在談論的介面是docker0my_bridge

然後,您使用veth對將容器連接到網橋。一veth對的一端由一個介面表示,該介面具有您可以在容器中看到的 IP 地址。另一端沒有 IP 地址,屬於主機的網路命名空間。你可以在輸出中看到master docker0它旁邊的東西。ip a可以將一對的這一端視為插入網橋埠的連接器。

此外,我可以172.17.0.0/16 dev docker0 ...在主機的路由表中看到規則,這使得將數據包從主機發送到容器成為可能。

但是我也可以將數據包從容器發送到主機eth0介面。它位於不同的子網中。而且我在輸出中看不到主機介面master docker0旁邊。無論如何,這可能沒有意義,因為網橋無法連接不同的子網。因此,這部分(以及上一段中的部分)可能不能被視為橋樑的一部分。而是作為 Linux 網橋附帶的額外行為。eth0``ip a

此外,當我將數據包從一個容器發送到另一個容器時,我可以在主機的網路命名空間中看到它們(主機iptables處理它們)。

無論我如何嘗試,我都無法用我無法選擇的 Linux 網橋來描繪圖表。就上圖而言,它看起來像是網橋連接了不同的子網,這是物理網橋無法完成的。

我可能寧願在my_bridgeveth對之間架起橋樑。但是必須承認您將線對的末端veth插入my_bridge,而不是插入橋。橋接器能夠將數據包從主機發送到容器,從容器發送到主機eth0介面。

因此,Linux 網橋似乎是一個帶有一些額外曲折的網橋。而且你不能在不引入錯誤的情況下輕鬆地在圖表上描述它,對嗎?我對上面的任何事情都錯了嗎?

您已經描述並且您的圖像描述了兩個網橋和不屬於網橋一部分的物理介面之間的*路由。*Linux 所做的許多其他事情之一是第 3 層路由,當數據包在網橋和不屬於任何網橋的物理介面之間流動時,就會發生這種情況。

引用自:https://serverfault.com/questions/973473