Linux

Linux 路由流程

  • May 22, 2019

我想知道 Linux 在訪問另一個 IP 時如何使用路由表。正如我所知道的,例如當我們執行“ssh 192.168.21.2”時,系統將創建目標 ip 為 192.168.21.2 的 tcp 數據包,並參考下一跳的路由表。路由表條目如下所示:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.16.1    0.0.0.0         UG    0      0        0 br0
169.254.0.0     0.0.0.0         255.255.0.0     U     1005   0        0 br0
169.254.0.0     0.0.0.0         255.255.0.0     U     1006   0        0 br1
192.168.16.0    0.0.0.0         255.255.240.0   U     0      0        0 br0
192.168.66.0    0.0.0.0         255.255.255.128 U     0      0        0 br1

在這裡,系統將找到目標網路地址並將其與目標網路地址匹配,如果找到匹配,則將該數據包通過介面發送到相應的網關。

我的疑問是系統如何以及何時計算目標 ip 的網路地址以將其與路由表匹配。在這個流程上我可能完全錯了。需要解釋以了解來自系統的數據包流。

首先,網路程式碼為要發送的數據包選擇正確的介面。然後它應用相應的源 IP 地址。

在您的情況下,介面可能是一個地址為

192.168.16.X

由於您顯然將遮罩“255.255.240.0”應用於您的介面 br0,因此這將是傳出介面。但要注意:

192.168.21.2

與您的情況下的 .16.X 地址位於同一網路上(由於網路遮罩),因此在可以通過 ARP 成功檢索 21.1 的 MAC 地址之後,傳出數據包將簡單地發送到介面。

如果您將數據包發送到不同子網中的目的地( –> (dest-address & mask) 給出不同的值),可以說

192.168.32.1

然後數據包將被發送到網關(通過使用其 MAC 地址)進行路由。

引用自:https://unix.stackexchange.com/questions/520373