docker    发布于 2019-03-30   389人围观   0条评论

Linux的网卡驱动中内含了很多“虚拟网卡”。早先的文章曾经详细分析过tun,ifb等虚拟网卡,类似的思路,在虚拟化大行其道的趋势下,Linux源码树中不断增加对“网络虚拟化”的支持,不光是为了支持“虚拟机”技术,更多的是给了用户和程序员更多的选择。
       这些对网络虚拟化的支持技术包括任何重量级的虚拟化技术,比较重的比如对虚拟机技术的支持,轻量级的则是net namespace技术。近期的工作基于net namespace技术,关于这个技术我也不多说了,它主要是提供了每个namespace独立的协议栈以及网卡,对于网络协议栈以及网卡之外的部分,所有namespace是共享的,这种轻量级的针对网络的虚拟化技术对于模拟多客户端网络连接特别有用而且操作简单。我会单独写一篇文章来展示这种操作。
       如果仅仅为了完成工作,那么我不会写这篇文章,早在去年的时候,我写过一篇关于net namespace的,根据那个里面的step by step,工作就已经可以完成了,并且在去年年末到今年年初,这个工作我们也已经做过了,然而对于学习而言,就不是这样了。学习应该是碰到一点折腾一点,我知道,很多人都知道,现在不比上学那会儿了,我们谁都没有整块的时间系统地进行学习,特别是对于我这种结了婚有了孩子,需要为了还贷款而不再任性的路人丙来讲,更是这样。因此就需要对所碰到的技术有一种可遇而不可求的相见恨晚的感觉,这样就有动力把它吃透了。
       本文中,我想通过几张图来介绍一下Linux中常用的几类和网络虚拟化相关的虚拟网卡,当然,这些虚拟网卡的使用场景并不仅限于net namespace,重量级的虚拟机也可以使用,之所以用net namespace举例是因为它的简单性。总体来说,这些虚拟网卡的原理就摆在那里,具体在什么场景下使用它们,就看你自己的想象力了。

网络虚拟化

总体来讲,所谓的网络虚拟化在本文中指的是主机中的网络虚拟化,侧重于在一台物理主机中,分离出多个TCP/IP协议栈的意思。网络虚拟化可以独立实现,也可以依托别的技术实现。在Linux中,独立的网络虚拟化实现就是net namespace技术,依托别的技术实现的网络虚拟化就是虚拟机技术,我们当然知道,每个虚拟机里面都有自己的协议栈,而这种依托虚拟机技术实现的网络虚拟化可能还要更简单一些,因为宿主机并不需要去“实现”一个

查看更多