首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义的iperf3端口?

未定义的iperf3端口?
EN

Server Fault用户
提问于 2018-03-15 02:56:24
回答 2查看 2.6K关注 0票数 0

我试图识别与iperf3 UDP会话相关的所有端口,并注意到TCP握手使用的是一个未定义的(?)iperf3服务器上的端口。

是否有一种方法来指定用于iperf3测试的所有端口?

Illustrating示例:

在本例中,我观察到使用了以下IP地址和端口:

  • 10.0.1.20,港口5222
  • 10.0.1.89,港口5205
  • 10.0.1.20,port 56039??

客户端:

代码语言:javascript
复制
// iperf3 (v3.1.3) Client running on Ubuntu 16.04 IP address: 10.0.1.20, port 5222
$ iperf3 -c 10.0.1.89 -u -p 5205 --cport 5222 -B 10.0.1.20

服务器:

代码语言:javascript
复制
// iperf3 (v3.1.3) Server running on Ubuntu 16.04 IP address: 10.0.1.89, port 5205
$ iperf3 -s -p 5205
-----------------------------------------------------------
Server listening on 5205
-----------------------------------------------------------
Accepted connection from 10.0.1.20, port 56039
[  5] local 10.0.1.89 port 5205 connected to 10.0.1.20 port 5222
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
...

在客户端上运行的wireshark捕获也证实了这一点。

EN

回答 2

Server Fault用户

回答已采纳

发布于 2018-03-16 19:50:13

不,不可能通过命令行参数设置这个客户端端口,也不可能使用iperf。

这至少适用于当前的3.1 iperf版本。查看源代码,可以找到负责建立初始TCP连接的函数:

代码语言:javascript
复制
/* iperf_connect -- client to server connection function */
int
iperf_connect(struct iperf_test *test)
{
[...]
    /* Create and connect the control channel */
    if (test->ctrl_sck < 0)
        // Create the control channel using an ephemeral port
        test->ctrl_sck = netdial(test->settings->domain, Ptcp, test->bind_address, 0, test->server_hostname, test->server_port, test->settings->connect_timeout);

    if (test->ctrl_sck < 0) {
        i_errno = IECONNECT;
        return -1;
    }
[...]

查看netdial()函数签名,它负责创建到服务器的连接:

代码语言:javascript
复制
netdial(int domain, int proto, char *local, int local_port, char *server, int port, int timeout)

更具体地说,我们可以看到它将网盘() local_port参数设置为0。这应该在创建TCP控制通道时建立到客户端的随机端口。

正如托马斯所提到的,--cport选项只控制数据流端口,我们还可以检查源代码中负责建立UDP数据流的函数:

代码语言:javascript
复制
 if ((s = netdial(test->settings->domain, Pudp, test->bind_address, test->bind_port, test->server_hostname, test->server_port, -1)) < 0) 

该函数使用test->bind_port选项作为local_port参数,从--cport选项中检索该参数。

票数 1
EN

Server Fault用户

发布于 2018-03-15 11:19:13

站3网站上有关于这种行为的描述。

...The初始连接用于交换测试参数、控制测试的开始和结束以及交换测试结果。这有时被称为“控制连接”。实际测试数据通过单独的TCP连接、UDP数据包的单独流或独立的SCTP连接发送,具体取决于客户端指定的协议.

查看man iperf3和选项--cport,这似乎只影响数据流,而不影响控制连接,控制连接是您标识为未定义端口的第三个端口。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/901719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档