文章目录

  • 收发机制原理
    • 共性
      • 虚拟网卡和物理网卡的通信
      • 网络传输包格式
    • 接收机制
    • 发送机制
    • 服务器端的转发机制

本章要研究的是openxxx的收发原理,实际上研究就是研究tun/tap网卡驱动的相关原理。

收发机制原理

共性

openxxx开启后,出现了 tap0 虚拟网卡,如下图:


tap类型的虚拟网卡是tun/tap驱动程序实现的,也就是说 openxxx 基于 tun/tap 虚拟网卡驱动了隧道包封装。

其中,tap表示虚拟的是以太网设备,tun表示虚拟的是点对点设备,这两种设备针对网络包实施不同的封装。

那么,虚拟网卡和物理网卡的转发原理是什么(数据包肯定要从物理网卡才能流出)?通信包又是如何封装的?这两点是本小节的主要关注点。

虚拟网卡和物理网卡的通信


从这个路由表可以看出,网段是10.8.0的IP数据包都会被发到tap0网卡。tap0网卡属于网卡,同样被系统内核的网络设备管理系统来管理。

站在管理系统的视角来看,虚拟网卡和实际网卡一样,都是网络设备。网络设备收到的数据,都会发到上层协议栈处理,而协议栈发出的数据,同样也会发动对应的网络设备。下图简要表示了这个结构:

协议栈根据目的IP来决定将数据包路由到哪一个网卡,那么虚拟网卡下层的“物理设备”是什么?

因为数据包肯定是从物理网卡出去的,所以虚拟网卡发出去的数据包最终要发到物理网卡。而基于tun/tap的虚拟网卡,其实现是通过用户态程序来将数据包转交。

而内核态和用户态的数据交互,在Linux下面有多种方式,比如通过Socket或者文件系统管理的文件交互或者设备文件。Linux下面的设备文件分为三大类:块设备、网络设备、字符设备。
块设备主要是存储类型的设备;网络设备使用socket访问;而字符设备就是以字节流形式通讯的I/O设备。

这里tun/tap驱动程序选择的是以字符设备(字符设备文件,Linux一切皆文件)作为传输通道。细节图如下(只看红线部分):

图中虚拟网卡将数据发送到字符设备文件,然后用户程序读取到文件内容后,进行处理,处理完以后将其发往协议栈,最后经由物理网卡发送出去。

可以看出,虚拟网卡既负责实现物理网卡的功能,又负责实现和字符设备的交互。所以tun/tap驱动程序实际上分成了两块:网卡驱动和字符设备驱动。

网络传输包格式

openxxx搭建好以后,我们都是直接使用局域网IP通信的,局域网IP数据包不能直接在公网上路由,我们其他应用发出的原始数据包示意图如下(我们只关注IP层):

这样的数据经过协议栈后自然会转发到虚拟网卡tap0,再有虚拟网卡tap0将其发送到openxxx,然后openxxx内部将这个完整的数据包进行加密,再封装上公网IP包头,数据包示意图如下:

所以实际上在网络中传输,路由依靠的仍然是公网IP头进行数据包的路由。

至于openxxx怎么知道内网和公网IP的映射,这点在openxxx客户端建立连接的时候就已经确认了。因为建立连接的时候openxxx会指定客户端的内网IP,并且由于能够收到客户端的握手信息,所以能够从包中提取到客户端实际的公网IP。

接收机制


接收机制如上图所示,蓝线是公网IP,红线是解密后的内网IP包。经过两次协议栈的路由,最终将数据发到用户程序。结合数据包的流转即可得知过程。

发送机制


发送机制如上图所示,红线是内网IP,蓝线是加密过后的公网IP包。包格式如上文所述。根据数据包的流转,即可得知过程。

服务器端的转发机制


服务端转发的时候并不需要经过tap虚拟网卡,因为数据包首先会到openxxx(参见接收机制),openxxx内部会得知该数据包是要转发到另外一台“局域网客户端的”,所以根据建立连接时的公网IP-内网IP映射关系,将公网IP包的目的IP改变即可。
所以蓝线部分直接就将数据包发送出去了。

为了验证猜想,直接将服务器端的tap0虚拟网卡关闭,一段时间后客户端之间仍然可以正常通信,所以在转发机制这边并不需要走虚拟网卡。

