Iptables
IP 數據包如何知道要走哪個網關?
假設兩個網關存在於同一網路上。如果我理解正確,發件人電腦上的 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 -> | | | |