2012-10-29 28 views
1

我正在linux内核中写一个新的网络设备,我必须使用套接字缓冲区。插座缓冲区中的顶端房间

当我通过套接字缓存的结构了,我可以看到四个领域被称为headdatatailend。套接字缓冲区中头部和尾部空间的用途是什么?

+0

当然,他们正在形成一个链表?当然,你仔细阅读代码比在这里询问更有效率? – EJP

回答

5

套接字缓冲区(又名skbuffs)沿整个内核的网络层传递。意思是,它们将从传输层传递到网络层等。这样做的主要原因是性能,避免内核在每次经过时都需要复制和重新创建缓冲区。

这意味着当skbuff数据通过不同层时,skbuff数据将填充相应的协议头数据。例如,在传输层可能会得到TCP头,网络层IP头等。

作为优化,linux内核为这些头部预先分配空间,这实际上是skbuff指向的缓冲区通过head。现在,数据开始的地方,即当前构造的数据包的第一个字节,由data指出。同样,tail指向当前构造的数据包的末尾,并且指向预先分配的缓冲区的末尾的end

此图片可以帮助你用我的话说:http://www.kernelchina.org/files/image_thumb_3_4.png

现在,它远远更少的计算密集型向移动这些指针和(重)构建内核试图发送/接收数据包,而不是实际重新分配内存和复制字节。

+0

+1很好的答案 – paddy

+0

图像链接坏了! – Akhil

+0

图片链接的作品。 – tuomasjjrasanen