Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4534216
  • 博文数量: 252
  • 博客积分: 5347
  • 博客等级: 大校
  • 技术积分: 13838
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-30 10:13
文章分类
文章存档

2022年(12)

2017年(11)

2016年(7)

2015年(14)

2014年(20)

2012年(9)

2011年(20)

2010年(153)

2009年(6)

分类: 云计算

2017-07-24 17:26:09

   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


阅读(8642) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~