首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中间节点的Ip重组

中间节点的Ip重组
EN

Stack Overflow用户
提问于 2014-02-17 12:50:09
回答 2查看 2K关注 0票数 2

我有以下要求

我有一个Linux直接连接到一个嵌入式板。

Linux从互联网上接收IP流量--它需要将其转发到嵌入式板。然而,嵌入式板没有能力重新组装IP碎片。目前,我们所做的是在linux中接收重新组装的数据包,然后发送给已安装的板。但是,由于通信量很大,这在Linux中消耗了太多的CPU周期--因为这会从内核空间调用一个副本到用户空间,并且同样的数据包也会从用户空间复制到内核空间。

是否有一种方法可以让内核重新组装碎片,并将其转发到嵌入式板,而不必将数据包转移到用户空间?注意:我可以灵活地将IP数据包的目标IP作为Linux或嵌入式板。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-17 23:50:03

一般说来,这不是内置在内核中的,特别是如果您重新组装的数据包超过了MTU大小,因此不能传输到您的嵌入式板。如果您想这样做,我建议通过tun设备进行路由并在用户空间中重新组装,或者(如果您只是使用tcp)使用任何旧的tcp代理。如果写得很有效率,很难理解为什么linux PC不能跟上这一点,如果嵌入式板能够处理输出。如果您坚持使用内核,我认为有一种tcp剪接技术(请参阅基于内核的(Linux)数据中继在两个TCP套接字之间。),尽管它是否在段级工作,因此不会重新组装,我不知道。

但是,你真的需要它吗?请参阅:发现

在这里,tcp会话是用DF位设置精确地发送的,因此不会出现碎片。这意味着大多数这样的tcp会话实际上不需要支持碎片化。

票数 1
EN

Stack Overflow用户

发布于 2015-04-20 13:03:05

根据问题的标题,您似乎需要在中间节点(linux设备)上执行重新组装。这并不意味着您必须在内核空间中这样做。

看看DPDK。这是一个开源的数据平面开发工具包。这听起来可能很复杂,但它所做的只是使用Poll模式驱动程序在没有复制和中断开销的情况下将数据包发送到用户空间。

请不要,它使用轮询模式驱动程序,并将占用CPU周期。如果您准备放弃几个核心,那么可以在x86_64硬件上使用dpdk,前提是您还想在反向路径中分割数据包。

查看DPDK用于数据包碎片和重新组装的示例应用程序指南。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21829601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档