通过抓包发现,本机发出的数据包的目的IP是目标主机的IP地址,但是目的MAC地址填写的是网关的MAC地址,因为只有这样才能使得这个报文到达网关(路由器)上被转发,而且本机也不大可能知道外网主机的MAC地址;数据包在被路由器转发的时候,源MAC地址会修改成路由器的MAC地址,这个跟ARP神马的半毛钱关系都没有,因为被存储转发的IP报文是不变的,也就是说本路由器发出去的数据包的源IP地址是某个主机的地址,而源MAC地址是自己的,要是下一跳路由器指望用这个来更新其ARP的话就乱套了!实际上无论是采用RIP还是OSPF,相邻路由器之间都会定时更新路由信息,ARP缓存的更新就更不成问题了。请看路由器存储转发的过程:1.路由器将收到的以太网帧剥去帧头,然后发送到网络层; 2.网络层查询路由表,知道应该从哪个接口转发,于是再将它发送到对应接口的链路层。在这个转发过程中原来的以太网帧头派不上任何用场,而且如果非要加上原来的帧头则会增加复杂度,因此在提交链路层发送时,就重新构造帧头了,则源MAC地址就改变了(在TCP/IP详解卷一中有写)。从这里可以看出,需要在网络层进行处理的事情,与链路层是没有关系的,链路层的作用只不过是根据其目的MAC地址来将装载的IP报文送到目的地而已。在以太网中是这样,在采用了其他链路层协议的网络中是什么情况目前还不清楚。