网络配置过程分析二(linux网络协议栈笔记)

本文深入剖析Linux系统中Loopback接口的自动配置过程,包括系统初始化时的结构创建与系统启动后的接口开启。同时,介绍了IP别名的实现,依赖于iproute2工具,允许在同一接口上配置多个IP地址,以实现负载平衡和服务扩展。通过实例展示了IP别名的配置步骤,并探讨了内核中处理这些配置的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Loopback接口的配置过程

前篇分析了给本机系统配置IP地址的过程,本篇介绍一下loopback接口的“配置”过程,之所以用引号,是因为此配置不完全是用户自己控制的,为什么不先介绍loopback的配置,原因也在此。上篇我们已经对配置的过程一步一步做了分解,那么我们可以一下子来了解loopback接口的初始化及配置过程,这也是对普通设备的初始化和配置过程的一个回顾。

要使Loopback接口起作用得分为2个步骤:
第一步是在系统初始化的时候就创建一个in_dev{}结构给loopback接口,参照前篇,对于用户配置普通设备的IP地址,这个动作应该是在ioctl->...... ->inet_set_ifa函数中完成。这是两种不同设备的配置上的区别:loopback设备是自动创建,而普通设备是“用户”手动创建。
而其这种自动还转了一道手,它实际是在ip_netdev_notifier收到NETDEV_REGISTER事件后才去调用inetdev_init创建了in_dev{}结构,此函数请参考前篇。而普通设备则是在ioctl的上下文中调用inet_set_ifa函数创建的。
这里写图片描述
第二个步骤就是当系统初始化结束之后根据系统配置打开loopback接口,使之UP。如同普通设备的操作,系统必须调用dev_open打开looback接口,从而发送NETDEV_UP事件给ip_netdev_notifier。这个notifier对于普通设备的事件还是不是太感兴趣,啥也不做;但是非常关心loopback接口的UP事件,它创建了in_ifaddr{}结构。这有是loopback接口配置自动化的证明了。ip_netdev_notifier的事件处理函数是inetdev_event,其相关代码如下:

 inetdev_event
{
     ......
     case NETDEV_UP:
        if (dev == &loopback_dev) {
             struct in_ifaddr *ifa;
         if ((ifa = inet_alloc_ifa()) != NULL) {
/*这里面每个赋值都很重要,直接决定loopback的性质 INADDR_LOOPBACK宏就是0x7f000001-- 127.0.0.1 */
             ifa->ifa_local = ifa->ifa_address = htonl(INADDR_LOOPBACK);
             ifa->ifa_prefixlen = 8;
             ifa->ifa_mask = inet_make_mask(8);

             ifa->ifa_dev = in_dev;
/*该地址是属于本机范围的,不属于外部地址,我们会在后面说到这个值*/
             ifa->ifa_scope = RT_SCOPE_HOST;
             memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
             inet_insert_ifa(ifa);
         }
     }
     ......
}

值得关注的是这段代码又调用了inet_insert_ifa函数,它发送NETDEV_UP事件给fib_inetaddr_notifier

这里写图片描述
是否loopback设备的配置可以改变?可以的!让我们跑到Linux的/etc/sysconfig/ network目录下(目前是Redhat,其它版本的Linux不一定是此目录,但都大同小异),看到有ifcfg-lo这么一个文件,内容如下:

DEVICE=lo 
IPADDR=127.0.0.1 #可以改变这个IP地址 
NETMASK=255.0.0.0  
NETWORK=127.0.0.0 
 ......  
BROADCAST=127.255.255.255 
NAME=loopback 

你可以改动这个文件里的某些项,然后执行#ifup

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值