Iptables

IP 數據包如何知道要走哪個網關?

  • September 3, 2020

假設兩個網關存在於同一網路上。如果我理解正確,發件人電腦上的 IP 路由表決定哪些數據包通過哪個網關路由。

IP 路由表包含網關的 IP 地址。

發送IP數據包時網關的這個IP地址是如何使用的?

TL;DR:網關的地址僅儲存在包含該 TCP/IP 數據包的乙太網幀中

伺服器->交換機->路由器流量,以及伺服器->交換機->伺服器流量,是IP定址實際上沒有任何意義的地方。這是底層協議的世界,很可能是乙太網。所以這是一個基於 MAC 定址的世界。

所以你只需要解決預設網關是IP地址的混淆。嗯,它有點……向人類展示了什麼……但是網關的 IP只需要做一件事,那就是問:誰在這附近有 192.168.1.1?答案是網關是 MAC 88:99:aa:bb:cc:dd:ee:ff。(那是 ARP 查詢/響應,兩個世界之間的轉換器。) MAC 是實際使用的。數據包在乙太網級別上到達那個 MAC,儘管它在 IP 級別上擁有不同的目的地。

因此,通過設置乙太網幀的“目標 MAC”欄位,數據包被標記為發送到所選網關。如果有多個網關,該欄位確定該網路上的哪個網關將獲得它。(“框架”是一個底層封裝,用於保存數據包或數據包的一部分。)

概括:雖然路由表是 IP 協議的核心,但當數據包通過線路時,它們的列中表示 Next Hop永遠不會使用 IP 地址實現。Next Hop 實際上總是使用乙太網、MPLS 或其他底層協議:

$ ip route show
192.168.98.0/24     via 192.168.99.1 dev eth0
|                   |                         |
|  <- IP world ->   | <- underlying world  -> |
|                   |                         |

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