周志明的软件架构课
周志明
博士,远光软件研究院院长,《深入理解 Java 虚拟机》《凤凰架构》等书作者
54203 人已学习
免费领取
课程目录
已完结/共 74 讲
架构师的视角 (24讲)
周志明的软件架构课
15
15
1.0x
00:00/00:00
登录|注册

53 | Linux网络虚拟化(下):Docker所提供的容器通讯方案有哪些?

你好,我是周志明。今天我们接着上节课介绍的 Linux 网络知识,继续来学习它们在虚拟化网络方面的应用,从而为后续学习容器编排系统、理解各个容器是如何通过虚拟化网络来协同工作打好基础。

虚拟化网络设备

首先我们要知道,虚拟化网络并不需要完全遵照物理网络的样子来设计。不过,由于现在大量现成的代码,原来就是面向于物理存在的网络设备来编码实现的,另外也有出于方便理解和知识继承方面的考虑,因此虚拟化网络与物理网络中的设备还是具有相当高的相似性。
所以接下来,我就会从网络中那些与网卡、交换机、路由器等对应的虚拟设施,以及如何使用这些虚拟设施来组成网络入手,给你介绍容器间网络的通信基础设施。
好了,我们开始吧。

网卡:tun/tap、veth

首先是虚拟网卡设备。
目前主流的虚拟网卡方案有tun/tapveth两种,其中 tun/tap 出现得时间更早,它是一组通用的虚拟驱动程序包,里面包含了两个设备,分别是用于网络数据包处理的虚拟网卡驱动,以及用于内核空间与用户空间交互的字符设备(Character Devices,这里具体指/dev/net/tun)驱动。
大概在 2000 年左右,Solaris 系统为了实现隧道协议(Tunneling Protocol)开发了这套驱动,从 Linux Kernel 2.1 版开始,tun/tap 移植到了 Linux 内核中,当时它是作为源码中的可选模块,而在 2.4 版之后发布的内核,都会默认编译 tun/tap 的驱动。tun 和 tap 是两个相对独立的虚拟网络设备,其中 tap 模拟了以太网设备,操作二层数据包(以太帧),tun 则是模拟了网络层设备,操作三层数据包(IP 报文)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了Linux Bridge作为虚拟交换机的工作原理和应用场景,以及与其他虚拟交换机方案的比较。通过二层转发机制,Linux Bridge实现了容器间的网络通信,并支持将数据包接入到主机的三层协议栈中,实现三层路由。此外,文章还详细解释了VXLAN作为一种Overlay网络的原理和应用,以及其对网络基础设施的要求和带来的灵活性、扩展性和可管理性。VXLAN的报文结构和对传输效率、性能的影响也得到了详细解释。另外,文章还介绍了MACVLAN作为一种网络设备虚拟化的方式,以及其在虚拟交换机中的应用和优势。通过深入讲解Linux Bridge和VXLAN的工作原理,本文为读者提供了深入了解容器通讯方案和Overlay网络的基础知识。文章内容涵盖了虚拟交换机、Overlay网络和网络设备虚拟化等技术,为读者提供了全面的网络虚拟化知识。

该试读文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • 而立斋
    周老,这篇近一万字,这是咋积累起来的呀。

    作者回复: 字数什么的不是重点……我只是想说,我并没有那么老,囧。

    2021-03-30
    8
    17
  • Demon.Lee
    终于知道为啥有个专业叫 网络工程 了,我已零乱……😭
    2021-04-23
    9
  • Dlx-153
    “应用程序调用 Socket API 发送数据,此时生成的原始数据包为:a. 源 MAC:veth0 的 MACb. 目标 MAC:网关的 MAC(即网桥的 MAC)c. 源 IP:veth0 的 IP,即 192.168.31.1d. 目标 IP:外网的 IP,即 122.246.6.183” 有个问题:为啥这里的源IP(veth0的IP)= 192.168.31.1 ?namspace中的veth0的IP地址应该是192.168.1.10、192.168.1.11、192.168.1.12中的一个,如果按照此处的步骤描述“三个容器中的 veth0 网卡分配 IP 地址:192.168.1.10、192.168.1.11、192.168.1.12;”
    2021-08-10
    3
    3
  • coder
    这一篇看了近两周
    2022-04-19
    2
  • knife
    大佬 ,虽然Docker Swarm被淘汰了,但是Kubernetes flannel 有tun的有vxlan的还有路由的
    2022-02-15
    2
  • 偶系外星人
    惊叹于周老师的由远及近,深入浅出的表述能力,请问这个方面如何培养? 另外,做了snat后回来的包不需要做dnat,查询snat会话就可以完成回程报文dip的转换
    2021-12-17
    2
  • 贝氏倭狐猴
    文中“Linux Bridge构建单IP容器网络”里面多次提到“veth0 的 IP,即 192.168.31.1”,是否应为“veth0 的 IP,即 192.168.1.10”?
    2021-08-22
    2
  • zhanyd
    TAP 设备与 TUN 设备工作方式完全相同,区别在于: tap 和 tun 虽然都是虚拟网络设备,但它们的工作层次还不太一样 TUN是一个点对点的三层设备(或网络层设备) TUN 设备的 /dev/tunX 文件收发的是 IP 层数据包,只能工作在 IP 层,无法与物理网卡做 bridge,但是可以通过三层交换(如 ip_forward)与物理网卡连通。 TAP设备是一个二层设备(或者以太网设备) TAP 设备的 /dev/tapX 文件收发的是 MAC 层数据包,拥有 MAC 层功能,可以与物理网卡做 bridge,支持 MAC 层广播
    2021-03-27
    1
  • 三三
    太顶了,待有空了细看
    2022-06-19
  • Stephen
    真的是巨佬,太牛逼了
    2022-06-17
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部