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

标签 c# sockets networking

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

编辑。请考虑这不是 Windows“环回”,而是在 NIC 上进行的物理环回,其中 2 个端口通过电缆相互连接,使其成为物理环回。

最佳答案

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

编辑0:

您混合了两种不同的东西 - TCP/IP 中的 loopback 是一个虚拟网络接口(interface),在子网 127/8 中有一个特殊地址,通常是 127.0.0.1,它默认情况下为您创建,以太网 crossover 电缆在同一台机器上的两张卡之间循环。

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

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

关于c# - 通过物理环回在 2 个 TCP 应用程序之间发送数据。它会通过网卡吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11083536/

相关文章:

java - TCP数据包进入服务器,但没有进入监听程序

Linux 上的 Java : Listening to broadcast messages on a bound local address

c# - 为什么我的路由测试失败,但运行应用程序时路由有效?

c# - 公开包含方法

php - 在 PHP 5.x 中使用 fsockopen 循环 Fget

mysql - 如何防止安装 WordPress 多站点网络时建立数据库连接时出错?

python - 从python中的二进制数据中获取unicode字符串

c# - 在后台每 5 分钟执行一次函数

c# - 如何计算当前支付期何时结束?

c - 将可变数量的参数传递给 C 函数