理解 Linux 中的“forward”

理解 Linux 中的“forward”

Linux 的哪个部分负责“转发“接口之间的流量?

我知道“/proc/sys/net/ipv4/ip_forward“但是操作系统、内核或模块的哪个部分实际上正在检查此设置并决定是否执行转发?

内核是否在那里?漫无目的地根据路由表将任何未发往本机的接收数据包转发到另一个接口?

这是一个非常基本的问题,我一直想深入了解。

答案1

Linux 的哪个部分负责在接口之间“转发”流量?

IP 网络堆栈。所有 IP 协议(​​UDP、TCP 等)都使用相同的基本路由工具和行为。IPv6 也是如此,其实现略有不同,但架构基本相同。

内核是否会坐在那里并根据路由表盲目地将任何未发往本机的接收数据包转发到另一个接口?

是的。除了“无意识地”部分,你的意思是“按照设计”。

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

  1. 验证这是一个正常的数据包。
  2. 检查其是否是发往本地 IP 地址,如果是,则在本地传送。
  3. 从路由表中找到下一跳。
  4. 将数据包发送至下一跳,或者发送“无法送达”错误。

ip_forward(...)方法作为整个算法的一部分被调用,并且和您想象的一样简单。从根本上说,IP 是一种非常非常简单的协议。

相关内容