I have been trying very hard to find about buffers used in TCP/IP as part of packet transfer in linux. More i read, more i get confused. Below given are questions i have. Can someone help me figure it out?

1)Is the driver queue which is implemented as a ring buffer with descriptors pointing to skbs, same as receive and send buffers of TCP? If not when does receive/send buffers of TCP comes to picture in the packet travel?

2)Is TCP connection backlog queue totally different queue from accept/receive queue? Where does backlog queue fit in the packet travel? I understand backlog queue is for pending connections.

3)Is there a separate buffer area for each socket to which data is transferred from TCP accept/send buffers?

4)For incoming connections is the correct flow? NIC -> Kernel Ring buffer(skb) -> IP stack -> TCP accept/receive buffers -> Qdisc layer -> socket buffer for connection.

1 Answer 1


In general network drivers have their own queues, in the case of linux the packets are stored and queue on sk_buff has you mention. This is the most important struct in terms of packet handling on the kernel. This buffers, the sk_buff, contains pointers to the current TCP, IPv4/IPv6, etc... headers.

The TCP backlog is handling by the struct sock, for handling the TCP states and the buffering of the packets that will be reassemble.

In general I will say that the most important structs are the sk_buf and the sock. Have a look to this links that may help you also, apart of the kernel source code.



Hope it helps

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .