我一直在非常努力地寻找TCP/IP中用作linux包传输的一部分的缓冲区。我读得越多越困惑。下面是我的问题。有人能帮我弄清楚吗?
1)驱动队列是否与TCP的接收和发送缓冲区相同,它是作为带指向skbs的描述符的环形缓冲区实现的?如果不是,TCP的接收/发送缓冲区何时出现在数据包传输中?
2) TCP连接待办事项队列与接收/接收队列是否完全不同?在分组旅行中,积压队列适合哪里?据我所知,待办事项队列用于挂起的连接。
3)对于从TCP接受/发送缓冲区传输数据的每个套接字是否有单独的缓冲区?
4)传入连接的流量是否正确?网卡->内核环缓冲区(Skb) -> IP栈-> TCP接受/接收缓冲区-> TCP层->套接字缓冲区用于连接。
发布于 2020-02-17 08:39:15
在一般情况下,网络驱动程序有自己的队列,在linux中,数据包被存储,sk_buff上的队列也提到过。这是内核上数据包处理方面最重要的结构。此缓冲区,即sk_buff,包含指向当前TCP、IPv6 4/IPv6 6等的指针。报头。
TCP待办事项是由struct sock处理的,用于处理将要重新组装的数据包的TCP状态和缓冲。
一般来说,我会说最重要的结构是sk_buf和袜子。除了内核源代码之外,请查看这些链接,这些链接也可能对您有所帮助。
https://ops.tips/blog/how-linux-tcp-introspection/
http://veithen.io/2014/01/01/how-tcp-backlog-works-in-linux.html
希望它能帮上忙
https://unix.stackexchange.com/questions/567902
复制相似问题