Linux网络体系结构由5个部分组成。
系统调用接口:Linux网络子系统的顶部是系统调用接口层,该层为应用程序提供访问内核网络子系统的方法,主要指socket系统调用。
协议无关接口:实现一组基于socket的通用函数来访问各种不同的协议。Linux中的socket使用sock结构来描述(在include/net/sock.h中定义),该结构包含特定socket所需的所有状态信息,还包括socket所使用的特定协议和在socket上可以执行的一些操作。
网络协议:网络协议层用于实现各种具体的网络协议,如TCP、UDP等。
设备无关接口:设备无关接口将协议与各种网络设备驱动连接在一起。这一层提供一组通用函数供底层网络设备驱动程序使用,使它们可以操作高层协议栈。
设备驱动:网络体系结构的最底部是负责管理物理网络设备的设备驱动程序层。
与字符设备及块设备不同,网络接口设备在Linux的/dev目录下不存在与之对应的设备文件。因此无法像字符设备或块设备那样通过访问设备文件操作。在Linux中,通常通过一些系统提供的工具来访问和设置网络设备,常用的工具有ifconfig、mii-tool(用来查看、管理介质的网络接口状态)、ethtool(用来显示和更改网卡设置的工具),这些工具都需要在内核驱动层面提供支持,如ethtool需要在驱动程序中实现一些具体的操作方法。当然,应用程序通过套接字接口访问网络。