tun/tap虚拟网卡收发机制解析相关推荐

  1. linux下使用tun/tap虚拟网卡

    tun/tap虚拟网卡介绍 tun是一种虚拟网络设备,tun设备一端连接着用户程序,一端连接着内核协议栈,任何时候从协议栈发到tun网卡的数据都能从用户程序中读到,而从用户程序写入/dev/net/t ...

  2. tun/tap虚拟网卡

    简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在li ...

  3. Linux TUN/TAP 虚拟网卡编程入门https://backreference.org/2010/03/26/tuntap-interface-tutorial/...

    原文: https://backreference.org/2010/03/26/tuntap-interface-tutorial/ (为防和谐,下文中p=屁) Tun/Tap interface ...

  4. 启用tun设备开启tap虚拟网卡功能

    注意:该文章中的arp应答部分是有问题的,由于作者现在已经没有实验环境无法再进行修正了,望看该文章的人注意一下 关于tun设备启用tap网卡,就是启用一个字符设备,使用open函数得到一个tun设备的 ...

  5. linux虚拟网卡tun,Centos7 创建虚拟网卡(tun/tap)

    创建网卡.创建网桥并建立桥接 [root@kolla ~]# cat create.sh create_br(){ tunctl -t storage -u root brctl addbr virb ...

  6. linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上

    目录 linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上 一.tun/tap设备简介 二.在linux上使用tun/tap设备模拟一个虚拟网卡 三. 创建网桥连接到 ...

  7. 超猛tuntap虚拟网卡实现超猛UDP隧道

    TUN/TAP虚拟网卡在25Gbps物理网卡的环境下可以接近25Gbps的转发能力吗? 答案当然是可以. 实现简单到让你怀疑人生! 首先看一个图: 上周末写了点代码,这周贴上去: https://gi ...

  8. 图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN

    Linux的网卡驱动中内含了很多"虚拟网卡".早先的文章曾经详细分析过tun,ifb等虚拟网卡,类似的思路,在虚拟化大行其道的趋势下,Linux源码树中不断增加对"网络虚 ...

  9. (OK) 图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN

    http://blog.csdn.net/dog250/article/details/45788279 Linux的网卡驱动中内含了很多"虚拟网卡".早先的文章曾经详细分析过tu ...

最新文章

  1. MLCC噪声啸叫及对策
  2. POPUP_GET_VALUES
  3. 数据库系统概念总结:第十二、十三章 查询处理和查询优化
  4. Genymotion模拟器
  5. Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
  6. HDU 3081 Marriage Match II【并查集+二分图最大匹配】
  7. call线程起名字_Java线程的5个使用技巧
  8. Linux console on LCD
  9. Zuul 2 –样本过滤器
  10. java中存在对多个对象加锁的情况_Java对象锁和类锁全面解析(多线程synchronized关键字)...
  11. nuxt webpack配置css,vuecli或nuxt用Webpack的优雅ProgressBar(webpackBar)
  12. 计算Linux内存,CUP,硬盘使用率的shell脚本
  13. GridView 一些操作
  14. 新型APT组织正在攻击全球的政府实体
  15. Ng第五课:Octave 教程(Octave Tutorial)
  16. paip.JAVA的几大优点与缺点相比C#.NET.txt
  17. 全开源即时通讯(IM)系统 高仿微信
  18. 离散度计算公式 python_Python分析离散心率信号(中)
  19. 嵩天老师python123测验7: 文件和数据格式化 (第7周)
  20. 《仿真使用ARENA软件》

热门文章

  1. HDOJ 2108 Shape of HDU(凸包问题)
  2. wps linux 中文ibus,解决wps for linux 中文输入法光标不跟随的问题
  3. 华为服务器raid卡型号,RAID卡类型 - 华为V2V3服务器 RAID控制卡 用户指南 45 - 华为...
  4. 你的业务被AI所取替的风险度有多高?AI社交、克隆人、角色扮演、代理人
  5. 退市35年后,牛仔裤品牌李维斯要重新IPO了 1
  6. mmap java_Java中mmap的使用
  7. 汉诺塔问题思路的证明
  8. 30个最优秀的在线照片编辑工具
  9. Scaleform相关资料整理
  10. 一念起,念念不绝,此所谓初心