#turn #networking #rfc5766

app turnhammer

用于压力测试TURN (RFC 5766)服务器的工具

2个不稳定版本

0.2.0 2021年8月19日
0.1.0 2019年2月6日

#19 in #turn

MIT/Apache

23KB
446 代码行

TURN_Hammer

用于压力测试TURN (RFC 5766)服务器并测量结果数据包丢失和往返时间。

在Github发行版中有预构建版本

用法

Usage: turnhammer <server> <username> <password> [-j <parallel-connections>] [-s <pkt-size>] [--pps <pps>] [-d <duration>] [--delay-after-stopping-sender <delay-after-stopping-sender>] [--delay-between-allocations <delay-between-allocations>] [--calc] [-f] [--video] [--audio] [-J] [-C]


Options:
  -j, --parallel-connections
                    number of simultaneous connections
  -s, --pkt-size    packet size
  --pps             packets per second
  -d, --duration    experiment duration, seconds
  --delay-after-stopping-sender
                    seconds to wait and receive after stopping sender
  --delay-between-allocations
                    microseconds to wait between TURN allocations
  --calc            don't actually run, only calculate bandwidth and traffic
  -f, --force       override bandwidth or traffic limitation
  --video           set pps to 90 and pktsize to 960
  --audio           set pps to 16 and pktsize to 192
  -J, --json        output as JSON instead of plain text
  -C, --no-channels do not use chanels
  --help            display usage information

输出示例

The test would do approx 11.878 Mbit/s and consume 158.379 megabytes of traffic
My external address: 178.122.56.8:40475
Allocated 200 TURN clients
Received the first datagram
Received 365652 packets from 384000 window of total 384000 || Loss: 04.7781%   bad loss: 00.0000%
RTT4 brackets: 0-49ms: 00.0000%   180-399ms: 50.7474%  1000-1999ms: 00.0000%
             50-179ms: 44.4745%   500-999ms: 00.0000%      2000+ms: 00.0000%
 <<<  Overall score:  8.2 / 10.0  >>>
Stopping TURN clients

JSON输出示例

$ turnhammer  -J --video -j 3 104.131.203.210:3478  u153   p1994421   2> /dev/null
{"status":"ok"
,"received_packets":1350 ,"min_max_window":1350 ,"sent_packets":1350
,"loss":0 ,"bad_loss":0
,"rtt4":{"0_49":0 ,"50_179":0 ,"180_399":100 ,"400_999":0 ,"1000_1999":0 ,"2000+":0}
,"score":9.5
}

算法

  1. 创建一个绑定到 0.0.0.0:0 的UDP套接字。
  2. 获取套接字的外部地址
  3. 创建K个其他绑定到 0.0.0.0:0 的UDP套接字,并从指定的TURN服务器获取K个分配
  4. 将地址从"2."添加到每个TURN分配的权限
  5. 在每个TURN客户端实例中,将每个数据消息发送回发送者。这有效地在TURN端创建了K个UDP回声服务器实例。
  6. 从第一个UDP套接字,以指定的速率向所有这些"回声服务器"发送指定数量的数据包。
  7. 分析来自这些"回声服务器"的回复,并测量数据包丢失和往返时间。

diagram

旧版本

有一个基于旧Tokio 0.1版本的turnhammer,标记为 v0.1.0,可以使用较旧的Rust构建,可能支持更多旧系统。它应该与rustc 1.34.2兼容。

依赖项

~5–18MB
~190K SLoC