![如何使用 TTCP 或 IPERF 执行网络环回测试?](https://linux22.com/image/1384450/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20TTCP%20%E6%88%96%20IPERF%20%E6%89%A7%E8%A1%8C%E7%BD%91%E7%BB%9C%E7%8E%AF%E5%9B%9E%E6%B5%8B%E8%AF%95%EF%BC%9F.png)
这台 PC 有两个千兆以太网端口。它们充当两个独立的网络适配器。我正尝试在两者之间进行简单的环回测试。我尝试过 TTCP 和 IPERF。它们让我很为难,因为我使用的是同一台物理 PC。
使用 pcattcp...
在接收端:
C:\PCATTCP-0114>pcattcp -r
PCAUSA Test TCP Utility V2.01.01.14 (IPv4/IPv6)
IP Version : IPv4
Started TCP Receive Test 0...
TCP Receive Test
Local Host : GIGA
**************
Listening...: On TCPv4 0.0.0.0:5001
Accept : TCPv4 0.0.0.0:5001 <- 10.1.1.1:33904
Buffer Size : 8192; Alignment: 16384/0
Receive Mode: Sinking (discarding) Data
Statistics : TCPv4 0.0.0.0:5001 <- 10.1.1.1:33904
16777216 bytes in 0.076 real seconds = 215578.95 KB/sec +++
numCalls: 2052; msec/call: 0.038; calls/sec: 27000.000
C:\PCATTCP-0114>
在发射机端:
C:\PCATTCP-0114>PCATTCP.exe -t 10.1.1.1
PCAUSA Test TCP Utility V2.01.01.14 (IPv4/IPv6)
IP Version : IPv4
Started TCP Transmit Test 0...
TCP Transmit Test
Transmit : TCPv4 0.0.0.0 -> 10.1.1.1:5001
Buffer Size : 8192; Alignment: 16384/0
TCP_NODELAY : DISABLED (0)
Connect : Connected to 10.1.1.1:5001
Send Mode : Send Pattern; Number of Buffers: 2048
Statistics : TCPv4 0.0.0.0 -> 10.1.1.1:5001
16777216 bytes in 0.075 real seconds = 218453.33 KB/sec +++
numCalls: 2048; msec/call: 0.037; calls/sec: 27306.667
C:\PCATTCP-0114>
响应正常。但为什么显示 0.0.0.0?是不是只通过其中一个网络适配器?
我想要 10.1.1.1 作为服务器(接收方),10.1.1.2 作为客户端(发送方)。这些是手动分配给每个网络适配器的 IP 地址。如何在 TTCP 中指定这些地址?
IPERF 工具也有这个-B
选项。不幸的是,我只能使用此选项将服务器绑定到 10.1.1.1 地址。我无法将客户端绑定到 10.1.1.2 地址。我可能做错了。该选项可以同时-B
用于服务器端和客户端吗?客户端的语法是什么样的?
更新
从我发布的答案中可以看出,我已经弄清楚了如何使用 IPERF 来实现这一点。我研究了使用 TTCP 实现相同功能的方法,并找到了选项-a
,但当我尝试使用它时,我在客户端收到了 Winsock 错误。
在服务器端:
C:\PCATTCP-0114>pcattcp -r -a 10.1.1.1
PCAUSA Test TCP Utility V2.01.01.14 (IPv4/IPv6)
IP Version : IPv4
Started TCP Receive Test 0...
TCP Receive Test
Local Host : GIGA
**************
Listening...: On TCPv4 10.1.1.1:5001
在客户端:
C:\PCATTCP-0114>pcattcp -t 10.1.1.1 -a 10.1.1.2
PCAUSA Test TCP Utility V2.01.01.14 (IPv4/IPv6)
IP Version : IPv4
Started TCP Transmit Test 0...
TCP Transmit Test
Transmit : TCPv4 10.1.1.2 -> 10.1.1.2:5001
Buffer Size : 8192; Alignment: 16384/0
TCP_NODELAY : DISABLED (0)
*** Winsock Error: connect Failed; Error: 10061 (0x0000274D)
C:\PCATTCP-0114>
它看起来像是在尝试连接自身?
答案1
我查看了 IPERF 的帮助,我认为我现在已经明白了。
在服务器端:
C:\>iperf -s -B 10.1.1.1
------------------------------------------------------------
Server listening on TCP port 5001
Binding to local address 10.1.1.1
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[160] local 10.1.1.1 port 5001 connected with 10.1.1.2 port 35202
[ ID] Interval Transfer Bandwidth
[160] 0.0-10.0 sec 420 MBytes 352 Mbits/sec
在客户端:
C:\>iperf -c 10.1.1.1 -B 10.1.1.2
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
Binding to local address 10.1.1.2
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[132] local 10.1.1.2 port 35202 connected with 10.1.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[132] 0.0-10.0 sec 420 MBytes 352 Mbits/sec
C:\>
如果您发现此处任何错误,请告诉我。
我仍然想知道这是否可行,以及如何使用 TTCP 来实现?如果您知道答案,请发布。
答案2
IP 的工作方式是选择从源到目标的最佳路由。主机内的环回比主机外的以太网接口更好,因此即使您认为您正在测试连接两个网络适配器的以太网环路,您也会发现您的机器的两个 IP 地址之间发送的流量不会通过它,而是通过环回短路。
如果您希望流量在外部循环,则需要在设备上运行两个不同的路由实例,并且只让其中一个外部接口为它们所知。如果您的设备是路由器,则可以使用 VRF(虚拟路由设施)来分离路由实例。
由于您的机器是主机,因此最好的选择是安装虚拟机并将其中一个网络接口传递给虚拟机,而另一个网络接口由“裸机”处理。