网络设备驱动学习
概述:本周主要学习了网络驱动层面的一些知识,最主要的学习目标是基本弄清包的发送与接收的过程,这不仅涉及到了高层的协议与机制,底层的驱动与硬件,更要理解数据包的封装与包格式。我们主要是围绕着设备驱动开发的第十六章来学习这些内容。
问题:对十六章进行细化后发现主要可以归结成对几个问题的把握,包括数据包的承载问题,加包头与去包头的实现,网络的框架结构,网络设备的注册与注销,数据的发送与接收流程。
正文:
一、数据包的承载问题
这个问题落到了结构体sk_buff上,也就是套接字缓冲区,根本上来讲就是内存中存放传输数据包的一块内存区域。此结构体流动于各协议层之间,发送和接收时,用于添加协议头与剥去协议头,这两个操作就是通过sk_buff里的四个指针域来实现的。下面来简述这个关键结构体的一些成员:
(1) .sk_buff中的各层协议头:
采用了联合体来描述各层的协议头,分别描述了传输层h、网络层nh和链路层mac中的各个协议头,其中包括的成员主要就是各层的协议头,还有指向所在层头部的指针*raw。
(2) .sk_buff中4个数据指针:
head/end:套接字缓冲区的起始地址/终止地址