研究kernel的网络代码有段时间了,一直没找到什么切入点,今天以数据包在不同网络层面上的传输为准则跟踪内核代码,查看数据包是如何构造的。
基于linux-1.0.9代码,运行ping 127.0.0.1,跟踪内核执行流程:
可以看到,用户程序调用sendto函数,系统调用_sock_sendto,然后依次构造ETH Header,IP Header,ICMP包。