l Linux网络子系统网络
l 系统调用接口层:为应用程序提供访问网络子系统的统一方法。数据结构
l 协议无关层:提供通用的方法来使用传输层协议。架构
l 协议栈的实现:实现具体的网络协议设计
l 设备无关层:协议与设备驱动以前通讯的通用接口指针
l 设备驱动程序接口
在Linux内核中,每一个网卡都由一个net_device结构来描述,其中的一些重要成员有:it
l char name[IFNAMSIZ],设备名,如:eth%dio
l unsigned long base_addr,I/O 基地址程序设计
l const struct net_device_ops *netdev_ops;ioc
相似于字符设备驱动中的file_operations结构,net_device_ops结构记录了网卡所支持的操做。
static const struct net_device_ops dm9000_netdev_ops =
{
.ndo_open = dm9000_open,
.ndo_open = dm9000_open,
.ndo_stop = dm9000_stop,
.ndo_start_xmit = dm9000_start_xmit,
.ndo_do_ioctl = dm9000_ioctl,
.ndo_validate_addr = eth_validate_addr,
.ndo_set_mac_address = eth_mac_addr,
};
相似于字符设备驱动中的file_operations结构,net_device_ops结构记录了网卡所支持的操做。
static const struct net_device_ops dm9000_netdev_ops =
{
.ndo_open = dm9000_open,
.ndo_open = dm9000_open,
.ndo_stop = dm9000_stop,
.ndo_start_xmit = dm9000_start_xmit,
.ndo_do_ioctl = dm9000_ioctl,
.ndo_validate_addr = eth_validate_addr,
.ndo_set_mac_address = eth_mac_addr,
};
Linux内核中的每一个网络数据包都由一个套接字缓冲区结构struct sk_buff 描述,即一个sk_buff结构就是一个网络包,指向sk_buff的指针一般被称作skb。