12.4.1 套接字缓冲区的特点

套接字缓冲区和其他部分的缓冲区相比,它有自己的特点。在网络传输的源主机上,它创建于套接字层(其名字的来历),沿网络层自上而下传递,它先在协议层流动,最后在物理层消失,同时把它所带的数据传递给目标主机的物理层的套接字缓冲区,该缓冲区自下而上传递到目标主机的套接字层,并把数据传递给用户进程,目标主机的套接字缓冲区也同时消失。请参看图12.11示例:

 

 

 

 

 

 

 

 

 

12.11套接字缓冲区流程图

当套接字缓冲区在协议层流动过程中,每个协议都需要对数据区的内容进行修改,也就是每个协议都需要在发送数据时向缓冲区添加自己的协议头和协议尾,而在接收数据时去掉这些协议头和协议尾,这样就存在一个问题,当缓冲区在不同的协议之间传递时,每层协议都要寻找自己特定的协议头和协议尾,从而导致数据缓冲区的传递非常困难。我们设置sk_buff数据结构的主要目的就是为网络部分提供一种统一有效的缓冲区操作方法,从而可让协议层以标准的函数或方法对缓冲区数据进行处理,这是Linux系统网络高效运行的关键。