CPU如何从网络分发数据?

时间:2019-04-11 19:40:41

标签: tcp operating-system nic

我正在学习网络通信,并且已经熟悉TCP / IP网络层(物理层,数据链路层和应用程序层)以及数据如何通过此节点移动。但是,当网络接口卡(NIC)接收到数据时,我对机器内部会发生什么有一些疑问。

问题:

  1. CPU如何知道来自其他计算机的数据已到达?
  2. CPU如何通知OS来自其他计算机的数据已到达?
  3. 操作系统如何知道数据用于哪个应用程序?

请给我一些有关此主题的深入说明,或提供一些有用的材料以使之清楚。

1 个答案:

答案 0 :(得分:3)

从Linux的角度给您一个总体的看法(对于其他OS应该与此类似):

数据包到达NIC。这些数据包通过DMA复制到RAM中的循环队列中。数据包的到达将产生一个中断,以使系统知道它们是RAM中的数据包。对应于该中断,将通过网络驱动程序向操作系统注册一个中断处理程序例程。 (为了简单起见,没有谈论softirq。)每个CPU都有一个轮询功能,其作用是从这些队列中收集数据包并将它们传递到较高的n / w层。因此,回答您的查询:

CPU如何知道其他计算机的数据已到达? 当中断发生且轮询循环未在CPU上运行时,操作系统(通过网络驱动程序) 将要求CPU启动轮询循环以收集数据包。

CPU如何通知OS来自其他计算机的数据已到达? CPU不需要通知OS。由于中断处理程序是网络驱动程序的一部分,因此操作系统将知道中断发生的时间。实际上,操作系统会告诉CPU开始收集数据包。

操作系统如何知道数据用于哪个应用程序? 通过具有端口号的套接字进行通信。到达的数据包将具有一个端口号,该端口号将引导操作系统将数据包带到所需的应用程序。