linux kernel 网络协议栈

时间:2020-12-07 11:08:35

推荐学习网址:http://blog.sina.com.cn/s/blog_4b9eab320102vme0.html

协议栈分层/层次结构

系统调用接口(详见Jones的另一篇文章:使用Linux系统调用的内核命令)
协议无关接口(BSD socket层)
网络协议(或者简称网络层。这是一个协议的集合,从链路层到传输层的协议都包括在内。不同的协议在/net文件夹下除core以外的子目录下,例如基于IP的协议簇都在/net/ipv4目录下,以太网协议在/net/ethernet目录下)
驱动无关接口(又称通用设备层–generic device layer/驱动接口层/设备操作层–device handling layer。属于网络协议栈最核心的部分,文件位于内核/net/core文件夹下,所以又叫网络核心层。其中包括了核心的数据结构skbuff文件中的sk_buff/dev.c文件中net_device,这些数据结构将在下篇文章中介绍)
设备驱动程序(在/driver/net文件夹内)
不像OSI或者TCP/IP协议栈,事实上并没有一个命名标准,因此在这里,这些层次的名称并不是通用的,但是其语义是清晰的,而且在大多数其他的文章里只是个别字上的差别。分层详细介绍可以参考Jones的文章。

重要数据结构sk_buff

全称socket buffers,简称skb,中文名字叫套接字缓存。它可以称得上是Linux内核网络协议栈中最重要的数据结构,没有之一。它作为网络数据包的存放地点,使得协议栈中每个层都可以对数据进行操作,从而实现了数据包自底向上的传递。