1. Linux网络基础

Linux内核具有非常成熟和高性能的TCP / IP堆栈实现。Docker网络使用linux内核的网络堆栈作为低级原语来创建高级网络驱动程序。简而言之,Docker网络就是 Linux网络。

1.1 Linux bridge

Linux的桥是Linux内核模拟的二层网桥。功能是根据MAC地址学习并转发流量。
Linux bridge已在许多Docker网络驱动程序中广泛使用。Docker bridge网络驱动 是Linux bridge的更高级别的实现。

1.2 Linux network namespace

Linux 网络名称空间是内核中的隔离网络堆栈,具有自己的接口,路由和防火墙规则。被用于容器和Linux的安全性方面,用于隔离容器。

linux network namespace可确保同一主机上的两个容器无法相互通信,甚至不能与主机本身进行通信,除非配置为通过Docker网络进行通信。

通常,CNM网络驱动程序为每个容器实现单独的名称空间。但是,容器可以共享相同的网络名称空间,甚至可以是主机的网络名称空间的一部分。

主机网络名称空间包含主机接口和主机路由表。

1.3 veth(虚拟以太网设备)

Linux VETH(虚拟以太网设备)是充当两个网络命名空间之间的连接线。veth是全双工链接,在每个名称空间中都有一个接口。一个接口中的流量被引向另一接口。

创建Docker网络时,Docker网络驱动程序利用veth在名称空间之间提供显式连接。

1.4 iptables

iptables是 Linux 本机数据包过滤系统,自2.4版以来已成为Linux内核的一部分。它是功能丰富的L3 / L4防火墙,可为包标记,伪装和丢弃提供规则链。

在Docker网络驱动程序中,iptables广泛地用于分割网络流量,提供主机端口映射以及标记流量以进行负载平衡决策。

2. docker网络模式

网络驱动 描述
host模式 通过host驱动程序,容器可以使用主机的网络堆栈。没有名称空间分隔,并且容器上的主机可以直接使用主机上的所有接口。
bridge模式 bridge驱动程序使用Linux bridge。默认情况下,网桥上的容器可以相互通信。也可以通过bridge驱动程序配置对容器的外部访问。
overlay模式 overlay驱动程序创建一个支持多主机网络开箱即用的overlay网络。它结合使用了本地Linux brodge和VXLAN,以覆盖物理网络基础结构上的容器到容器通信。
MACVLAN模式 该macvlan驱动程序使用Linux MACVLAN桥接模式在容器接口和父主机接口(或子接口)之间建立连接。它可用于向可在物理网络上路由的容器提供IP地址。另外,VLAN可以中继到macvlan驱动程序以强制执行第2层容器分段。
none模式 none驱动程序提供了一个容器,拥有自己的网络堆栈和网络命名空间。如果没有其他配置,容器将与主机网络堆栈完全隔离。

2.1 Host 模式

Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括:

这种模式下的容器没有隔离的 network namespace
容器的 IP 地址同 Docker host 的 IP 地址
需要注意容器中服务的端口号不能与 Docker host 上已经使用的端口号相冲突
host 模式能够和其它模式共存

2.2 Bridge模式

Docker 容器默认使用 bridge 模式的网络。其特点如下:

  • 使用一个 linux bridge,默认为 docker0
  • 使用 veth 对,一头在容器的网络 namespace 中,一头在 docker0 上
  • 该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内
  • Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部
  • 外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port
  • NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。
  • 容器拥有独立、隔离的网络栈;让容器和宿主机以外的世界通过NAT建立通信


2.3 overlay模式

VXLAN 是一个新兴的SDN 标准,它定义了一种新的 overlay 网络,它主要的创造者是 VMware, Cisco 和 Arista。它被设计来消除虚拟化网络世界中的 VLAN 数目的限制。

VXLAN定义为MAC-in-UDP封装,它将容器第2层帧放在底层IP / UDP标头中。

它可以由专有硬件来实现,也可以使用纯软件实现。目前比较成熟的软件实现的 VTEP 包括:

  • 3.9 版本及以后的带 vxlan 内核模块的 Linux
  • Open vSwitch
  • VMware vSphere

而Docker使用linux内核的vxlan模块创建overlay网络。Docker overlay的datapath完全在内核空间中,这导致更少的上下文切换,更少的CPU开销以及应用程序和物理NIC之间的低延迟。

2.4 macvlan模式

macvlan 这种技术能将 一块物理网卡虚拟成多块虚拟网卡。

macvlan 是 Linux kernel 支持的新特性,支持的版本有 v3.9-3.19 和 4.0+,比较稳定的版本推荐 4.0+。它一般是以内核模块的形式存在。

macvlan 这种技术听起来有点像 VLAN,但它们的实现机制是完全不一样的。macvlan 子接口和原来的主接口是完全独立的,可以单独配置 MAC 地址和 IP 地址,而 VLAN 子接口和主接口共用相同的 MAC 地址。VLAN 用来划分广播域,而 macvlan 共享同一个广播域。

通过不同的子接口,macvlan 也能做到流量的隔离。macvlan 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡,虚拟网卡再把包交给上层的协议栈处理

