首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ip路由get识别地址为anycast

ip路由get识别地址为anycast
EN

Server Fault用户
提问于 2014-07-09 15:21:35
回答 2查看 1.9K关注 0票数 2
代码语言:javascript
复制
# ip route get 1.2.3.4
anycast 1.2.3.4 dev eth0  src 5.6.7.8

问题是它怎么知道地址是选播?(显然是真的)。

更新:

现为选播路线:

代码语言:javascript
复制
root@hv2 ~ # ip route get 1.2.3.4
anycast 1.2.3.4 dev eth0  src 5.6.7.8 
    cache 

但在清单中看不到:

代码语言:javascript
复制
root@hv2 ~ # ip route list|grep 1.2.3.4|wc -l
0

但是可以删除它,并将其恢复到正常状态(不再有anycast ):

代码语言:javascript
复制
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 
EN

回答 2

Server Fault用户

回答已采纳

发布于 2014-07-11 21:20:48

如果您查看iproute2 gitweb,您将看到它显示了在内核路由结构上设置的RTN_ANYCAST位的状态。如果交叉引用内核源(rtnetlink.h.h.h),您将看到以下评论:

代码语言:javascript
复制
    RTN_ANYCAST,            /* Accept locally as broadcast,
                               but send as unicast */

如果您检查手动页面,您将看到地址的anycast状态由配置决定(特别是在指定要添加的地址时添加anycast关键字)。根据man 8 ip的说法:

代码语言:javascript
复制
   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.

在手册的第一部分中,它指出当您指定地址时,可以指示堆栈它是一个anycast地址。在不检查内核源代码的情况下,我设想当您添加anycast地址时,anycast位将被传播到相应的路由表条目,在添加地址时将创建该路由表条目。

我不确定“未实现”部分是否完全正确,因为看起来iproute2确实在将anycast标志传递到系统调用中。因此,如果内核支持anycast,那么它应该可以工作。但我还没测试过所以我不知道。

票数 4
EN

Server Fault用户

发布于 2014-07-17 18:34:32

来自ip-route的手册页,在"ip路由获取“一节中:

请注意,此操作不等同于ip路由显示。显示现有的路线。如果需要的话,get会解决这些问题并创建新的克隆。从本质上说,get相当于沿着这条路径发送数据包。

您可以使用命令ip route show type anycast显示任意播路由。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/611284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档