tun/tap 的区别,是处理协议的接口还是操作系统?

tun/tap 的区别,是处理协议的接口还是操作系统?

我很难理解 tap 和 tun 接口之间的区别。我知道这是一个经常被问到的问题,对此我深表歉意。我在 stackoverflow 上问了同样的问题,有人告诉我试试这个论坛,所以我希望我处于一个好的位置。此外,我只是对网络感到好奇,但我不是网络学生或专业人士,所以如果我的问题对你来说太简单,请原谅我。

我读到tap在第2层工作,tun在第3层工作。我还读到tap用于桥接,tun用于路由。我已经听说过诸如“路由器在第 3 层工作”或“桥在第 2 层工作”之类的说法:这对我来说很有意义,因为路由器操纵第 3 层协议而网桥操纵第 2 层协议?但是,因为 tap 和 tun 是“接口”,这意味着像“接口在第 3 层工作”这样的句子有一定的意义,但我不明白它是什么:我的意思是接口不操纵协议(操作系统会这样做,但是不是接口)所以听起来像 tun 接口 == tap 接口:

如果我使用位于不同网络(192.168.2.1/24 和 192.168.3.1/24)上的两个 IP 创建两个分接接口(使用 tunctl),那么我将它们链接到两个 kvm 虚拟机(一个分接接口与一台虚拟机匹配)如果我在主机上启用路由,我的两个虚拟机就可以通信。

所以tap接口也可以用于路由:与tun有什么区别?也许 Tap 也是 tun 接口?

我也可以使用 tunctl 命令创建一个 tap 接口,但是如何使用相同的命令创建一个 tun 接口(该命令称为 T​​UNctl 而不是 TAPctl...)?

而且有人告诉我:

TUN 设备是虚拟以太网适配器,而 TAP 设备是虚拟点对点 IP 链路(如果这些没有意义,请询问您的搜索引擎点对点 ip 链路和虚拟 IP 链路之间有什么区别)以太网)

所以我研究了点对点 ip 链路和以太网链路,我还有其他问题:

  1. 什么是“点对点 IP 链接”?根据我的说法,点对点链接是指当我们有一个由多台机器组成的网络时,两台机器之间进行通信的事实,而其他机器不知道这一点。所以我猜“点对点 ip 链接”是一种特殊情况,可以称为“第 3 层点对点链接”,这意味着点对点连接由第 3 层确保,对吗?

  2. 如果我有几台PC通过以太网连接到交换机,则所有链接都可以被视为“点对点ip链接”。维基以太网页面也说了类似的话(“(...)它是为点对点链接而设计的”)。这里同样的事情:http://ethernetdirect.com/support_faqs.asp“以太网是一种点对点网络方案”那么“点对点ip链路”和以太网链路有什么区别呢?

你能帮我澄清一下吗?

答案1

基本的 不同之处TUN和之间TAPOSI层它们发挥作用的地方(这确实不是包括每种类型设备所需的编程):

  • 轻敲OSI 第 2 层) - 名称TAPto TAP into您与材料进行物理连接的位置(不仅仅是以太网电缆,您可以TAP进入一桶啤酒例如)
    TAP 充当计算机所连接的以太网电缆的物理延伸。这意味着它可以通过frame该线上存在的任何内容。例如 IPv4/6、Netware IPX 和 Appletalk 等。

  • TUNOSI 第 3 层) -TUN来自函数的名称作为 a和 的TUNnel
    终点TUNnel仅有的通过可路由的IPv4 packets(以及支持的 IPv6)。它还需要正确设置路由,以便packets可以正确路由到下一跳。

开放VPN提供信息。

此外,有人告诉我:
TUN设备是虚拟以太网适配器,而TAP设备是虚拟点对点IP链路

正如您现在所看到的,这就是错误的绕路..

答案2

一个系统可以有多个不同类型的网络适配器。

TAP 接口代表虚拟以太网适配器。通过虚拟适配器的数据包将采用带有源和目标 MAC 地址的以太网帧的形式(尽管我认为它们可能会省略帧检查序列,但不确定)。就像真正的以太网适配器一样,内核将使用 ARP/ND 将“下一跳 IP 地址”转换为 MAC 地址,并对传入数据包执行 MAC 过滤。就像真正的以太网适配器一样,Tap 接口可以(如果需要)作为以太网桥的一部分包含在内。

TUN 接口代表虚拟“原始”适配器。通过虚拟适配器的数据包是来自第 3 层协议的原始数据包,带有一个可选标头来指示数据包类型和标志。内核不会尝试将下一跳 IP 地址转换为任何形式的较低级别地址。

答案3

我知道自从提出这个问题以来已经很长时间了,其他答案已经提供了有关两者之间差异的技术信息TAPTUN因此我不会费心重复所说的内容。

我想从以下角度回答这个问题“语言混乱”

读完这个问题,我觉得你的困惑和沮丧很大一部分来自于他/她阅读的材料中单词的令人困惑和冲突的用法/含义。我认为关键问题是:根据上下文,单词/术语可以用来表示不同的事物。如果文档的作者想要将观点传达给他/她的读者,那么作者必须能够让读者看到上下文。然而,这也部分取决于读者是否有足够或正确的知识来清楚地看到上下文。

当作者和读者不知何故不在同一语境中时,就会发生混乱。

责怪任何一方都不好,但我个人认为更应该责怪作者,因为他们要向读者传达一个观点,所以他们自然承担了说清楚的负担。

回到你的问题。

为了澄清您的困惑,如下:

这对我来说很有意义,因为路由器操纵第 3 层协议而网桥操纵第 2 层协议?但是,因为 tap 和 tun 是“接口”,这意味着像“接口在第 3 层工作”这样的句子有一定的意义,但我不明白它是什么:我的意思是接口不操纵协议(操作系统会这样做,但是不是接口)所以听起来像 tun 接口 == tap 接口:

你要知道,“接口”这个词在这里实际上是指两个对象。

想想物理网桥或路由器:它是一个带有端口的盒子。这些端口是您插入电缆的地方。对第 2 层或第 -3 层协议的操作不会发生在这些端口上,而是由运行在那里的软件在盒子内部进行。因此,如果有人说“网桥/路由器上的端口在第 2/3 层工作”听起来很奇怪,因为是盒子在第 2/3 层工作,而不是端口本身。

然而,如果我们在更大的背景下看待网桥或路由器,即在它们后面的整个网络的背景下,可以说网桥或路由器是网络之间的“接口”。在这里,我们不再将网桥/路由器视为一个“盒子”,而是一个连接到后面更大系统的“点”。是的,网桥或路由器确实是一个带有端口的盒子,但在这个更大的背景下,我们不太关心这个盒子的细节。我们将这个盒子视为一个整体。因此,在本文中,“接口”一词不仅仅指盒子上的端口;还指代盒子上的端口。它包括能够操作第 2/3 层协议的盒子。

那么,回到关于tap和 的问题tun。我认为:

  1. Atap或 atun是一个接口(在端口的意义上),因为它不操作协议。
  2. 当我们查看更大的上下文时,我们将tap/tun接口及其后面的程序/操作系统/虚拟机作为一个整体来查看,我们可以说这是其他系统与之通信的“接口”。 “界面”这个词的含义在这里略有变化,如果你没有注意到这一点,或者作者没有让你注意到它,就会发生混乱。

相关内容