源:http://mailman.ds9a.nl/pipermail/lartc/2002q2/004245.html
以上为linux中TC(Traffic Control)控制部分,和网络包在内核中的走向,下面是一个图。
这个图。我觉得,真是太经典了!
当然这个图和现在的kernel还是有点出入的,
在linux-2.6.36中。
ip_forward_finish() -->return dst_output(skb);--->ip_output()
然后是POSTOUTING是
ip_output()-->NF_IP_POSTOUTING-->ip_finish_output()这样处理过程
如果是ip_gre 活ip_ip协议的话,那么是在ip_local_deliver_finish内,调用相应的handler函数,去掉gre/ip头后处理完成后再调用netif_rx()函数。相信在代码中都是一目了然的。代码内核版本为:2.6.36
发送流程: