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

Linux kernel Linux内核:skbuff结构-路由信息。。,linux-kernel,kernel,kernel-module,Linux Kernel,Kernel,Kernel Module,我有疑问,请澄清。假设我有一个连接如下的系统 A->B->C->D 我需要将数据包从a发送到D,因此当数据包移出a时,它应该更新数据包或skbuff中的某个位置的路由信息,以便数据包通过B正确路由,从而到达目的地 请让我知道数据包中的更新位置表示skbuff中的哪个标头或哪个参数 提前 从您的观点来看,您只需要目标地址D和第一个网关(或路由器)B。您不需要对数据包进行任何修改,这是在路由器中完成的。C或通往D的任何其他路由器对您来说都是透明的。在您看来,您只需要目标地址D和第一个网关(或路由器)

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

A->B->C->D

我需要将数据包从a发送到D,因此当数据包移出a时,它应该更新数据包或skbuff中的某个位置的路由信息,以便数据包通过B正确路由,从而到达目的地

请让我知道数据包中的更新位置表示skbuff中的哪个标头或哪个参数


提前

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

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

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


您是否正在实施自定义internet协议?否则,定制的内核模块/补丁不太可能是合适的位置。

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


您是否正在实施自定义internet协议?否则,定制的内核模块/补丁不太可能是合适的位置。

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


这是否回答了您的问题?

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


这是否回答了您的问题?

您确定标题正确吗?您确定标题正确吗?