Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88499
  • 博文数量: 25
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-19 13:51
文章分类
文章存档

2016年(19)

2015年(3)

2014年(3)

我的朋友

分类: LINUX

2016-06-06 09:54:38

原文地址:network namespace 作者:sandflee

在Linux协议栈中引入网络命名空间, 是为了支持网络协议栈的多个实例, 而这些协议栈的隔离就是由命名空间来实现的(有点像进程的线性地址空间, 协议栈不能访问其他协议栈的私有数据).

需要纳入命名空间的元素包括进程, 套接字, 网络设备. 进程创建的套接字必须属于某个命名空间, 套接字的操作也必须在命名空间内进行, 网络设备也必须属于某个命名空间, 但可能会改变, 因为网络设备属于公共资源.

为了实现网络命名空间, 整个协议栈的代码都需要更新, 工作量非常大.

试想有两个并行的协议栈, 那么所有协议栈相关的全局变量都必须修改为协议栈私有. 最好的办法就是让这些全局变量成为一个per net namespace变量的成员, 然后为协议栈的函数调用都加入一个namespace参数.

但是内核开发者面临几个问题:
1. 最好让现有的内核代码隐式的使用命名空间内的变量, 而不要更新所有的内核代码, 否则工作量太大;
2. 性能损耗应该非常小, 使得使用命名空间与否对用户没有影响;

Ref:
[1]
[2]
[3]
阅读(2048) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~