我想在Linux上用C语言实现我自己非常简单的VPN实现。为此,我将捕获IP数据包,修改它们并向前发送。修改包括加密,身份验证和IPSec等其他内容。我的问题是,我应该以某种方式处理数据包的大小,或者这将自动处理?我知道它的最大大小是65535 - 20(对于标题)但是考虑到MTU它是较小的。我认为这是因为加密的有效载荷"封装成UDP"因为NAT-T远远大于正常的有效载荷"的IP包。
答案 0 :(得分:0)
好吧,我发现有两种方法可以解决这个问题:
1)我们可以通过设置DF标志发送大数据包,告诉我们想要片段输出数据包。但在这种情况下,数据包可能会丢失,因为并非所有设备/ etc都支持数据包碎片
2)我们可以自动计算主机之间的最大MTU,拆分它们并发送。另一方面,我们将所有这些数据包放在一起并恢复它们。这可以通过为此目的实施我们自己的“系统”来完成。
有关IP数据包碎片和重组的更多信息,请阅读here