【问题标题】:Tun/Tap interface based tunnel: How is it working?基于 Tun/Tap 接口的隧道:它是如何工作的?
【发布时间】:2016-01-30 10:41:10
【问题描述】:

基于 Tun/Tap 接口的隧道

谁能告诉我这样的隧道是如何创建和工作的?

我试过用谷歌搜索答案,但资源很少,而且主要是非常技术性的。


我知道通过这种接口发送的数据包被注入到操作系统网络堆栈中,看起来就像从外部主机接收到的数据包。此外,在此接口上接收到的数据包会传递给用户空间程序。

但是,我不明白以下几点:

为什么这样的隧道涉及建立网络连接?隧道两侧的程序是否必须在同一台主机上运行,​​或者它们可以在不同的主机上运行?网络堆栈是否通过 TCP/UDP 传递 tap 或 tun 包?

【问题讨论】:

    标签: linux networking linux-kernel


    【解决方案1】:

    Tun 和 Tap 接口都将数据从一台主机传送到另一台主机。主要区别在于您在使用 Tun 或 Tap 时获得的功能(优点/缺点)。

    通过 Tap 接口传递的数据在 OSI 堆栈的第 2 层注入,通过 Tun 接口传递的数据在第 3 层注入。这里没有更好/更差的选择 - 每个都适合特定目的。你可以阅读一个很好的解释here

    现在回答你的问题:

    为什么这样的隧道涉及到建立网络连接的使用?

    无论接口类型如何(tun/tap),您都希望将数据包从一台主机传送到另一台主机。为此,您捕获这些数据包,封装它们,然后您需要将封装的数据发送到远程端。为此,您需要设置网络连接。

    隧道两边的程序是否必须在同一台主机上运行,​​或者它们可以在不同的主机上运行?

    您正在两台不同的主机之间创建 VPN 连接,所以是的 - 两台主机上都会运行软件来处理封装/解封装。

    网络堆栈是否通过 TCP/UDP 传递 tap 或 tun 包?

    TCP/UDP 是 layer4 协议,因此从 TCP/UDP 堆栈的角度来看,数据包是通过 tun 或 tap 接口到达您的主机根本没有关系。

    编辑:澄清后续问题:

    既然您询问的是 Tun/Tap 适配器,那么让我们退后一步。当您运行 VPN 时,您的计算机 A 的行为就好像它直接连接到网络 N,即使它可能在很远的地方。要做到这一点,您需要运行一个 VPN 软件。您必须在两个地方运行此 VPN 软件 - 一个在计算机 A 中,另一个在连接到网络 N 的计算机(或网络设备)中。在计算机 A 中运行 VPN 软件时,您可以选择创建 Tun 或点击适配器。

    Q1:是的 - 交付意味着发送和接收。

    Q2:是的——表示VPN连接就像一个管道,两端都有VPN软件在运行。

    Q3:当 VPN 软件在计算机 A 中运行时,它会创建一个所谓的虚拟网络适配器。在操作系统看来,这个虚拟网络适配器的行为就像一个普通的网络适配器。它不是通过电线或电波发送数据,而是对数据进行封装、封装并通过系统中的其他适配器发送。

    【讨论】:

    • “通过 Tap 接口传递的数据被注入到 OSI 的 layer2...” - 传递的意思是“发送”吗?
    • “您正在两个不同的主机之间创建 VPN 连接,所以是的..” - “是”是否意味着程序可以在不同的主机上运行?
    • “这样做你捕获那些数据包......” - 你的意思是某些软件捕获了tap/tun接口发送的数据包吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2021-08-15
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多