在linux中理解“forward”

linux的哪一部分负责在接口之间“ 转发 ”stream量?

我知道关于“ / proc / sys / net / ipv4 / ip_forward ”,但OS,内核或模块的哪一部分实际上是检查这个设置并决定是否执行转发?

内核是坐在那里, 无意识地转发任何收到的数据包,这是不是寻址到本机到另一个接口的基础上路由表?

这是我一直想深深理解的一个非常根本的问题。

linux的哪一部分负责在接口之间“转发”stream量?

IPnetworking堆栈。 所有IP协议(UDP,TCP等)都运行相同的基本路由工具和行为。 IPv6的情况也是如此,它具有不同的实现,但基本上是相同的架构。

内核是坐在那里,无意识地转发任何收到的数据包,这是不是寻址到本机到另一个接口的基础上路由表?

是。 除了“无意识”的部分,你想说的“按照devise”。

这个过程很简单:当确认IP规范的机器接收到一个数据包时,会做出一些非常简单的决定; 基本的过程是:

  1. validation这是一个理智的数据包。
  2. 检查它是否注定要用于本地IP地址,如果是,则在本地交付。
  3. 从路由表中find下一跳。
  4. 发送数据包到下一跳,或者发送“无法传送”的错误。

ip_forward(...)方法作为整体algorithm的一部分被调用,并且如你所想的那样简单。 IP从根本上说是一个非常非常简单的协议。