0

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

0

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.

https://ops.tips/blog/how-linux-tcp-introspection/

http://veithen.io/2014/01/01/how-tcp-backlog-works-in-linux.html

Hope it helps

You must log in to answer this question.

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