C# 通过物理环回在2个TCP应用程序之间发送数据。它会通过NIC吗?

C# 通过物理环回在2个TCP应用程序之间发送数据。它会通过NIC吗?,c#,sockets,networking,C#,Sockets,Networking,如果我通过TCP环回运行两个使用套接字发送/接收数据的应用程序,数据的实际路径是什么?这些数据会通过Windows网络驱动程序和/或NIC硬件传输吗 编辑。请考虑这不是Windows“回环”,而是在NIC上的物理回环,2个端口与电缆相连,使其物理环回。 回环是一个虚拟接口,没有对应的硬件。数据复制发生在内核内部,甚至在驱动程序级别之上 编辑0: 您正在混合两种不同的内容-在TCP/IP中,是一个虚拟网络接口,在子网127/8(通常为127.0.0.1)中有一个特殊地址,默认情况下为您创建,并且以

如果我通过TCP环回运行两个使用套接字发送/接收数据的应用程序,数据的实际路径是什么?这些数据会通过Windows网络驱动程序和/或NIC硬件传输吗

编辑。请考虑这不是Windows“回环”,而是在NIC上的物理回环,2个端口与电缆相连,使其物理环回。

回环是一个虚拟接口,没有对应的硬件。数据复制发生在内核内部,甚至在驱动程序级别之上

编辑0: 您正在混合两种不同的内容-在TCP/IP中,是一个虚拟网络接口,在子网
127/8
(通常为
127.0.0.1
)中有一个特殊地址,默认情况下为您创建,并且以太网电缆在同一台机器上的两个卡之间循环

我在最初的回答中提到了第一个案例


第二种情况下TCP/IP堆栈的行为取决于实现和传输选项。对于TCP连接和单播UDP,内核可能会意识到源地址和目标地址都是机器的本地地址,并通过内存进行数据传输。您会发现大多数现代网络堆栈都是这样运行的。对于广播或多播UDP,没有其他选项,只能通过物理卡发送数据包,因为网络上可能有其他侦听器。

这将在网络驱动程序级别。硬件可能永远看不到任何数据包。尼古拉,请你解释一下。如果我有一张有两个接口的卡,我在每个卡上设置了两个不同的IP,然后将一个接口连接到另一个接口,创建一个物理环回,然后我运行两个应用程序,其中sokects将连接到这两个不同的API。。。你认为流量会通过Windows提供的虚拟环回而不是NIC本身来吗?