一、iptables/netfilter链数据走向流程图
1、netfilter链中的数据流向
2、netfilter在内核中的位置
二、同一网段通信
1、网络拓扑图
2、分析通信
pc1-------->pc2进行数据通信
需要知道pc1和pc2的ip和mac地址,才能进行数据交互。pc1很容易知道源IP和MAC,还有就是目的IP,但是对目的MAC不知道。pc1通过数据包中的源IP和目的IP与子网掩码进行与运算,发现在同一网段。(如果pc1和pc2是接在交换机上的,那么交换机会首先进行mac地址学习,检索有没有保存pc2的mac地址,发现有的,就发送mac地址给pc1),首先pc1就向本网段发过一个ARP请求,这个ARP请求包中包括pc1的源IP地址,源MAC地址,目标pc2的IP地址,而目标MAC地址为广播MAC地址(全部为F),因为我们要找的就是目标MAC,所以这里用广播MAC地址,又因为是以太网,所以整个局域网的所有主机都能收到这个请求MAC地址的数据包,当然pc2也能收到,因此在pc2收到此ARP请求后,立即构建一个包括自己的MAC地址的ARP回应包,回应给pc1,当pc1收到这个ARP回应后,终于完成了找寻目标MAC的重大任务。这里br0也能收到arp的广播报文,但是br0解析报文的mac地址不是自己就会丢掉该报文,同时这个过程在数据链路层进行,还没有走到网络层,所以数据包不可能走到netfilter链中去(这个以前错误的理解,以为所有经过路由器的数据都要经过netfilter链)
总之同网段进行通信,可以通过arp得到目标主机的mac地址,然后进行数据交互,不会走到netfilter链中
二、不同网段
pc1-------->pc3进行数据通信
通过源IP和目的IP判断不再同一网段,这时候就需要网关,网关的mac地址也可以通过arp方式获取。pc1先获取lan1的mac地址即br0的mac地址(这时候br0的地址就是网关地址),这时候数据报文进入到路由器,路由器会判断这个报文是内网主机发送到外网去的,然后查看路由表,通过wan发送出去(这个时候应该是走的netfilter链中的第三条路线,这点还不是十分确定)。数据报文经过wan口时,源IP和MAC会变成eth1的IP和MAC,然后又通过以上方式继续学习pc3的mac地址
以上只是个人分析,分析不到位之处需要各位大神指出,共享学习
参考文献:
1、http://bbs.csdn.net/topics/340019629
2、https://linux.cn/thread-4228-1-1.html
3、http://forum.huawei.com/enterprise//zh/thread-304989.html
4、https://www.zhihu.com/question/41496681?sort=created
5、http://blog.csdn.net/nail1991/article/details/52791842
6、http://blog.csdn.net/u012819339/article/details/50847491
7、http://blog.csdn.net/hik_zxw/article/details/48845111