NET Namespace(1)

本文详细介绍了Linux协议栈中的网络命名空间,它允许创建多个网络环境的实例,每个命名空间拥有独立的网络设备、协议栈等。核心数据结构包括struct net和struct pernet_operations。网络命名空间的创建、初始化、获取和注销过程涉及到多个函数和数据结构的交互,确保了网络资源的隔离和管理。

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

1      概述

在linux协议栈中引入网络命名空间,是为了支持网络协议栈的多个实例,而这些协议栈的隔离就是通过命名空间来实现的,一个net namespace为进程提供一个完全独立的网络协议栈的视图,包括网络设备接口、ipv4和ipv6协议栈、ip路由表、防火墙规则、sockets等。一个net namespace提供了一份独立的网络环境,就跟独立的系统一样。一个物理设备只能存在于一个net namespace中,但可以从一个net namespace移动到另一个net namespace。网络系统在初始化的时候会初始化一个初始网络命名空间,即init_net命名空间。后续创建的net namespace命名空间会和init_net一起通过list项组织起来,且每个网络设备都对应一个命名空间,同一命名空间下的网络设备通过dev_base_head组织在一起(如图1所示)。当一个netnamespace被销毁时,物理设备会被自动移回到init net namespace。

 

2      重要数据结构

2.1      struct net

struct net {

        atomic_t          passive;   /* To decided when the network

                                                   * namespace should be freed.

                                                   */

        atomic_t          count;              /*To decided when the network

                                                   * namespace should be shut down.

                                                   */

#ifdef NETNS_REFCNT_DEBUG

        atomic_t          use_count;       /* To track references we

                                                   * destroy on demand

                                                   */

#endif

        spinlock_t                rules_mod_lock;

//网络命名空间是扁平结构,采用链表连接

        structlist_head        list;          /* list of network namespaces */

//链入全局cleanup_list链表,用于表示要释放的net

        structlist_head    &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值