Meester Moo Asked: 2022-03-11 16:21:23 +0800 CST2022-03-11 16:21:23 +0800 CST 2022-03-11 16:21:23 +0800 CST 计算机如何知道如何使用 TCP 772 我是从 Windows 的角度问的,但任何角度都很棒。 NIC 是计算机与 TCP 接口所需的全部吗?他们是否还需要某种与 TCP 相关的软件,或者是否包含在 NIC 设备驱动程序中? networking internet-connection 1 个回答 Voted Best Answer Spiff 2022-03-11T17:14:52+08:002022-03-11T17:14:52+08:00 对 TCP/IP 的支持内置于内核中。所有实现不同网络协议的软件都被称为“网络堆栈”。 因此,当您的应用程序调用“[BSD] Sockets APIs”进行网络连接时,它调用的代码主要在内核中运行。 一些 NIC 可以直接在 NIC 硬件中处理 TCP/IP 处理的某些部分,从而卸载一些工作,因此不必由 CPU 上的内核处理。这些被称为“TCP 卸载引擎”,或者有时特定类型的卸载有自己的名称,如“硬件校验和”、“大接收卸载”(LRO)、“传输分段卸载”(TSO)等。内核的网络堆栈必须支持让这些东西由 NIC 处理,并且 NIC 驱动程序必须支持告诉内核 NIC 可以处理什么,并告诉 NIC 如果内核请求就去做。但是驱动程序本身并没有做太多真正的工作,因为驱动程序运行在内核中,所以它不会 在某些情况下,将网络堆栈的某些功能移出内核并进入“用户空间”(即由操作系统提供的在应用程序上下文中运行的库实现,而不是在内核上下文中)会更有效。这可以通过不必经常在应用程序内存和内核内存之间复制数据包数据来提高效率。因此,现在可以在内核之外的用户空间中找到网络堆栈的某些部分。但它仍然由操作系统的内置网络库提供。
对 TCP/IP 的支持内置于内核中。所有实现不同网络协议的软件都被称为“网络堆栈”。
因此,当您的应用程序调用“[BSD] Sockets APIs”进行网络连接时,它调用的代码主要在内核中运行。
一些 NIC 可以直接在 NIC 硬件中处理 TCP/IP 处理的某些部分,从而卸载一些工作,因此不必由 CPU 上的内核处理。这些被称为“TCP 卸载引擎”,或者有时特定类型的卸载有自己的名称,如“硬件校验和”、“大接收卸载”(LRO)、“传输分段卸载”(TSO)等。内核的网络堆栈必须支持让这些东西由 NIC 处理,并且 NIC 驱动程序必须支持告诉内核 NIC 可以处理什么,并告诉 NIC 如果内核请求就去做。但是驱动程序本身并没有做太多真正的工作,因为驱动程序运行在内核中,所以它不会
在某些情况下,将网络堆栈的某些功能移出内核并进入“用户空间”(即由操作系统提供的在应用程序上下文中运行的库实现,而不是在内核上下文中)会更有效。这可以通过不必经常在应用程序内存和内核内存之间复制数据包数据来提高效率。因此,现在可以在内核之外的用户空间中找到网络堆栈的某些部分。但它仍然由操作系统的内置网络库提供。