IKEv2 如何在没有原始套接字的情况下在 Android 上工作

How does IKEv2 work on Android without raw sockets

我正在研究 IKEv2 StrongSwan Android 的客户端实现。我无法理解的是 AndroidJava 不支持 原始套接字 ,而 IKEv2 / IPSecTransport 层下工作,这似乎违反直觉。在 CHILD_SA aka IPSec SA 建立后,通信究竟是如何发生的?

参考文献:

  1. IKE Charon keying daemon 的官方文档确实在架构图中提到了 socket 的使用,但我找不到任何进一步的参考。
  2. 我知道 StrongSwan 的 Android 客户端使用 libipsec 的用户 space 实现,但 libipsec 如何在没有原始套接字的情况下进行通信?

非常感谢任何帮助填补我理解上的空白的人!

客户端仅支持UDP封装的ESP。这些数据包 sent/received 通过已用于 IKEv2 的相同 UDP 套接字。 app's wiki 页面上提到了此限制。