问题描述
使用 AFWall+(一个基于 iptables 的防火墙)时有人提问:为什么 Android 内核会尝试在所有时间都保持与互联网的连接?即使屏蔽了此功能也没有发现任何劣势或问题。
AFwall+ 提供了一个简短的答案,表示尽管内核并未直接通信,但它会传递一些应用程序的数据包信息,并基于标记(fwmark
)进行策略路由。这究竟是什么意思呢?这里我们尝试简化解释 fwmark
的概念及其含义;此外还将探讨允许内核通过 TCP 通信是否有好处。
解决方案
A. fwmark
是什么?
fwmark
,简而言之即“防火墙标记”。在 Linux 内核中,它代表一种所谓的“netfilter 标记”。标记机制是系统用来对数据包进行分类的一种方法,这些分类信息可以用于指导路由决策或执行特定的策略。通过 iptables
规则设置该标记值后,内核会对这些带有标记的 IP 数据包做出相应的操作。
B. 如何理解 fwmark
?
通常来说,在网络配置中使用 fwmark
的主要目的是将数据包分类、标记并进行管理。具体做法是在执行某些策略时(比如负载均衡或者特定的应用行为追踪)给数据包打上一个标志。这样,路由引擎可以在稍后的网络路径选择过程中识别并处理这些被打上了标签的数据包。
C. 手机 Android 内核中为何使用 fwmark
?
在当前版本的 AFWall+ 中提及,Android 设备内核可能继承了原 Linux 主流系统中的一些特性。特别是这里涉及的就是fwmark
功能;它最初设计用于帮助分发服务(比如虚拟服务器)向同一真实服务器上路由不同IP地址所发出的请求。
D. 允许内核通过 TCP 通信是否必要?
对于个人用户而言,AFwall+ 设计者建议屏蔽所有外部对内核的网络连接需求。因为从设备实际使用角度来看,这类连接通常不需要,并且可能会引入不必要的安全隐患或稳定性问题。
然而,允许内核具备此类功能在理论上能够使更复杂的应用逻辑得以实现,在某些高级场景下可能带来一定优势(比如确保系统的高可用性和连续性)。但普通用户一般不需要这种设定。
总结
简单来说,fwmark
是一种在网络数据包传递和路由管理中的工具。不过对于个人设备而言,除非有明确需求,否则通常可以安全地屏蔽其网络访问权限,而不会影响正常使用。
希望上述解释能够为理解 Android 内核为何需要持续互联网连接以及有关 fwmark
的概念提供帮助!