计算机如何知道如何使用 TCP

计算机如何知道如何使用 TCP

我是从 Windows 的角度提问的,但任何角度都可以。

计算机只需要 NIC 即可与 TCP 交互吗?它们是否还需要某种与 TCP 相关的软件,或者这些软件是否包含在 NIC 设备驱动程序中?

答案1

内核内置了对 TCP/IP 的支持。所有实现不同网络协议(这些协议相互叠加)的软件都称为“网络堆栈”。

因此,当您的应用程序调用“[BSD] Sockets API”进行网络连接时,它会调用主要在内核中运行的代码。

一些 NIC 可以直接在 NIC 硬件中处理 TCP/IP 处理的某些部分,卸载部分工作,这样就不必由 CPU 上的内核来处理。这些被称为“TCP 卸载引擎”,或者有时特定类型的卸载有自己的名称,如“硬件校验和”、“大型接收卸载”(LRO)、“传输分段卸载”(TSO) 等。内核的网络堆栈必须支持让 NIC 处理这些内容,NIC 驱动程序必须支持告诉内核 NIC 可以处理什么,并告诉 NIC 在内核请求时执行此操作。但驱动程序本身并不做太多实际工作,因为驱动程序在内核中运行,因此如果内核中的 NIC 驱动程序而不是内核中的正常网络堆栈在执行此操作,它实际上不会从 CPU 卸载任何内容。

在某些情况下,将网络堆栈的某些功能移出内核并移入“用户空间”(即由在应用程序上下文中而不是在内核上下文中运行的操作系统提供的库实现)可能会更有效。这样可以提高效率,因为不必经常在应用程序内存和内核内存之间复制数据包。因此,现在可以在内核之外的用户空间中找到网络堆栈的某些部分。但它仍然由操作系统的内置网络库提供。

相关内容