Linux下Tun/Tap设备通信原理

Tun/Tap都是虚拟网卡,没有直接映射到物理网卡,是一种纯软件的实现。Tun是三层虚拟设备,能够处理三层即IP包,Tap是二层设备,能处理链路层网络包如以太网包。使用虚拟网络设备,可以实现隧道,如OpenVPN的实现。这篇文章我主要根据自己画的一个图来简单说明在隧道实现中两个虚拟网络设备数据包的流程。

上面的图中,左右两边分别为两台机器。一台有一块物理网卡配置了IP:172.16.1.11,这台机器的系统里有一个Tun(以Tun为例,不讲Tap了)设备,配置了IP:192.168.1.11; 另一台的一块物理网卡配置了IP:172.16.1.12,系统里有一个Tun设备并配置了IP:192.168.1.12。

左边Linux系统里有一个Application,绑定到端口地址为: 192.168.1.11:5000,右边Linux也有一个Application,绑定到端口地址为:192.168.1.12:5000,显然它们绑定的都是Tun设备的IP,接着它们就通过这两个地址通信了。

假设左边的Application要给右边的Application发送一个数据包,流程是这样的:

左边的Application并不知道什么虚拟网络设备,它只知道往"192.168.1.12:5000"这个地址发送,左边主机系统首先按正常的发包过程处理,比如判断目的主机是不是位于同一网段等等,然后数据包就在Linux的网络协议栈中穿行。Tun设备并不是真实的物理网卡,它不知道把数据包往哪里送,但是这些经过了Linux网络协议栈的数据可以从Tun设备的文件描述符中读取到,图中的“User
Program”就是监听这个描述符等待读取数据的。这个“User Program”程序绑定的端口地址是:172.16.1.11:6000,每当它从Tun设备读到数据的时候,就把这些数据从物理网卡发送出去,目标地址是右边的:172.168.1.12:6000。

数据到达右边的系统,经过网络协议栈之后到达“User Program”应用进程,“User Program”将接收到的数据往Tun设备对应的文件描述符写入。对于Tun设备来说,“写入”就像是物理网卡接受到数据包一样,因此这些接收到的数据又进入了Linux的网络协议栈,最终到达右边的Application。

可能有人迷糊了,这里的Application是指各种各样的用户程序,如ping工具。“User Program”是用来辅助Tun设备来实现隧道功能的,可以想象成是OpenVPN进程,没有它隧道就废了。

想要看一个简单的隧道实现吗?戳这里

时间: 2024-11-25 12:53:59

Linux下Tun/Tap设备通信原理的相关文章

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

昨天韦哥写了<Linux下Tun/Tap设备通信原理>一文,只提到了两个使用Tun的用户进程之间的通信路径,并没有说明Tun虚拟网卡驱动是如何实现的,而正好看到了这里的一篇讲解这方面的文章,果断转载了,感谢作者,原文在这里:虚拟网卡TUN/TAP 驱动程序设计原理 简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路. tun

TUN/TAP设备浅析

https://www.jianshu.com/p/660e69326e65 在 linux 2.4 及之后的内核版本中,tun/tap 驱动是默认编译进内核中的. (tun编译到内核中, tap作为内核模块编译) TUN/TAP设备浅析(一) -- 原理浅析 https://www.jianshu.com/p/09f9375b7fa7 TUN/TAP设备浅析(二) -- TUN/TAP的编程 https://www.jianshu.com/p/ab91f7cd98cd TUN/TAP设备浅析(

Linux下tempfs及/dev/shm原理与应用

引言: 在linux或unix中使用df命令查看文件系统会发现类似如下信息(ubuntu12.04) 其中有一部分是tmpfs文件系统,挂在/rum下,还有个 none文件系统挂在/run/shm下. 什么是tmpfs? tmpfs是Linux/Unix系统上的一种基于内存的文件系统.tmpfs可以使用您的内存或swap分区来存储文件.由此可见,temfs主要存储暂存的文件. linux内核中的VM子系统负责在后台管理虚拟内存资源Virtual Memory,即RAM和swap资源,透明地将RA

Linux下简单的socket通信实例

Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Bruce Lee       学习网络编程也一段时间了,刚开始看<UNIX网络编程>的时候,觉得这本厚厚的书好难啊!看到后来,发现并没有想象中的那么难.如果你是新手,建议你看到第二部分结束后,开始着手写代码.不写代码肯定是不行的.看100遍也没有敲一遍实现一遍来的清楚.敲完以后,带着问题去看书,你会

Linux中的TUN/TAP设备

今天才发现这家伙...怎么讲...深以为耻.晚上的任务是加深对它的了解,就这么定了. 1. General questions.1.1 What is the TUN ?  The TUN is Virtual Point-to-Point network device. TUN driver was designed as low level kernel support for IP tunneling. It provides to userland application two int

Linux下进程间Socket通信调试debug方法

在一个复杂的软件系统中,往往需要有各个组件之间的数据传递,在组件间数据传递过程中,又会不可避免的出现一些小问题,这时候我们就需要来进行debug了,由于最近的一个系统使用到了collectd和rrdcached来收集数据和画图,它们之间采用了Unix socket通信,因此小小的学习了一下相关知识. 首先我们来回忆下Linux下进程通信有哪些方法: 管道(Pipe)及有名管道(FIFO)\UNIX BSD 信号(Signal) \UNIX BSD 报文消息队列(Message)\UNIX sys

Linux学习之路-http通信原理

http通信原理 应用通讯的基本模型分析 基本通讯流程: 客户端http应用使用本机IP+随机注册生成的TCP端口,形成套接字socket,调用系统socket api 再经过网络层.数据链路层.物理层层层封装,把数据送达请求的服务器,经过层层解封,送达对应的http服务监听的套接字socket监听的相应的端口上. 期间涉及到的N种技术: (1)TCP和UDP协议 TCP特点: a.面向连接:收发数居前必须和对方建立可靠连接,一个连接必须经过3次握手 简单过程: 主机A向主机B发出连接请求数据包

Linux下查看USB设备的VID、PID命令

Linux下查看PID命令 cat /proc/bus/usb/devices 或 lsusb 方法一:在/etc/init.d/rcS中添加mount -t usbfs none /proc/bus/usb. 方法二:在shell中输入mount -t usbfs /proc/bus/usb /proc/bus/usb. 前提是在编译内核时选中usb device filesystem. # cat   /proc/bus/usb /device T:  Bus=01 Lev=00 Prnt=

win7系统无线 VirtualBox rehat 32位linux 下 host-only模式相互通信及上网 配置

虚拟机环境:virtualBox虚拟环境 redhat 32位 主机环境 : win7 无线路由 模式: host-only win7下nat模式原先的设置基于 有网线连接的情形下,在使用了无线路由之后 ,l虚拟机和主机之间的无法通信,于是由重新配置了host-only模式. 关于virtualBox模式介绍,参考 http://blog.sina.com.cn/s/blog_7de9d5d80100t2uw.html,下面是我的配置. 1 首先将 无线路由网卡启动启用Internet连接共享,