是否对 Linux 中的 tcp 数据路径有一个很好的概述(2.6,如果路径实际上不同,则不是 2.4)?tcp/ip 堆栈处理不同阶段的数据包在哪里?
数据包如何打包到 tcp 段,然后是 ip 数据包。它是如何传输到网卡的?(使用一系列 I/O 寄存器写入和 DMA?)它是在“写入”系统调用处理程序(带有一些深度调用堆栈)中传输到网卡还是在其他时刻传输?
是否对 Linux 中的 tcp 数据路径有一个很好的概述(2.6,如果路径实际上不同,则不是 2.4)?tcp/ip 堆栈处理不同阶段的数据包在哪里?
数据包如何打包到 tcp 段,然后是 ip 数据包。它是如何传输到网卡的?(使用一系列 I/O 寄存器写入和 DMA?)它是在“写入”系统调用处理程序(带有一些深度调用堆栈)中传输到网卡还是在其他时刻传输?
http://www.linuxfoundation.org/collaborate/workgroups/networking/kernel_flow
我想这就是你想要的。它显示了从 sendmsg() 到 dev_hard_start_xmit() 的整个过程,这是网络堆栈将数据包传递给 NIC 驱动程序的地方。
试试这个: Linux TCP/IP 堆栈:嵌入式系统的网络
Linux TCP/IP 堆栈:嵌入式系统网络/Thomas Herbert(作者)。Linux TCP/IP 堆栈:嵌入式系统网络提供了在嵌入式系统项目中实施和使用 Linux TCP/IP 堆栈的深入指南. 它首先概述了 TCP/IP 网络,并提供了有关适用网络标准的背景信息。从那里开始,它详细介绍了 Linux 2.6 中的 TCP/IP 实现,方法是跟踪一个数据包,因为它从发送系统流过堆栈,从线路中流出,并通过接收机器中堆栈的输入侧返回。这种独特的方法让程序员能够“深入”了解整个过程。在整本书中,讨论了实现嵌入式系统的工程师特别感兴趣的主题,例如套接字、网络接口、应用层协议和实际考虑。对于嵌入式系统程序员和工程师,以及有兴趣了解更多关于在 2.6 内核中实现 Linux TCP/IP 的网络专业人士来说,这是一个很好的资源。