路由器将其收到的包的源MAC地址替换为前一跳的地址,目的MAC地址替换为下一跳的地址。
Linux提供了作为路由器工作的功能。我的问题是内核代码在包转发过程中如何实现mac地址更新功能?这部分代码在哪里
我尝试在/ net / ipv4中找到代码,但找不到任何内容......
答案 0 :(得分:2)
这不是实际发生的事情。
IP不依赖于以太网,因此发生的情况取决于较低层的基础协议。
如果它是本地发起的IP数据包,或者它是为另一个主机路由的数据包,则会发生同样的事情。
Linux的IPv4堆栈不依赖于以太网,实际上内核支持许多其他链路层协议。 IP是WAN协议,您可以在不同的底层协议之间进行路由。一些例子是
因此,当将IP帧从一个以太网接口路由到另一个以太网接口时实际发生的是链路层被完全剥离,然后在路由之后形成新的链路层。如果协议不是以太网,则将使用该协议的适当链路层数据包。
所以没有人“改变MAC地址”,而是完全重建了链路层数据包。