文章目录

  • Tap
  • Tap/Tun工作原理
  • Tap在libvirt中的应用

Tap

TAP设备是Linux内核虚拟网络设备,纯软件实现,经常会和tun并列谈论。
OS向连接到TUN/TAP设备的用户空间程序发送报文;用户空间程序可以像物理接口发送报文那像向TUN/TAP口发送报文,在这种情况下,TUN/TAP设备发送(或注入)报文到OS协议栈,就像报文从物理端口收到一样。

TUN/TAP provides packet reception and transmission for user space programs.
It can be seen as a simple Point-to-Point or Ethernet device, which,
instead of receiving packets from physical media, receives them from
user space program and instead of sending packets via physical media
writes them to the user space program.

tap位于网络OSI模型的二层(数据链路层),tun位于网络的三层。

tap从功能上讲,位于数据链路层,数据链路层的主要协议有:
1 点对点协议(Point-to-Point Protocol)
2 以太网(Ethernet)
3 高级数据链路协议(High-Level Data Link Protocol)
4 帧中继(Frame Relay)
5 异步传输模式(Asynchronous Transfer Mode)
但是tap只是与其中一种协议以太网(Ethernet)协议对应。所以,tap有时也称为“虚拟以太设备”。

Tap/Tun工作原理

Linux Tun/Tap驱动程序为应用程序提供了两种交互方式:虚拟网络接口和字符设备/dev/net/tun。写入字符设备/dev/net/tun的数据会发送到虚拟网络接口中;发送到虚拟网络接口中的数据也会出现在该字符设备上。

应用程序可以通过标准的Socket API向Tun/Tap接口发送IP数据包,就好像对一个真实的网卡进行操作一样。除了应用程序以外,操作系统也会根据TCP/IP协议栈的处理向Tun/Tap接口发送IP数据包或者以太网数据包,例如ARP或者ICMP数据包。Tun/Tap驱动程序会将Tun/Tap接口收到的数据包原样写入到/dev/net/tun字符设备上,处理Tun/Tap数据的应用程序如VPN程序可以从该设备上读取到数据包,以进行相应处理。

应用程序也可以通过/dev/net/tun字符设备写入数据包,这种情况下该字符设备上写入的数据包会被发送到Tun/Tap虚拟接口上,进入操作系统的TCP/IP协议栈进行相应处理,就像从物理网卡进入操作系统的数据一样。

Tun虚拟设备和物理网卡的区别是Tun虚拟设备是IP层设备,从/dev/net/tun字符设备上读取的是IP数据包,写入的也只能是IP数据包,因此不能进行二层操作,如发送ARP请求和以太网广播。与之相对的是,Tap虚拟设备是以太网设备,处理的是二层以太网数据帧,从/dev/net/tun字符设备上读取的是以太网数据帧,写入的也只能是以太网数据帧。从这点来看,Tap虚拟设备和真实的物理网卡的能力更接近。

Tap在libvirt中的应用

  • 将guest system的网络和hostsystem的网络连在一起。

  • 通过TUN/TAP adapter,会生成一个在host system上的虚拟网卡tap

  • tun建立了point to point的网络设备,使得guest system的网卡和tap虚拟网卡成为一对

  • 从而guest system的所有网络包,host system都能收到。

  • 虚拟机将网络包通过字符设备写入/dev/net/tun(Host上);

  • 字符设备驱动将数据包写入虚拟网卡驱动;

  • 虚拟网卡驱动将包通过TCP/IP协议栈写给Host上的虚拟网卡tap0;

  • 在HOST上通过路由规则(通过网桥(东西向流量)、网桥和路由器(南北向流量)),包从eth0出去。

