Linux
ip route get 將地址辨識為任播
# ip route get 1.2.3.4 anycast 1.2.3.4 dev eth0 src 5.6.7.8
問題是它如何知道地址是任播?(這顯然是真的)。
更新:
呈現為任播路由:
root@hv2 ~ # ip route get 1.2.3.4 anycast 1.2.3.4 dev eth0 src 5.6.7.8 cache
但在列表中不可見:
root@hv2 ~ # ip route list|grep 1.2.3.4|wc -l 0
但可以刪除它,然後恢復正常(
anycast
不再):root@hv2 ~ # ip route del anycast 1.2.3.4 dev eth0 root@hv2 ~ # ip route get 1.2.3.4 1.2.3.4 via 5.6.7.8 dev eth0 src 9.10.11.12 cache
如果您查看iproute2 gitweb,您會看到它顯示了
RTN_ANYCAST
核心路由結構上設置的位的狀態。如果您將其與核心原始碼 (rtnetlink.h)交叉引用,您將看到以下註釋:RTN_ANYCAST, /* Accept locally as broadcast, but send as unicast */
如果您查看手冊頁,您會看到地址的任播狀態是由配置確定的(特別是
anycast
在指定要添加的地址時添加關鍵字)。根據man 8 ip
:IFADDR := PREFIX | ADDR peer PREFIX [ broadcast ADDR ] [ anycast ADDR ] [ label STRING ] [ scope SCOPE-ID ] ... anycast - _not implemented_ the destinations are anycast addresses assigned to this host. They are mainly equivalent to local with one difference: such addresses are invalid when used as the source address of any packet.
從手冊的第一部分開始,它聲明當您指定地址時,您可以指示堆棧它是一個任播地址。在不檢查核心原始碼的情況下,我想當您添加任播地址時,任播位會傳播到相應的路由表條目,該條目將在添加地址時創建。
我不確定“未實現”部分是否完全正確,因為看起來 iproute2 確實將任播標誌傳遞給系統呼叫。所以看起來如果核心支持任播,它應該可以工作。但是我沒有測試過,所以我不知道。