MACVLAN用例可能包括:

  • 低延迟应用
  • 网络设计要求容器与外部主机网络位于同一子网中,并且使用IP作为外部主机网络

参考:
https://success.docker.com/article/networking#linuxnetworkfundamentals

https://www.cnblogs.com/sammyliu/p/5894191.html

docker网络--理解linux底层实现机制、docker网络模式相关推荐

  1. 深入理解 Linux 的 epoll 机制

    坚持思考,就会很酷 在 Linux 系统之中有一个核心武器:epoll 池,在高并发的,高吞吐的 IO 系统中常常见到 epoll 的身影. IO 多路复用 在 Go 里最核心的是 Goroutine ...

  2. 深入理解 Linux 的 RCU 机制

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:梁康 RCU(Read-Copy Update),是 Linux 中比较重要的一种同步机制.顾名思义就是"读,拷贝更新&quo ...

  3. Linux进阶 | 2万字总结最详细的Docker的安装、底层隔离机制和简单使用!建议收藏,持续更新❤

    创作不易,来了的客官点点关注,收藏,订阅一键三连❤

  4. 深入理解Linux内存映射机制

    Author: wzt EMail: [email]wzt@xsec.org[/email] Site: [url]http://www.xsec.org[/url] Date: 2008-6-13 ...

  5. linux 内核网络协议栈--linux内核路由机制(一)

    内核的路由部分是是网络中重要部分,目前在Linux内核中默认的路由查找算法使用的是Hash查找,所以你会看到很多的数据结构是XXX_hash什么之类(例如fn_hash).Linux内核从2.1开始就 ...

  6. linux应用对物理内存映射,深入理解Linux内存映射机制 (1)

    一. 绪 论 二. X86的硬件寻址方法 三. 内核对页表的设置 四. 实例分析映射机制 一. 绪 论 我们经常在程序的反汇编代码中看到一些类似0x32118965这样的地址,操作系统中称为线性地址, ...

  7. linux内存管理与设计,深入理解Linux内存管理机制(一)

    通过本文,您即可以: 1. 存储器硬件结构: 2.分段以及对应的组织方式: 3.分页以及对应的组织方式. 注1:本文以Linux内核2.6.32.59本版为例,其对应的代码可以在http://www. ...

  8. linux进程网络监控,linux下的进程、网络、性能监控命令

    Linux下的java虚拟机性能监控与故障处理命令 java包中提供了很多监控JVM的工具类,作为java程序员必须得掌握常用的几个工具,下面是几个常用的JVM性能监控与故障处理工具的介绍与使用. 1 ...

  9. linux开发网络交换机,linux – 如何将交换机用作网络分流器?

    我想tcpdump我的路由器在进行固件更新时所做的所有流量. 所以我已经将HP ProCurve 1800-8G交换机和镜像端口7连接到端口8. 我已连接: >端口6中的Internet连接 & ...

最新文章

  1. JavaWeb_域对象的属性操作
  2. 近期论文中的数据集整理0409
  3. 【转载】linux服务器下非root权限安装anaconda
  4. Redis主从复制的搭建与.哨兵.数据持久
  5. knowladge_网站开发_jQuery插件_Clock Demo
  6. TCP传输-出现差错的解决办法
  7. SCCM 2012 R2 从入门到精通 Part2 部署准备
  8. json和字符串/数组/集合的互相转换の神操作总结
  9. 用c#编写爬虫在marinetraffic下载船仅仅图片
  10. 荣耀V40渲染图曝光 将搭载双曲面瀑布屏
  11. Exalogic Elastic Cloud
  12. 终结篇—用BAT文件删除远程主机系统垃圾文件的方法
  13. 文件的上传下载功能的实现(包括进度条)[telerik控件]
  14. 计算机导论大一知识点整理_电网计算机类考试?悄悄告诉你一个复习攻略!
  15. linux 安装 yum
  16. 【静态ip保姆级教程他来了】
  17. Pyspark特征工程--RFormula
  18. TOM企业邮箱,2021“重心出发”,聚焦企业邮箱安全办公!
  19. fx3g485通讯模块_三菱模块FX3U-485ADP-MB MODBUS通信模块
  20. matlab画平行x轴的图,【MATLAB】画平行于坐标轴的曲线

热门文章

  1. python支持向量机分类器怎么用_可视化SVM分类器开源实现的python代码
  2. 不应该通过类实例访问静态成员 解决方法_今天说一说php中的类与对象
  3. Python机器学习:评价分类结果008多分类问题中的混淆矩阵
  4. 云南计算机一级c类基础知识,云南省大学计算机 一级C类 【多选题及答案】
  5. java动态删除map元素报错_java map使用迭代器遍历时执行删除元素报空指针异常
  6. WLAN定位技术——(无线信号定位2)
  7. mysql性能问题处理_1个困扰我3个多月没解决的mysql性能问题
  8. mybatis mysql uuid_spring boot整合mybatis利用Mysql实现主键UUID的方法
  9. Linux源码安装pgadmin4,Linux 服务器部署 PgAdmin 4 Server
  10. 模板引擎工作原理_「白皮书解读搜索引擎的工作原理」如何排序