• 路由信息查看


    • /proc/net/stat/rt_cache
    • /proc/net/rt_acct
    • /proc/net/fib_triestat
    • /proc/net/fib_trie
    • ip route get  xxxx(ip 地址)
    • ip route list table (local  main xxx)

    Scope分为两种:路由的Scope 和 IP地址的Scope

    路由的Scope:表示到目的网络的距离。
    IP地址的Scope: 表示该IP地址到达本地主机有多远。

    常用的Scope
    IP地址常用的Scope
    主机:表示该地址只用于主机的内部通信。例如:127.0.0.1
    链路:表示地址尽在局域网内部有意义(链路层互联),如子网广播地址
    全域:表示地址可以在任何地方使用。(这是大多数地址的默认Scope)

    *注意点:***Scope并不能反映可路由(公开)地址和不可路由(私有)地址之间的区别。10.0.0.1和165.2.2.2的Scope都可能是链路或全域。广播地址和会换地址由内核来制定合适的Scope。

    路由常用的Scope
    主机: 路由表示的目的地址为本地主机。
    链路:路由表示的目的地址为本地网络。
    全域:路由表示的目的地址超过一个下一跳

    Scope的应用
    路由Scope和IP地址Scope在路由代码和内核其他部分都有广泛的应用。
    关于IP地址的Scope
    首先,我们要知道,对于Linux而言,IP地址属于主机而不是接口。这样当主机有两个接口,如eth0,eth1(例如我们路由期Wan口为eth0:202.202.202.202,lan口为eth1:192.168.1.1),两个IP地址(202.202.202.202和192.168.1.1)都是属于主机的,尽管他们配置在不同的接口上。这样,如果没有进行进一步的配置,我们来考虑下ARP应答:假设路由器从eth0(即wan口)接收到ip地址为192.168.1.1的地址请求(即wan端有主机ping 192.168.1.1)路由器是会给予应答的。(当然我们可以通过ARP_IGNORE特性进行配置)。
    IP地址属于主机,那么,往我们的主机有多个IP地址时,当主机需要往外传送数据是,选择哪一个IP地址作为源IP,就需要进行判断了。对IP地址配置不同的Scope在这里就会得到一定的应用了。
    关于路由的Scope
    我们来看下图有关于路由的Scope的应用:

    图中,主机A需要往主机B发送消息。第一条路由的Scope为链路,目的地址为子网10.0.1.0/24,主机A无法通过该路由到达主机B。第二条路由的Scope为全域,主机A通过eth0到达网关10.0.1.1,在经网关传送到主机B。
    路由有更大的Scope能够保证封包能够到达更远的地方

    Scope在Linux中的实现
    Scope在linux内核中描述
    Linux内核中用枚举常量来表示Scope:

    enum rt_scope_t
    {
    RT_SCOPE_UNIVERSE=0, //scope 为全域 所有远程非直连目的地
    /* User defined values */
    RT_SCOPE_SITE=200, //scope
    RT_SCOPE_LINK=253, //scope 为链路
    RT_SCOPE_HOST=254, //scope 为本机
    RT_SCOPE_NOWHERE=255 //被代码视为非法scopte
    };

    路由Scope
    路由Scope被保存在结构体struct fib_alias的fa_scope字段

    struct fib_alias {
    struct list_head fa_list;
    struct fib_info *fa_info;
    u8 fa_tos;
    u8 fa_type;
    u8 fa_scope; //路由Scope
    u8 fa_state;
    #ifdef CONFIG_IP_FIB_TRIE
    struct rcu_head rcu;
    #endif
    };

    IP地址Scope
    IP地址的Scope保存在结构体struct in_ifaddr中。

    struct in_ifaddr
    {
    struct in_ifaddr *ifa_next;
    struct in_device *ifa_dev;
    struct rcu_head rcu_head;
    __be32 ifa_local;
    __be32 ifa_address;
    __be32 ifa_mask;
    __be32 ifa_broadcast;
    unsigned char ifa_scope; //IP地址的Scope
    unsigned char ifa_flags;
    unsigned char ifa_prefixlen;
    char ifa_label[IFNAMSIZ];
    };

    路由Scope与吓一跳Scope之间的关系

  • 相关阅读:
    Nginx从安装到配置文件详解
    python流程控制语句
    python数据类型以及方法
    python介绍以及基础基础语法
    new 操作符
    js 模拟substr
    js 对于链式加载的思考
    js 实现哈夫曼树
    js实现深度优先
    js 广度优先遍历
  • 原文地址:https://www.cnblogs.com/codestack/p/15974962.html
Copyright © 2020-2023  润新知