ipvlan内核代码流程

8460阅读 0评论2017-07-24 frankzfz
分类:云计算

   ipvlan和原先内核中存在的macvlan类似,都是在一个物理的接口上虚拟出多个子接口,macvlan虚拟出的接口每个接口可以有不同的mac地址,在L2层看来相当于有多张网卡,ipvlan也是在物理接口上虚拟出多个子接口,但是这些子接口具有相同的mac地址,但是可以配置不同的ip地址,所有的虚拟的子接口共享物理接口的mac地址,在docker比较新的版本中,已经支持ipvlan这种网络插件的驱动。
   ipvlan是内核中比较新的特性,使用ipvlan也需要较新的内核版本,这里最好使用大于kernel-4.2的内核版本。ipvlan支持两种不同的mode,一种是L2,一种是L3

    1. 如果使用的modeL2的话,分配ip给ContainerContainer中会做arp的广播发送,L2模式的master设备相当于一个二层的交换机,会进行转发,如果需要路由的话,会通过master设置进行路由转发。
  2. 如果使用modeL3模式的话,在L3模式下,ipvlan的虚拟机接口是不处理arp的广播和请求的,也就是在ipvlan的虚接口上会显示NOARP的标志,结合代码的流程可知:二层的广播交给了master device进行处理.在这种模式下master设备类似于路由器进行转发,需要配置针对container的路由信息。
     下面主要看一下内核中在处理ipvlan不同的模式时,代码流程。

 图1 mode L2 xmit
       
图2: mode l2 rcv


   图3:mode L3 xmit


上一篇:docker的overlay网络---Docker native overlay network
下一篇:Kubernetes学习(1)-----搭建kubernetes环境