Linux内核:skbuff结构 - 路由信息..

时间:2011-10-03 14:05:42

标签: linux-kernel kernel kernel-module

我有疑问,请澄清一下。假设我有一个如下所示连接的系统,

A - > B - > C - > d

我需要从A发送数据包到D,所以当数据包移出A时,它应该更新数据包或skbuff中某处的路由信息​​,以便数据包通过B正确路由,以便它到达目的地。

请告诉我在数据包中更新的位置意味着哪个标题或skbuff中的哪个参数..

Thnx提前..

3 个答案:

答案 0 :(得分:1)

从您的角度来看,您只需要目标地址D和第一个网关(或路由器)B。您不会对数据包进行任何修改,这可以在路由器中完成。 C或D路上的任何其他路由器都是透明的。

答案 1 :(得分:0)

通常,这会通过更新数据包的源和目标mac地址来实现。这可以在数据包的以太网头中找到(假设它在以太网上传输)。在普通的UDP或TCP路由中,您可以通过修改路由表在用户空间中完全执行此操作。

您是否正在实施自定义互联网协议?否则,自定义内核模块/补丁不太适合这种情况。

答案 2 :(得分:0)

当该网络中的数据包从A发送到D时,A - > B - > C - > D,A上的应用程序在D上有一个应用程序套接字.A上的IP需要通过路由找到下一跳,在这种情况下是B。此信息也可以缓存在套接字中(如某些版本的Linux,在socket-> sock-> dst_cache字段中)。 IP数据报的目标IP始终为IP为D.因此,B根据路由表将其转发到C,类似地将C转发给D.

这会回答你的问题吗?