网络虚拟化基础一:linux名称空间Namespaces

一 为何要学习网络命名空间

名称空间

许多容器和虚拟化技术中都依赖于网络命名空间。

容器虚拟化技术的典型代表如LXC、Docker。Neutron也使用Linux网络命名空间。

当虚拟交换机,例如虚拟交换机,虚拟交换机 Openvswitch,已安装。

一 介绍

从Linux 2.6.24版的内核开始,Linux 就支持6种不同类型的命名空间。它们的出现,使用户创建的进程能够与系统分离得更加彻底,从而不需要使用更多的底层虚拟化技术。

CLONE_NEWIPC: 进程间通信(IPC)的命名空间,可以将 SystemV 的 IPC 和 POSIX 的消息队列独立出来。
    CLONE_NEWPID: 进程命名空间。空间内的PID 是独立分配的,意思就是命名空间内的虚拟 PID 可能会与命名空间外的 PID 相冲突,于是命名空间内的 PID 映射到命名空间外时会使用另外一个 PID。比如说,命名空间内第一个 PID 为1,而在命名空间外就是该 PID 已被 init 进程所使用。
    CLONE_NEWNET: 网络命名空间,用于隔离网络资源(/proc/net、IP 地址、网卡、路由等)。后台进程可以运行在不同命名空间内的相同端口上,用户还可以虚拟出一块网卡。
    CLONE_NEWNS: 挂载命名空间,进程运行时可以将挂载点与系统分离,使用这个功能时,我们可以达到 chroot 的功能,而在安全性方面比 chroot 更高。
    CLONE_NEWUTS: UTS 命名空间,主要目的是独立出主机名和网络信息服务(NIS)。
    CLONE_NEWUSER: 用户命名空间,同进程 ID 一样,用户 ID 和组 ID 在命名空间内外是不一样的,并且在不同命名空间内可以存在相同的 ID。

在专业网络世界中,长时间使用虚拟路由并转发VRF(Virtual Routing Forwarding)是很常见的。Cisco, Alcatel-Lucent, Juniper等正在支持这项技术。在L2交换世界中,VLAN的概念自上世纪90年代以来一直被使用。一个物理交换机支持多个广播域。大多数交换机支持多达4k Vlans。

这个想法已经被采纳到了L3世界。许多网络设备现在都支持VRF。这意味着,可以在一个物理设备上运行多个虚拟路由器(三层转发实例)。

在Linux世界中,专业网络世界的VRF获得了名称“网络命名空间”。在Linux中,还有其他命名空间可用(如mount命名空间...)。 http://lwn.net/Articles/531114/上的acticle有更多的细节。

每个网络命名空间都有自己的路由表,它自己的iptables设置提供nat和过滤。 Linux网络命名空间还提供了在网络命名空间内运行进程的功能。

但为什么有人会使用这个功能。考虑在Linux系统上运行的防火墙。您应该将防火墙的所有服务接口分配到网络命名空间。之后,默认网络命名空间和防火墙网络命名空间正在运行不同的路由表。像SSH这样的应用程序只能在默认命名空间中可用,但不能在防火墙命名空间中。并且您可以在每个命名空间中使用相同的IP地址,而不会有任何干扰 - 但是请注意L2层!

参考链接:

https://lwn.net/Articles/531114/

http://www.opencloudblog.com/?p=42

时间: 2024-10-27 08:05:44

网络虚拟化基础一:linux名称空间Namespaces的相关文章

KVM 网络虚拟化基础

网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 OpenStack 官网上给出的计算节点(可以理解为 KVM 的宿主机)虚拟网络的逻辑图,上面的网络设备很多,层次也很复杂.我第一次看到这张图,也着实被下了一跳. 不过大家也不要怕,万丈高楼从地起,虚拟网络再复杂,也是由一些基础的组件构成的.只要我们将这些基础组件的概念和它们之间的逻辑关系搞清楚了,就能深刻

KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)

网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 OpenStack 官网上给出的计算节点(可以理解为 KVM 的宿主机)虚拟网络的逻辑图,上面的网络设备很多,层次也很复杂.我第一次看到这张图,也着实被下了一跳. 不过大家也不要怕,万丈高楼从地起,虚拟网络再复杂,也是由一些基础的组件构成的.只要我们将这些基础组件的概念和它们之间的逻辑关系搞清楚了,就能深刻

网络虚拟化基础协议之Geneve

网络虚拟化最基础的技术莫过于分层(Overlay.Underlay),要实现分层有两种手段,一个是映射(Mapping),一个是封装(Encapsulation). 映射,主要思路是转发时替换报文语义,如何替换将需要设备进行查询. 封装,则是把需要的报文语义添加到网包中,处理的时候一层层的解封装即可,尽量对设备透明. 不少协议都实现了封装的部分或完整功能,包括IP-in-IP.Vlan.MPLS.VXLAN.NVGRE.STT等.这些协议各有各的特点,不少都是为了简单地隔离或者通过隧道连通不同网

0510Python基础-动态参数-名称空间

1.昨日内容回顾 函数:避免重复代码,增强可读性. 特点:以功能为导向. def 函数名(): 函数体 函数的返回值:return 1,函数中遇到return结束函数. 2,return将函数内部的值返回给函数的执行者. return    None return None     None return 单个值 return 多个值  返回的是元组. 函数的参数. 实参: 位置参数.按顺序一一对应. 关键字参数.可以不按照顺序但是也必须一一对应. 混合传参:关键字参数永远在位置参数后面. 形参

【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)

在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式.记录一下. 管道通信(匿名,有名) 管道通信,在一个进程之中,只能单一的对其写或者是读,而不可以及执行写操作又执行读操作.这一点,我们可以将其想象成我们的水管,分别连着不同的两端,在有水流的时候,一端只能进行输入,另一端只能进行输出,而不可以同时输入和输出. 管道又分为有名管道和匿名管道,两者的区别在于对于匿名管道,其只能在具有亲缘关系的父

名称空间(Namespaces)(转)

大致来说,命名空间只是将名称映射到对象的容器.正如你可能已经听到的,Python中的所有内容 - 字符串,列表,词典,函数,类等都是一个对象.这样的“名称与对象”的映射使我们能够通过分配给它的名称访问对象.例如a =“welcome to the world!”进行简单的字符串分配,我们创建了一个对“welcome to the world!”对象的引用,此后可以通过它的变量名a进行访问.命名空间映射由Python字典结构来实现的,其中字典的键表示名称,字典值为对象本身,例如: part1_na

网络虚拟化基础

网络通信 1.二层网络通信 所有的通信主机在同一个LAN(连接在同一个交换机上)中  直接通过各个主机的MAC地址就可进行数据交换 无需IP地址的参与 效率比三层通信高 交换机会自动学习记录每个主机的MAC和对应交换机端口的对应信息 2.三层网络通信 跨网络通信 需要通过封装IP地址和路由器来进行数据包的转发  由于在路由器中需要查询转发路径 数据转发效率比二层通信要低 网络模式 vlan模式 VLAN IEEE 802.1Q 标准定义了 VLAN Header 的格式.它在普通以太网帧结构的

python基础之函数名称空间与作用域

函数的名称空间与作用域

1.名称空间namespaces 存放名字与值绑定关系的地方 2.名称空间分为三大类 内置名称空间: 作用:存放python解释器自带的名字 生命周期: 在解释器启动时生效,在解释器关闭时失效 全局名称空间: 作用:除了内置的与局部的名字外,其余都是全局名字 生命周期: 在文件执行时生效,在文件执行完毕时失效 例如:x,func,y,l,z都是 x=1 def func(): a=1 y=2 l=[1,2] if 3 > 2: if if if z=3 局部名称空间: 作用:用于存放函数调用期间