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虚拟网络设备相关推荐

  1. 使用 Azure CLI 管理 Azure 虚拟网络和 Linux 虚拟机

    Azure 虚拟机使用 Azure 网络进行内部和外部网络通信. 本教程将指导读者部署两个虚拟机,并为这些 VM 配置 Azure 网络. 本教程中的示例假设 VM 将要托管包含数据库后端的 Web ...

  2. linux虚拟机上不了王,虚拟机上安装Linux时出现的问题及解决方法

    虚拟机上安装Linux时出现的问题及解决方法 1.在VMWare Workstation中RedHat Error: no usable disks had been found! 原来一般Linux ...

  3. linux内核网络协议栈--linux网络设备理解(十三)

    网络层次 linux网络设备驱动与字符设备和块设备有很大的不同. 字符设备和块设备对应/dev下的一个设备文件.而网络设备不存在这样的设备文件.网络设备使用套接字socket访问,虽然也使用read, ...

  4. linux 共享内存_什么是物理/虚拟/共享内存——Linux内存管理小结一

    物理内存和虚拟内存到底有什么区别? 提到内存,我们会想到经常接触的三个词:虚拟内存.物理内存.共享内存.它们分别对应top输出中的VIRT.RES.SHR三列. 1. 物理内存 系统的物理内存被划分为 ...

  5. linux虚拟主机_Windows虚拟主机和linux虚拟主机有什么区别?

    不少租用虚拟主机的用户在问一个同样的问题:windows空间和linux空间哪个好?这里给大家做一下全面的科普. 一.windows空间和linux空间的区别 系统的不同 ①windows空间则是由w ...

  6. 第三次预作业20155231邵煜楠:虚拟机上的Linux学习

    java第三次预作业--虚拟机初体验(学习记录) 学习在笔记本上安装Linux操作系统 通过老师给予的官网链接,下载了VirtualBox-5.1.14-112924-win和Ubuntu-16.04 ...

  7. Linux内核设计与实现---虚拟文件系统

    虚拟文件系统 1 通用文件系统 2 文件系统抽象层 3 Unix文件系统 4 VFS对象及其数据结构 其他VFS对象 5 超级快对象 超级块操作 6 索引节点对象 索引节点操作 7 目录项对象 目录项 ...

  8. 如何给虚拟机上的linux系统添加虚拟硬盘

    From: http://www.ezloo.com/2008/03/vmware_linux.html 给vmware虚拟机上的linux系统添加一个虚拟硬盘,并对硬盘进行分区.格式化.给分区创建文 ...

  9. 虚拟机上的Linux学习

    title: 虚拟机上的Linux学习 date: 2018-08-08 15:48:28 updated: tags: [Linux,学习笔记] description: keywords: com ...

  10. linux 怎么创建接口文件,我们如何在Linux上创建多个虚拟接口?

    在Linux上创建伪以太网虚拟接口,我们首先使用以下命令初始化虚拟接口驱动程序: / sbin / modprobe dummy. 然后,我们为上面刚刚初始化的虚拟驱动程序分配以太网接口别名. 但是它 ...

最新文章

  1. 身份证号码验证-支持新的带x身份证
  2. 为什么 Linux 需要虚拟内存
  3. 使用 utmpdump 监控 CentOS 用户登录历史
  4. nyoj1121周期串
  5. c++程序设计原理与实践_课程思政水资源系统优化原理与方法课程思政元素的探索...
  6. python 计算每日累计_一颗韭菜的自我修养:用 Python 分析下股市,练练手
  7. C#中 类和结构 值类型和引用类型以及 值传递和引用传递
  8. 苹果无人车野心越发明显,再挖一名特斯拉工程师,或负责汽车软件UI
  9. 学号:201621123032 《Java程序设计》第3周学习总结
  10. linux --- 启动过程
  11. python+pygame 最强大脑联动归位游戏
  12. 非对称加密算法RSA加密解密流程
  13. Science子刊:母亲的身体气味增强了婴儿和成人的脑-脑同步
  14. java cap是什么_分布式CAP是什么?它的原理是什么?
  15. 8法则的挑战:长尾理论与长尾效应
  16. 前端实现批量下载图片(自己的服务器需设置可跨域请求)
  17. ES6 对象的解构赋值
  18. 【Cartopy】1.库的安装和使用
  19. 教你用Ossim平台检测网络的Shellcode攻击
  20. Sqlserver 英文月份格式时间字符串转换为数字型日期

热门文章

  1. python权限不够无法写入_解决python使用pip安装模块的权限问题
  2. opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)
  3. OpenCASCADE:拓扑 API之缝纫
  4. wxWidgets:调试 WxWindow 应用程序
  5. boost::hana::detail::any_of用法的测试程序
  6. boost::hana::one用法的测试程序
  7. boost::core模块检查显式运算符bool测试程序
  8. 基于Boost::beast模块的异步WebSocket客户端
  9. Boost:基于boost::asio单元测试的测试程序
  10. ITK:计算图像在特定方向上的导数