linux虚拟网络设备之,Linux虚拟网络设备
8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
tap/tun常用于隧道通讯,通过一个字符设备来实现用户态和内核态的通讯,字符设备一端连接着用户空间,一端连接着内核空间。
对应的字符设备文件位置:tap: /dev/tap0
tun: /dev/net/tun
当应用程序打开字符设备文件时,驱动程序会创建并注册相应的虚拟设备接口,以tunX或tapX命名。应用程序关闭设备文件时,驱动程序会删除tunX和tapX网络虚拟设备,并删除建立起来的路由信息。
两个设备的不同点:tap是一个二层网络设备,只能处理二层的以太网帧
tun是一个点对点的三层网络设备,只能处理处理三层的IP数据包1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26┌──────────────┐
│ │
│ APP │
│ │
└───────┬──────┘
│
│
│
│
│
│
┌────────────▼──────────┐
│ │
─ ─ ─ ─ ─ ─│ /dev/net/tun ├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
│ │
└────────────┬──────────┘
│
│
│
│
│
┌───────▼──────┐ ┌──────────────┐
│ │ │ │
│ tunX ├────────────────▶│Network Stack │
│ │ │ │
└──────────────┘ └──────────────┘
tun设备应用举例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33┌──────────────┐ ┌──────────────┐
│ │ │ │
│ APP A │ │ APP B │◀┐
│ │ │ │ │
└───────┬──────┘ └───────┬──────┘ │
│ │ │
│ │ │
1│ │ │
│ 5│ │
│ │ │
─ ─ ─ ─ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│─ ─ ─ ─ ┼ ─ ─ ─ ─ ─
│ │ │
│ │ 4│
│ │ │
┌────────────▼────────────────────────▼─────┐ │
│ │ │
│ Network Stack │ │
│ │ │
└────────────┬───────────────────────┬──────┘ │
│ │ │
6│ 3│ │
│ │ │
┌───────▼──────┐ ┌─▼─────────┴──┐
│ │ │ │
10.1.1.11 │ eth0 │ │ tun0 │ 192.168.1.11
│ │ │ │
└───────┬──────┘ └──────────────┘
│
7│
│
▼
10.1.1.100 / 192.168.1.100
应用程序A要发送数据到其他物理机192.168.1.100,由于物理网络环境下只有10.1.1.11和10.1.1.100是相互连通的,192.168.1.11和192.168.1.100是不通的,为了192.168.1.11和192.168.1.100能够进行通讯,需要将数据包进行一次封装。
应用程序B是通过打开字符设备文件/dev/net/tun0的方式来打开网络设备
流程如下:A构造数据包,目的ip为192.168.1.100,并发送给协议栈
协议栈根据数据包中的ip地址,匹配路由规则,要从tun0出去
内核协议栈将数据包发送给tun0网络设备
tun0发送应用程序B打开,于是将数据发送给应用程序B
B收到数据包后,在用户态构造一个新的数据包,源IP为eth0的IP 10.1.1.11,目的IP为配置的对端10.1.1.100,并封装原来的数据包
协议栈根据当前数据包的IP地址选择路由,将数据包发送给eth0
reference
linux虚拟网络设备之,Linux虚拟网络设备相关推荐
- 使用 Azure CLI 管理 Azure 虚拟网络和 Linux 虚拟机
Azure 虚拟机使用 Azure 网络进行内部和外部网络通信. 本教程将指导读者部署两个虚拟机,并为这些 VM 配置 Azure 网络. 本教程中的示例假设 VM 将要托管包含数据库后端的 Web ...
- linux虚拟机上不了王,虚拟机上安装Linux时出现的问题及解决方法
虚拟机上安装Linux时出现的问题及解决方法 1.在VMWare Workstation中RedHat Error: no usable disks had been found! 原来一般Linux ...
- linux内核网络协议栈--linux网络设备理解(十三)
网络层次 linux网络设备驱动与字符设备和块设备有很大的不同. 字符设备和块设备对应/dev下的一个设备文件.而网络设备不存在这样的设备文件.网络设备使用套接字socket访问,虽然也使用read, ...
- linux 共享内存_什么是物理/虚拟/共享内存——Linux内存管理小结一
物理内存和虚拟内存到底有什么区别? 提到内存,我们会想到经常接触的三个词:虚拟内存.物理内存.共享内存.它们分别对应top输出中的VIRT.RES.SHR三列. 1. 物理内存 系统的物理内存被划分为 ...
- linux虚拟主机_Windows虚拟主机和linux虚拟主机有什么区别?
不少租用虚拟主机的用户在问一个同样的问题:windows空间和linux空间哪个好?这里给大家做一下全面的科普. 一.windows空间和linux空间的区别 系统的不同 ①windows空间则是由w ...
- 第三次预作业20155231邵煜楠:虚拟机上的Linux学习
java第三次预作业--虚拟机初体验(学习记录) 学习在笔记本上安装Linux操作系统 通过老师给予的官网链接,下载了VirtualBox-5.1.14-112924-win和Ubuntu-16.04 ...
- Linux内核设计与实现---虚拟文件系统
虚拟文件系统 1 通用文件系统 2 文件系统抽象层 3 Unix文件系统 4 VFS对象及其数据结构 其他VFS对象 5 超级快对象 超级块操作 6 索引节点对象 索引节点操作 7 目录项对象 目录项 ...
- 如何给虚拟机上的linux系统添加虚拟硬盘
From: http://www.ezloo.com/2008/03/vmware_linux.html 给vmware虚拟机上的linux系统添加一个虚拟硬盘,并对硬盘进行分区.格式化.给分区创建文 ...
- 虚拟机上的Linux学习
title: 虚拟机上的Linux学习 date: 2018-08-08 15:48:28 updated: tags: [Linux,学习笔记] description: keywords: com ...
- linux 怎么创建接口文件,我们如何在Linux上创建多个虚拟接口?
在Linux上创建伪以太网虚拟接口,我们首先使用以下命令初始化虚拟接口驱动程序: / sbin / modprobe dummy. 然后,我们为上面刚刚初始化的虚拟驱动程序分配以太网接口别名. 但是它 ...
最新文章
- 身份证号码验证-支持新的带x身份证
- 为什么 Linux 需要虚拟内存
- 使用 utmpdump 监控 CentOS 用户登录历史
- nyoj1121周期串
- c++程序设计原理与实践_课程思政水资源系统优化原理与方法课程思政元素的探索...
- python 计算每日累计_一颗韭菜的自我修养:用 Python 分析下股市,练练手
- C#中 类和结构 值类型和引用类型以及 值传递和引用传递
- 苹果无人车野心越发明显,再挖一名特斯拉工程师,或负责汽车软件UI
- 学号:201621123032 《Java程序设计》第3周学习总结
- linux --- 启动过程
- python+pygame 最强大脑联动归位游戏
- 非对称加密算法RSA加密解密流程
- Science子刊:母亲的身体气味增强了婴儿和成人的脑-脑同步
- java cap是什么_分布式CAP是什么?它的原理是什么?
- 8法则的挑战:长尾理论与长尾效应
- 前端实现批量下载图片(自己的服务器需设置可跨域请求)
- ES6 对象的解构赋值
- 【Cartopy】1.库的安装和使用
- 教你用Ossim平台检测网络的Shellcode攻击
- Sqlserver 英文月份格式时间字符串转换为数字型日期
热门文章
- python权限不够无法写入_解决python使用pip安装模块的权限问题
- opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)
- OpenCASCADE:拓扑 API之缝纫
- wxWidgets:调试 WxWindow 应用程序
- boost::hana::detail::any_of用法的测试程序
- boost::hana::one用法的测试程序
- boost::core模块检查显式运算符bool测试程序
- 基于Boost::beast模块的异步WebSocket客户端
- Boost:基于boost::asio单元测试的测试程序
- ITK:计算图像在特定方向上的导数