工作中经常需要明确网络包在Linux内核中的游走路径。这通常有两种方法解决:
1 是通过查看内核源码确定。
2 是根据通用流程,思考确定。
第一种方式实践性强,但是需要对内核网络代码熟悉,否则,查找过程本身会有时间沉没。当然,如果条件允许,也可以借助现在流行的各种探测工具,比如bpf、ftrace等。通过此法,获取的结果一般是绝对正确的。
第二种方式理论性强,更多的适应于那些需要辅助定位问题,而不需要精确匹配的场景。可能这种情况居多。比如,只是想配置一下防火墙或者路由表,然后看看效果。总体上偏应用层。
如果你的目的是学习,那么,可以二者结合起来, 通过第二种确定大方法,然后通过第一种确定细节。类似于我们使用显微镜的过程,先粗调再细调。
本博文整理几个网上的经典总流程图,以便在需要时能够随时查看。以下图片均来自网络。
以下三张图来自
Linux iptables 详解 - qwertwwwe - 博客园
以下是个人总结的两个图
最后,感慨一下。学了很多东西,如果不用,很快也就遗忘了。所以,结合使用场景来学习,而非单纯的学习,效果可能更好。