来自“写入”系统调用的I / O寄存器编程的tcp数据的数据路径(行程)

时间:2010-04-22 01:55:56

标签: networking linux-kernel tcp latency

是否对Linux中的tcp数据路径有一个很好的概述(2.6,如果路径实际不同,则不是2.4)?在tcp / ip堆栈处理的不同阶段的数据包在哪里?

如何将数据包打包到tcp段,然后打包ip包。它是如何传输到网卡的? (一系列I / O寄存器写入和DMA?)它是在“写入”系统调用处理程序(带有一些深度调用堆栈)中传输到网卡还是在其他时刻传输?

2 个答案:

答案 0 :(得分:4)

http://www.linuxfoundation.org/collaborate/workgroups/networking/kernel_flow

我认为这就是你想要的。它显示了从sendmsg()到dev_hard_start_xmit()的整个过程,这是网络堆栈将数据包传递给NIC驱动程序的地方。

答案 1 :(得分:3)

试试这个:The Linux TCP/IP Stack: Networking for Embedded Systems

  

Linux TCP / IP协议栈:网络连接   嵌入式系统/ Thomas Herbert   (作者)。Linux TCP / IP协议栈:   嵌入式系统的网络化   提供深入的指南   实现和使用Linux   嵌入式系统中的TCP / IP堆栈   项目。它以一般将军开始   TCP / IP网络概述   适用的背景资料   网络标准。从那里,它   详细介绍了TCP / IP的实现   Linux 2.6通过以下数据包   数据流经堆栈   从发送系统,出线,   并通过输入端返回   堆叠在接收机器中。这个   独特的方法给程序员一个   “内部”看整个过程。   在整篇文章中,主题是   对工程师特别感兴趣   实施嵌入式系统   讨论过,比如套接字,网络   接口,应用层   协议,实用   注意事项。这太好了   嵌入式系统的资源   程序员和工程师,以及   网络专业人士感兴趣   了解有关实施的更多信息   2.6内核中的Linux TCP / IP。