红联Linux门户
Linux帮助

Linux 中的alias address

发布时间:2007-03-17 01:26:50来源:红联作者:Hbhmycg
  Linux 允许一个网络接口拥有多个 IPv4 地址,除了第一个地址外,其它的称为 alias 地址

  通过 ‘ifconfig’ 可以添加一个 alias 地址。例如以下命令,为 eth0 添加一个新的地址 192.168.2.2,

  # ifconfig eth0:0 192.168.2.2

  用 ‘ifconfig’ 可以看到系统中多了一个 eth0:0 的接口,但实际它不是接口,而是标签 (label),只不过 ‘ifconfig’ 把它显示成一个接口的样子。内核中也并不存在这样的 struct net_device 的结构。如果用工具 ‘ip’ 就可以更清楚的看到这一点。

  在内核中,net_device 并不保存 IP 地址,这是因为它是一个通用的结构,可用于不同的协议族,除了 IPv4,还可以用于 IPv6 或者其它协议族。

  因此, IPv4 协议族有专门的结构:struct in_device

  而这个结构中的 ifa_list 用于保存 IPv4 地址

  struct in_ifaddr *ifa_list;
  struct in_ifaddr
  {
struct in_ifaddr *ifa_next;

struct in_device *ifa_dev;

struct rcu_head rcu_head;

u32 ifa_local;

u32 ifa_address;

u32 ifa_mask;

u32 ifa_broadcast;

u32 ifa_anycast;

unsigned char ifa_scope;

unsigned char ifa_flags;

unsigned char ifa_prefixlen;

char ifa_label[IFNAMSIZ];

  };

  前面的 eth0:0 就保存在这个结构的 ifa_label 成员中。可以通过系统调用 ioctl() 来为接口设置一个 alias address。
文章评论

共有 0 条评论