Linux虚拟网络基础 — Tap相关推荐

  1. Linux虚拟网络基础——veth pair

    一 简介 veth pair不是一个设备,而是一对设备,以连接两个虚拟以太网端口.操作veth pair,需要跟namespace一起配合,不然就没有意义. 我们设计一个测试用例进行实践,如下图: 二 ...

  2. Linux虚拟网络基础——tun

    一 简介 tun是一个网络层(IP)的点对点设备,它启用了IP层隧道功能.Linux原生支持的三层隧道,可以通过命令ip tunnel help来查看: [root@centos ~]# ip tun ...

  3. Linux虚拟网络基础——Firewall和mangle

    一 Firewall  iptables中的Firewall(防火墙)概念,属于网络防火墙的概念. iptables中的防火墙的这些规则是基于TCP/IP协议栈的规则,所以我们称为网络防火墙. 这些规 ...

  4. Linux 虚拟网络设备 tun/tap veth pair

    Linux 虚拟网络设备 tun/tap veth pair 本篇主要介绍一下 linux 下面的 虚拟网络设备 tun/tap veth pair 随着容器逐步取代虚拟机,成为云基础架构的标准,然而 ...

  5. linux虚拟网络设备--eth, tap/tun, veth-pair(九)

    Linux 虚拟网络的背后都是由一个个的虚拟设备构成的.虚拟化技术没出现之前,计算机网络系统都只包含物理的网卡设备,通过网卡适配器,线缆介质,连接外部网络,构成庞大的 Internet. 然而,随着虚 ...

  6. Linux系统网络基础

    Linux系统网络基础 网络管理 什么是网络 网络就是把分布在不同地理位置上的主机,通过传输介质(网线.卫星等)连接起来,通过网络协议实现主机之间数据传输与共享的目的. 网络的特点 分布式 跨区域 数 ...

  7. 云原生容器化-1 Linux虚拟网络介绍

    背景: 本文开始引入一个新的专题--云原生容器化,用于收集云和容器化相关的文章: 以Docker和Kubernates的组成.实现原理.常见操作为主体内容,还会涉及一些云的概念:初步计划会整理出以下文 ...

  8. 【Linux】网络基础(2)

    前言 本篇笔记记录我在Linux系统下学习网络基础部分知识,从关于网络的各种概念和关系开始讲起,逐步架构起对网络的认识,对网络编程相关的认知.本篇继承自网络基础1,感兴趣的可以看看哦~ 这篇文章我会记 ...

  9. Linux虚拟网络原理小结

    随着网络技术,虚拟化技术的发展,更多的高级网络设备被加入了到了 Linux 中,使得情况变得越来越复杂.在下面的内容中,将一一分析在虚拟化技术中经常使用的几种 Linux 网络设备抽象类型:Bridg ...

  10. linux内核网络基础,linux网络内核基础.doc

    linux网络内核基础 linux内核网络栈代码的准备知识 1. linux内核ipv4网络部分分层结构:BSD socket层: 这一部分处理BSD socket相关操作,每个socket在内核中以 ...

最新文章

  1. 在VSO8中使用QT
  2. elasticsearch入门一
  3. Heroku:革命性的Rails托管服务
  4. Docker启动tomcat,访问首页出现404错误
  5. c语言格式对齐填充_C ++中类的大小 课堂上的填充和对齐| 派生类的大小
  6. 单片机实验:交通灯控制
  7. JupyterNotebook配置远程登录
  8. cs224 - Lecture2: Word Vectors and Word Senses
  9. 计算机网络(9)-----TCP可靠传输的实现
  10. 深入浅出hive-hive简介
  11. java两种绑定方式_java两种单例模式用法分析
  12. C# 16进制转字符串,字符串转16进制
  13. mysql 5.7.26安装教程
  14. 手动搭建webase(3)——WeBASE管理平台
  15. vc9.vc11.vc14_vc解释了为什么vc现在如此生气
  16. 代码文本对比-前端工具
  17. pcode.linq
  18. 配置聚合连接 和 配置firewalld防火墙
  19. scada与MySQL连接_SCADA系统与实时数据库数据同步
  20. Unix操作系统的优点总结

热门文章

  1. android dagger2 单例,Dagger2进阶-单例
  2. Alfred效率神器
  3. js JavaScript 求100以内的质数(素数)和合数 以及奇数和偶数
  4. 简仿Path的商店表情弹出模块
  5. 电脑打印机都正常,打印机无法打印
  6. android弹窗不能手动关闭_如何检测弹窗、并关闭相应的安卓弹窗
  7. origin拟合曲线
  8. 笔记本单/双网卡如何同时上内外网
  9. wps excel 操作指南
  10. 三菱PLC 计数器C