如何在同一台计算机的两个NIC之间发送数据包?

时间:2019-04-24 21:54:24

标签: network-programming

我正在尝试测试我正在制作的客户端/服务器应用程序中可以发送和接收的吞吐量。我想通过将UDP数据包从计算机中的物理NIC发送到同一计算机中的另一物理NIC进行测试。

我修改了10GbE光纤卡的驱动程序,以至于即使在光纤连接直接从发送端口到接收端口运行时,也可以形成链接。我以为这可行,但是我意识到我可以拔掉光纤,但我仍然能够发送和接收数据。显然,即使我似乎受限于物理接口的MTU,也并没有像我所怀疑的那样将其用于硬件。

由于我的主板有两个1GbE RJ45端口,因此我将它们连接起来,并在尝试发送流量之前手动分配了它们的IP(192.168.2.2、192.168.2.4)和子网(255.255.255.0)。尽管我可以看到主板上的LED指示灯没有显示流量,并且我能够以325MB / s的速度运行,这比任何一个端口所允许的速度都快,但是这可以工作。显然,它也不通过Cat6电缆发送数据。

//pseudo tx code

val txInterface = getTxInterface()
val rxInterface = getRxInterface()
val txAddress = getIPv4Address(txInterface)
val rxAddress = getIPv4Address(rxInterface)
val txSocketAddress = getSocketAddress(txAddress, 4444)
val rxSocketAddress = getSocketAddress(rxAddress, 4444)
val txChannel = DatagramChannel.open().bind(txSocketAddress)

val buffer = getRandomFilledBuffer(size = txInterface.mtu)
txChannel.send(buffer, rxSocketAddress)
//pseudo rx code

val rxInterface = getRxInterface()
val rxAddress = getIPv4Address(rxInterface)
val rxSocketAddress = getSocketAddress(rxAddress, 4444)
val rxChannel = DatagramChannel.open().bind(rxSocketAddress)

val buffer = getRandomFilledBuffer(size = rxInterface.mtu)
rxChannel.receive(buffer, rxSocketAddress)

有没有办法让流量实际离开并返回我的盒子,或者内核太聪明了,我将不得不在单独的机器上进行测试?

0 个答案:

没有答案