几个月前,有人提出了类似的问题,虽然答案并不十分有见地,但接受的答案中的评论使您可以洞悉可能出了什么问题。
您应该牢记逻辑驻留在OSI模型的哪一层:
- VpnService的传入和传出流在网络层中。正如您在问题中所描述的,您正在接收(并且应该依次传输)原始IP数据包。
在示例字节流中,您可以看到传入的字节流是IPv4数据报,因为前四个位是
0100(4)。有关IPv4的详细信息,请查阅此数据包结构规范。
- 转发请求时,您在应用程序层中。您应该分别使用DatagramSocket或Socket 传输UDP或TCP有效负载的 内容 (即,仅传输其数据,而不传输标头本身)。
请记住,这会跳过传输层,因为那些实现会负责构造UDP标头(对于DatagramSocket)和TCP标头和选项(对于Socket)。
您的应用程序本质上将需要能够解释和构造IPv4和IPv6标头和选项,以及作为IP有效负载的UDP标头和TCP标头和选项。



