(转自 http://blog.csdn.net/u010246947/article/details/18223085)
一、链路层原理:
1、链路层在干什么:
在报文接收方向上,网卡驱动把接收到的数据按照其对应的链路层协议(如以太网)组装成报文,然后把它上交给链路层,接口是netif_receive_skb,至此网卡驱动的任务就结束了,报文交给链路层处理;
在报文发送方向上,网卡驱动受链路层驱使,链路层告知其有报文要发送时,网卡驱动才开始工作,接口是dev_queue_xmit。
上面是链路层和网卡驱动层的接口,然而在链路层不一定是报文最终的归宿,从报文接收角度看,绝大多数报文都要最终给目的主机的应用层,协议报文会在不同协议所属层次终结,所以大多数报文都还要由链路层处理后(或不处理)再向上层转发,比如IP报文,在链路层由ip_rcv函数进入网络层处理,比如由应用程序通过原始套接字获取的报文将在链路层被直接送往socket层,比如arp协议报文会被送往arp模块去处理……