tun0是一个Tun/Tap虚拟设备,从上图中可以看出它和物理设备eth0的差别,它们的一端虽然都连着协议栈,但另一端不一样,eth0的另一端是物理网络,这个物理网络可能就是一个交换机,而tun0的另一端是一个用户层的程序,协议栈发给tun0的数据包能被这个应用程序读取到,并且应用程序能直接向tun0写数据。

这里假设eth0配置的IP是10.32.0.11 (外网地址),而tun0配置的IP是192.168.3.11 (内网地址).

这里列举的是一个典型的tun/tap设备的应用场景,发到192.168.3.0/24网络的数据通过程序B这个隧道,利用10.32.0.11发到远端网络的10.33.0.1,再由10.33.0.1转发给相应的设备,从而实现VPN。

下面来看看数据包的流程:

  1. 应用程序A是一个普通的程序(比如是一个浏览器想通过vpn访问内网),通过socket A发送了一个数据包,假设这个数据包的目的IP地址是192.168.3.1 (内网地址)

  2. socket将这个数据包丢给协议栈

  3. 协议栈根据数据包的目的IP地址,匹配本地路由规则,知道这个数据包应该由tun0出去,于是将数据包交给tun0

  4. tun0收到数据包之后,发现另一端被进程B打开了,于是将数据包丢给了进程B

  5. 进程B收到数据包之后,做一些跟业务相关的处理,然后构造一个新的数据包,将原来的数据包嵌入在新的数据包中,最后通过socket B将数据包转发出去,这时候新数据包的源地址变成了eth0的地址,而目的IP地址变成了一个其它的地址,比如是10.33.0.1.

  6. socket B将数据包丢给协议栈

  7. 协议栈根据本地路由,发现这个数据包应该要通过eth0发送出去,于是将数据包交给eth0

  8. eth0通过物理网络将数据包发送出去

10.33.0.1收到数据包之后,会打开数据包,读取里面的原始数据包,并转发给本地的192.168.3.1,然后等收到192.168.3.1的应答后,再构造新的应答包,并将原始应答包封装在里面,再由原路径返回给应用程序B,应用程序B取出里面的原始应答包,最后返回给应用程序A

参考文章

Linux虚拟网络设备之tun/tap - SegmentFault 思否

linux Tun/Tap 原理相关推荐

  1. Linux tun:tap 详解

    在计算机网络中,tun与tap是操作系统内核中的虚拟网络设备.不同于普通靠硬件网络适配器实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能. t ...

  2. 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 ...

  3. Linux Tun/Tap网口(/dev/net/tun)的读写方法

    我的代码 https://github.com/liuqun/demo-linux-tun-virtual-netcard/blob/master/demo-1-ioctl/src/main.c 代码 ...

  4. linux tun 读取数据,Linux Tun/Tap网口(/dev/net/tun)的读写方法

    我的代码 https://github.com/liuqun/demo-linux-tun-virtual-netcard/blob/master/demo-1-ioctl/src/main.c 代码 ...

  5. 介绍Linux下的 Tun/Tap

    在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备.不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能. 什么 ...

  6. linux虚拟网络设备之tun/tap驱动程序设计原理(五)

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

  7. Linux的TUN/TAP编程

    TUN/TAP虚拟网络设备为用户空间程序提供了网络数据包的发送和接收能力.他既可以当做点对点设备(TUN),也可以当做以太网设备(TAP).实际上,不仅Linux支持TUN/TAP虚拟网络设备,其他U ...

  8. 虚拟网卡 TUN/TAP 驱动程序设计原理

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

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

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

最新文章

  1. ARKit从入门到精通-ARKit工作原理及流程介绍
  2. 关于outlook 2003 PST文件大小一点说明
  3. GridView学习记录(一)
  4. Android Studio 第六十五期 - Android业务组件库
  5. React + TypeScript 实现泛型组件
  6. 稀缺:百分之二的选择
  7. JavaSE各阶段练习题----多线程-垃圾回收
  8. @Value和Hibernate问题
  9. 江苏约谈滴滴、T3出行等6家企业 因疫情防控落实不到位
  10. 辽源市强化“智慧城市”建设 提高居民幸福指数
  11. 用cmd下载python库先安装_python 安装库几种方法之cmd,anaconda,pycharm详解
  12. ember new报错No matching version found for @ember-data/model@^3.11.2的解决方案
  13. java实现逆波兰表达式求值
  14. 轻量级服务器和ECS云服务器有什么区别?
  15. 使用nprobe+ntopng监控上百个路由器流量
  16. error::make_unique is not a member of ‘std’
  17. Linux内核编译基础
  18. Unity编辑器拓展之二十四:基于Unity Node Editor、ScriptableObject的配置化新手引导系统
  19. 一个屌丝程序猿的人生(一百零四)
  20. 【解决方案】TSINGSEE青犀视频RTMP推流网关+公有云直播远程监控系统,让“小饭桌”变成“放心桌”

热门文章

  1. 【声卡驱动】安装realtek high definition audio后重启电脑被自动卸载替换成系统自带的realtek auto
  2. 史上最完整的MPI实现Jacobi(雅可比)迭代算法[C++]
  3. 成都前端平均薪资水平?
  4. 火影忍者忍者先锋维修服务器,火影忍者博人传:忍者先锋配置要求介绍
  5. 自己动手画CPU《计算机组织与结构实验》之计算机数据表示 第1关:汉字国标码转区位码实验 超详细教学
  6. python 100元去买鸡
  7. 罗技鼠标重复点击故障
  8. 【数据架构】概念数据模型和逻辑数据模型有什么区别
  9. 新版itunes不显示图书_App Store构建版本iTunes不显示
  10. 物联网新产品 | 凸版推出可远距离通讯的有源标签“ZETag”