我正在阅读应用代理提供商和包隧道提供商的文档,我有点困惑。
文档说明包隧道提供商发送和接收来自/到系统的数据包,而应用代理提供商发送/接收来自/到系统的流。
数据包隧道提供程序文档中令人困惑的地方:
包隧道提供程序可以以目的IP模式或源应用模式运行。后者是单应用VPN的一种形式(另一种形式是应用代理提供商)。
但是在NETunnelProvider类中它说:
默认为NETunnelProviderRoutingMethodDestinationIP。
所以默认情况下,包隧道提供商实际上是一个应用代理提供商?我错过了什么?有人能解释一下它们的区别吗?
AppProxy和PacketTunnel是实现VPN的选项。
AppProxy与所谓的Flow对象一起工作,每个Flow都由某个应用程序启动。AppProxy接收流并将其转发到某处。
PacketTunnel与数据包一起工作。它接收到数据包,并可以在它进入网络之前对它做一些事情(比如,修改)。
现在,文档部分可能会给您带来麻烦:AppProxy和PacketTunnel接收的流/数据包究竟是什么?AppProxy:
NEAppProxyProvider类提供对网络数据流的访问以NEAppProxyFlow对象的形式。每个NEAppProxyFlow对象对应于匹配应用规则的应用打开的套接字
这意味着,你将有所有流匹配你的规则先去你的类方法,然后路由到一些新的地址。
PacketTunnel:
包隧道提供程序可以以目的IP模式或源码应用模式。
这意味着,你可以设置这样的规则:"每个数据包都要到达ip地址列表","我希望你先通过我的类方法,然后进入隧道";-这将是目的IP模式。
或者你可以设置这样的规则:"所有来自bundle id为com.my.app的包现在先去我的类方法,然后再进入隧道";这是源应用程序模式。
这(PacketTunnelProvider的源应用模式)是一种基于应用的VPN形式,因为它专注于产生流量的应用。
AppProxy也专注于产生流量的应用,所以它是另一种形式的应用VPN,但它会给你应用产生的流对象,而不是带有ip和tcp/udp报头的数据包。