$QEMU_PATH \
-nographic \
-drive file=./rootfs.ext4,format=raw \
-net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=no,downscript=no \
-S -gdb tcp::7852

在这个qemu的配置中,-net nic,vlan=0 是客户机中的前端,-net tap,vlan=0,ifname=tap0,script=no,downscript=no是位于host机中的后端。

这是我qemu的配置,试着理解下这个配置中网络部分的原理,qemu是qemu中使用的一种虚拟的网络设备,当虚机中发生了网络行为的时候,网络数据会发送到用户态,然后用户态写入到tap设备中去,然后tap设备作为一个二层设备。这么说吧,普通的二层设备一层连实际的网络,一层连网络层;现在的tap设备,一层连用户态,一层连网络层;都是负责发包的。

同理推测下 TUN 设备是干嘛的?刚才说TAP是一个二层的设备,然后会把数据传递给网络层,关键点就是这个网络层了,

【网络层会干吗?发送数据的时候很简单,填充好自己的IP地址,然后根据路由的信息,填上目的地址,发出去;接收数据呢?接收数据会根据自己的,IP数据报可能分段,在IP层可能会发生一个合并,合并好之后,传递给TCP层?tap设备会直接给】

介绍 TAP/TUN,使用TAP设备的应用程序相当于另外一台计算机【这不就是qemu的网络虚拟化么......】

https://www.cnblogs.com/yml435/p/5917628.html

tun设备:

https://www.cnblogs.com/woshiweige/p/4532207.html

所以这样就基本就串起来了,启动了qumu之后,其实我们在客户机中看到的设备是一个三层设备,tun设备,当在客户机中往这个三层设备写数据时,qemu用户态可以直接感知到这些数据了,qemu得到这些数据之后,就把数据写入到tap0,tap0作为一个虚拟的二层设备,然后将数据并入到内核中真正的网络协议栈中去。qemu的这部分真是绝了!那么qemu相关配置中的vlan又是啥咧。

关于tap设备的更多相关文章

  1. tun/tap设备_虚拟网卡

    tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装.利用tun/tap 驱动,可以将tcp/ip协议栈处理好的 ...

  2. Linux下Tun/Tap设备通信原理

    Tun/Tap都是虚拟网卡,没有直接映射到物理网卡,是一种纯软件的实现.Tun是三层虚拟设备,能够处理三层即IP包,Tap是二层设备,能处理链路层网络包如以太网包.使用虚拟网络设备,可以实现隧道,如O ...

  3. Linux中的TUN/TAP设备

    今天才发现这家伙...怎么讲...深以为耻.晚上的任务是加深对它的了解,就这么定了. 1. General questions.1.1 What is the TUN ?  The TUN is Vi ...

  4. Python读写tap设备

    #!/usr/bin/python import os import struct import fcntl import binascii TUNSETIFF = 0x400454ca IFF_TA ...

  5. Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 在前面一篇文章 ...

  6. 【转】Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备

    原文:https://www.cnblogs.com/bakari/p/10449664.html -------------------------------------------------- ...

  7. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

  8. TAP/TUN摘要

    TUN适用于IP帧.Tap适用于以太网帧.TAP摸拟一个以太网设备(以arp广播MAC识别),它操作第二层数据包如以太网数据帧.TUN模拟了网络层ip设备(以点对点的方式,使用ip标识),操作第三层数 ...

  9. TAP/TUN(二)

    tap.c代码      #include<assert.h> #include<fcntl.h> #include<stdio.h> #include<st ...

随机推荐

  1. 初尝微信小程序2-基本框架

    基本框架: .wxml :页面骨架 .wxss :页面样式 .js :页面逻辑    描述一些行为 .json :页面配置 创建一个小程序之后,app.js,app.json,app.wxss是必须的 ...

  2. discuz 被入侵后,最可能被修改的文件

    最近发现站点被黑了,现在还不知道是由系统漏洞导致的系统账户被攻陷,还是程序漏洞,文件被篡改.有一些敏感关键词(例如:赌博,电子路单)被恶意指向,点击搜索结果自动跳转到其他站点,而且是大量的,通过搜索“ ...

  3. 解决方法:SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正(转载)

    引用:http://luowei1371984.blog.163.com/blog/static/44041589201491844323885/ SQL2008运行select count(*) f ...

  4. php正则 与 js正则

    PHP中的正则表达式函数 在PHP中有两套正则表达式函数库.一套是由PCRE(Perl Compatible Regular Expression)库提供的.PCRE库使用和Perl相同的语法规则实现 ...

  5. 裸机——210SD卡启动

    1.通过阅读iROM_Application_note可以获取关于启动的全部信息 2.记录下代码 制作SD卡启动的代码,即添加校验和的 #include <strings.h> #incl ...

  6. awk命令例子详解

    awk -F: '{print "Number of dields: "NF}' passwd 字段分隔符设为冒号,所以每条记录的字段数变成7: awk  '{print &quo ...

  7. 开放定址法——线性探测(Linear Probing)

    之前我们所采用的那种方法,也被称之为封闭定址法.每个桶单元里存的都是那些与这个桶地址比如K相冲突的词条.也就是说每个词条应该属于哪个桶所对应的列表,都是在事先已经注定的.经过一个确定的哈希函数,这些绿 ...

  8. [Codeforces958A2]Death Stars (medium)(字符串+hash)

    Description 题目链接 Solution 这里用类似hash的方法将判断2个矩阵是否相同的时间降为O(m),总时间复杂度为O(m3) Code #include <cstdio> ...

  9. android Intent onNewIntent 什么时候调用

    1.activity A 的lanch model 为singleTop 此刻,A在activity 栈顶,那么就会调用A 的onNewIntent 如果A不在栈顶,则不会调用. 2.activity ...

  10. 直接选择排序&堆排序

    1.什么是直接选择排序? 直接选择排序(Straight Select Sort)是一种简单的排序方法,它的基本思想是:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i ...