PPP和tun/tap有什么区别?两者似乎都是为了通过用户空间程序实现联网。
使用PPP,内核创建ppp%d供使用,并让用户空间程序为其提供后端。
使用tun/tap,内核创建tun%d供使用,并让用户空间程序为其提供后端...
将程序从使用tun/tap(我的Android设备上似乎不可用)更改为ppp有多困难?
最佳答案
它们都提供某种形式的网络访问,为什么有两个似乎做相同事情的不同事情?答案是他们做的事情不完全相同。
点对点协议(protocol)(ppp
)旨在通过串行链路提供IP网络连接。提供串行链接的最常见的方法是调制解调器,这些调制解调器存在于移动电话中,几年前,当您拨号到服务提供商以连接到Internet时,它们无处不在。您的ppp
连接从您的PC到接收器,接收器将串行信号转换回IP数据包,并通过Internet进行路由。
如今,当您从服务提供商处获得电缆调制解调器或ADSL调制解调器时,它会通过以太网或WiFi链路提供IP网络连接。调制解调器实际上正在做的是向您的服务提供商提供连接,这可以看作是ppp
连接。只是您的计算机不再执行从IP数据包到ADSL线路或电缆连接上的信号的转换工作。单独的调制解调器提供了一层与提供者交谈的复杂性,而您只是在谈论“简单的”以太网/WiFi。
Tun/Tap机制允许您在标准网络连接上方的一层中访问虚拟专用网络(vpn
)。因此,例如,如果您通过以太网连接到电缆调制解调器,则可以通过以太网连接访问vpn。如果您通过直接插入PC的调制解调器访问Internet,那么您将通过ppp
访问vpn。 tun/tap接口(interface)本身不提供Internet访问,它依赖于预先存在的连接。这是网络分层的一个示例。
询问将程序从使用tun/tap网络连接转换为使用ppp连接有多困难,这误解了在提供网络访问权限时两个接口(interface)的位置-tun/tap会位于ppp之上。未加密的数据包进入tun/tap接口(interface),被加密,然后作为IP数据包发送到ppp接口(interface),该接口(interface)将它们转换为串行信号,再发送到远程端,再将其转换回IP数据包并将其转发到vpn
目标解密并通过自己的专用网络进行路由。
如果删除tun/tap接口(interface),则必须修改希望通过vpn进行通信的应用程序的,以便对于任何网络通信都需要拦截它们。加密它们;转发他们;接收响应并解密。通过具有tun/tap层,您可以允许内置的IP路由选择将未加密的数据包加密并转发它们-即,您不需要修改与专用网络通信的任何应用程序。
通过添加间接层,几乎可以解决计算机科学中的每个问题。通过添加这些层,我们降低了单个组件的复杂性,但可以构建功能强大的系统。如果我们没有ppp接口(interface),则每个程序都需要知道如何进行串行通讯,如果没有tun/tap,则每个程序都需要了解如何进行vpn通信以及需要知道如何进行串行通信。 。
删除tun/tap连接的唯一方法是将ppp连接建立到专用系统。您将不得不使用类似于GSM数据的功能(9600位/秒,这是一个实际的电话通话),即使这样,您也没有进行加密,而是要通过蜂窝网络,这会破坏专用网络的全部意图。
以下是各种隧道协议(protocol)的工作原理的简要简化,但应进行足够详细的说明,以使您能够理解为什么不能仅将一个交换给另一个。
要了解为什么不同的vpn协议(protocol)使用不同的接口(interface)来执行其工作,您必须了解它们的设计方式。 TAP,L2TP和PPTP都是第2层协议(protocol)的示例。 TUN是第3层协议(protocol)的示例。
为了理解差异,我将使用邮政类比。第2层(也称为链接层)等同于 express 员。您递给他一封信,他亲自将其递给收件人。 express 员知道他所在地区的所有潜在目的地,他可以处理该地区的任何消息。
如果我们以此类推,则邮箱也可以视为有效的第2层端点。如果您想在全国范围内收到信件,请将它们放入邮箱中。这与L2TP,PPTP和TAP包装它们的数据包以便在网络上传输无关。
第3层是信件上的地址-可用于将信件从邮局移到邮局,最终由 postman 将其移交给 postman 。这是包装的数据包通过网络路由的位置。
它返回到第2层,此时 postman 知道了其交付区域内的目的地,并将信交给了预期的收件人。这是包装的数据包被解包然后由L2TP,PPTP或TAP端点处理的地方
对于TUN来说,它要容易一些。您的信件将直接发送到您当地的邮局,并通过邮寄方式送到您收集它们的目的地邮局。关于将信件送到邮局或从邮局到达目的地地址的某些细节,但这实际上并不是协议(protocol)的一部分。
接下来是如何实现它们的尴尬细节。 L2TP和PPTP都是根据ppp
定义的,ppp
是一种建立良好的机制,用于在两个端点之间建立直接连接,因此,要通过这种系统进行对话,始发地和目的地都需要说出指向点协议(protocol)。隧道提供了一个虚拟层,这些T
消息将在该虚拟层上传播(此隧道使它们以自己的名字命名PPP
)。
TAP接口(interface)是根据以太网数据包的隧道传输定义的-这些数据包是您在WiFi连接上看到的嗡嗡声。它在两个网络之间建立了一个简单的桥接器,这些以太网数据包通过该桥接器传递。以太网数据包通常封装IP数据包,使您可以将它们直接放在目的地的线路上,而无需重新封装它们。
TUN接口(interface)是根据IP数据包的隧道传输定义的-这些数据包是在转换之前的数据包,以便它们可以通过物理连接(例如以太网/WiFi)传输。这意味着您正在计算机和目标网络之间建立路由虚拟IP网络。具有由此接口(interface)提供的路由定义的目的地的IP数据包将发送到该接口(interface)。
最终产品是IP数据包可以发送到其系统上的另一个网络接口(interface)。该接口(interface)将数据包包装(对于PPTP/L2TP,包装在ppp数据包中;对于TAP,包装在以太网数据包中;对于TUN,包装在另一个IP数据包中)。在包装之前,包装之后或在这两个点都可能涉及加密(取决于协议(protocol))。理解L2TP的程序会精通ojit_code,但是如果不进行大量重写就无法使用其他协议(protocol)。