udhos / Goben
Licence: mit
goben is a golang tool to measure TCP/UDP transport layer throughput between hosts.
Stars: ✭ 391
Projects that are alternatives of or similar to Goben
Hp Socket
High Performance TCP/UDP/HTTP Communication Component
Stars: ✭ 4,420 (+1030.43%)
Mutual labels: networking, tcp, udp
Libzt
ZeroTier Sockets - Put a network stack in your app
Stars: ✭ 486 (+24.3%)
Mutual labels: networking, tcp, udp
Networker
A simple to use TCP and UDP networking library for .NET. Compatible with Unity.
Stars: ✭ 408 (+4.35%)
Mutual labels: networking, tcp, udp
Objecttransport
Send and Receive objects over TCP or UDP
Stars: ✭ 39 (-90.03%)
Mutual labels: networking, tcp, udp
Computer Networking
Free resources for a self-taught education in Computer Networking
Stars: ✭ 201 (-48.59%)
Mutual labels: networking, tcp, udp
Benchmarknet
Benchmark for testing the reliable UDP networking solutions
Stars: ✭ 206 (-47.31%)
Mutual labels: networking, udp, benchmarking
Cnp3
Computer Networking : Principles, Protocols and Practice (first and second edition, third edition is being written on https://github.com/cnp3/ebook)
Stars: ✭ 471 (+20.46%)
Mutual labels: networking, tcp, udp
Hazel Networking
Hazel Networking is a low level networking library for C# providing connection orientated, message based communication via TCP, UDP and RUDP.
Stars: ✭ 194 (-50.38%)
Mutual labels: networking, tcp, udp
Netlink
Socket and Networking Library using msgpack.org[C++11]
Stars: ✭ 197 (-49.62%)
Mutual labels: networking, tcp, udp
Mirror
#1 Open Source Unity Networking Library
Stars: ✭ 2,905 (+642.97%)
Mutual labels: networking, tcp, udp
ctsTraffic
ctsTraffic is a highly scalable client/server networking tool giving detailed performance and reliability analytics
Stars: ✭ 125 (-68.03%)
Mutual labels: tcp, udp, performance-testing
http-connection-lifecycle
Complete and detailed explanation of HTTP connection lifecycle
Stars: ✭ 43 (-89%)
Mutual labels: tcp, udp
ethereum-dissectors
🔍Wireshark dissectors for Ethereum devp2p protocols
Stars: ✭ 82 (-79.03%)
Mutual labels: tcp, udp
Wireguard Docs
📖 Unofficial WireGuard Documentation: Setup, Usage, Configuration, and full example setups for VPNs supporting both servers & roaming clients.
Stars: ✭ 3,201 (+718.67%)
Mutual labels: networking, udp
Mirage Tcpip
TCP/IP networking stack in pure OCaml, using the Mirage platform libraries. Includes IPv4/6, ICMP, and UDP/TCP support.
Stars: ✭ 277 (-29.16%)
Mutual labels: tcp, udp
Valvesockets Csharp
Managed C# abstraction of GameNetworkingSockets library by Valve Software
Stars: ✭ 273 (-30.18%)
Mutual labels: networking, udp
Locust
Scalable user load testing tool written in Python
Stars: ✭ 17,763 (+4442.97%)
Mutual labels: benchmarking, performance-testing
Web Tooling Benchmark
JavaScript benchmark for common web developer workloads
Stars: ✭ 290 (-25.83%)
Mutual labels: benchmarking, performance-testing
Drop watch
Monitor reasons why and where linux drops UDP packets
Stars: ✭ 289 (-26.09%)
Mutual labels: networking, udp
goben
goben is a golang tool to measure TCP/UDP transport layer throughput between hosts.
Created by gh-md-toc
Features
- Support for TCP, UDP, TLS.
- Can limit maximum bandwidth.
- Written in Go. Single executable file. No runtime dependency.
- Simple usage: start the server then launch the client pointing to server's address.
- Spawns multiple concurrent lightweight goroutines to handle multiple parallel traffic streams.
- Can save test results as PNG chart.
- Can export test results as YAML or CSV.
History
- Years ago out of frustration with iperf2 limitations, I wrote the nepim tool. One can find some known iperf problems here: iperf caveats. Nepim was more customizable, easier to use, reported simpler to understand results, was lighter on CPU.
- Later I found another amazing tool called nuttcp. One can read about nepim and nuttcp here: nepim and nuttcp.
- goben is intended to fix shortcomings of nepim: (1) Take advantage of multiple CPUs while not wasting processing power. Nepim was single-threaded. (2) Be easily portable to multiple platforms. Nepim was heavily tied to UNIX-like world. (3) Use a simpler synchronous code flow. Nepim used hard-to-follow asynchronous architecture.
Requirements
- You need a system with the Go language in order to build the application. There is no special requirement for running it.
- You can also download a binary release from https://github.com/udhos/goben/releases
Install
With Go Modules (since Go 1.11)
git clone https://github.com/udhos/goben ;# clone outside GOPATH
cd goben
go test ./goben
CGO_ENABLED=0 go install ./goben
Without Go Modules (before Go 1.11)
go get github.com/wcharczuk/go-chart
go get gopkg.in/yaml.v2
go get github.com/udhos/goben
go install github.com/udhos/goben/goben
Usage
Make sure ~/go/bin is in your shell PATH.
Start server:
server$ goben
Start client:
client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address
Command-line Options
Find several supported command-line switches by running 'goben -h':
$ goben -h
2021/02/28 00:43:28 goben version 0.6 runtime go1.16 GOMAXPROCS=12 OS=linux arch=amd64
Usage of goben:
-ascii
plot ascii chart (default true)
-cert string
TLS cert file (default "cert.pem")
-chart string
output filename for rendering chart on client
'%d' is parallel connection index to host
'%s' is hostname:port
example: -chart chart-%d-%s.png
-connections int
number of parallel connections (default 1)
-csv string
output filename for CSV exporting test results on client
'%d' is parallel connection index to host
'%s' is hostname:port
example: -csv export-%d-%s.csv
-defaultPort string
default port (default ":8080")
-export string
output filename for YAML exporting test results on client
'%d' is parallel connection index to host
'%s' is hostname:port
example: -export export-%d-%s.yaml
-hosts value
comma-separated list of hosts
you may append an optional port to every host: host[:port]
-key string
TLS key file (default "key.pem")
-listeners value
comma-separated list of listen addresses
you may prepend an optional host to every port: [host]:port
-localAddr string
bind specific local address:port
example: -localAddr 127.0.0.1:2000
-maxSpeed float
bandwidth limit in mbps (0 means unlimited)
-passiveClient
suppress client writes
-passiveServer
suppress server writes
-reportInterval string
periodic report interval
unspecified time unit defaults to second (default "2s")
-tcpReadSize int
TCP read buffer size in bytes (default 1000000)
-tcpWriteSize int
TCP write buffer size in bytes (default 1000000)
-tls
set to false to disable TLS (default true)
-totalDuration string
test total duration
unspecified time unit defaults to second (default "10s")
-udp
run client in UDP mode
-udpReadSize int
UDP read buffer size in bytes (default 64000)
-udpWriteSize int
UDP write buffer size in bytes (default 64000)
Example
Server side:
$ goben
2018/06/28 15:04:26 goben version 0.3 runtime go1.11beta1 GOMAXPROCS=1
2018/06/28 15:04:26 connections=1 defaultPort=:8080 listeners=[":8080"] hosts=[]
2018/06/28 15:04:26 reportInterval=2s totalDuration=10s
2018/06/28 15:04:26 server mode (use -hosts to switch to client mode)
2018/06/28 15:04:26 serve: spawning TCP listener: :8080
2018/06/28 15:04:26 serve: spawning UDP listener: :8080
Client side:
$ goben -hosts localhost
2018/06/28 15:04:28 goben version 0.3 runtime go1.11beta1 GOMAXPROCS=1
2018/06/28 15:04:28 connections=1 defaultPort=:8080 listeners=[":8080"] hosts=["localhost"]
2018/06/28 15:04:28 reportInterval=2s totalDuration=10s
2018/06/28 15:04:28 client mode, tcp protocol
2018/06/28 15:04:28 open: opening tcp 0/1: localhost:8080
2018/06/28 15:04:28 handleConnectionClient: starting 0/1 [::1]:8080
2018/06/28 15:04:28 handleConnectionClient: options sent: {2s 10s 50000 50000 false 0}
2018/06/28 15:04:28 clientReader: starting: 0/1 [::1]:8080
2018/06/28 15:04:28 clientWriter: starting: 0/1 [::1]:8080
2018/06/28 15:04:30 0/1 report clientReader rate: 13917 Mbps 34793 rcv/s
2018/06/28 15:04:30 0/1 report clientWriter rate: 13468 Mbps 33670 snd/s
2018/06/28 15:04:32 0/1 report clientReader rate: 14044 Mbps 35111 rcv/s
2018/06/28 15:04:32 0/1 report clientWriter rate: 13591 Mbps 33978 snd/s
2018/06/28 15:04:34 0/1 report clientReader rate: 12934 Mbps 32337 rcv/s
2018/06/28 15:04:34 0/1 report clientWriter rate: 12517 Mbps 31294 snd/s
2018/06/28 15:04:36 0/1 report clientReader rate: 13307 Mbps 33269 rcv/s
2018/06/28 15:04:36 0/1 report clientWriter rate: 12878 Mbps 32196 snd/s
2018/06/28 15:04:38 0/1 report clientWriter rate: 13330 Mbps 33325 snd/s
2018/06/28 15:04:38 0/1 report clientReader rate: 13774 Mbps 34436 rcv/s
2018/06/28 15:04:38 handleConnectionClient: 10s timer
2018/06/28 15:04:38 workLoop: 0/1 clientWriter: write tcp [::1]:42130->[::1]:8080: use of closed network connection
2018/06/28 15:04:38 0/1 average clientWriter rate: 13157 Mbps 32892 snd/s
2018/06/28 15:04:38 clientWriter: exiting: 0/1 [::1]:8080
2018/06/28 15:04:38 workLoop: 0/1 clientReader: read tcp [::1]:42130->[::1]:8080: use of closed network connection
2018/06/28 15:04:38 0/1 average clientReader rate: 13595 Mbps 33989 rcv/s
2018/06/28 15:04:38 clientReader: exiting: 0/1 [::1]:8080
2018/06/28 15:04:38 input:
14038 ┤ ╭────╮
13939 ┤──────────╯ ╰╮
13840 ┼ ╰─╮
13741 ┤ ╰╮ ╭──
13641 ┤ ╰╮ ╭───╯
13542 ┤ ╰─╮ ╭──╯
13443 ┤ ╰╮ ╭───╯
13344 ┤ ╰─╮ ╭───╯
13245 ┤ ╰╮ ╭───╯
13146 ┤ ╰─╮ ╭───╯
13047 ┤ ╰────╯
12948 ┤
2018/06/28 15:04:38 output:
13585 ┤ ╭────╮
13489 ┤──────────╯ ╰╮
13393 ┼ ╰─╮
13297 ┤ ╰╮ ╭──
13201 ┤ ╰╮ ╭───╯
13105 ┤ ╰─╮ ╭──╯
13009 ┤ ╰╮ ╭───╯
12914 ┤ ╰─╮ ╭───╯
12818 ┤ ╰╮ ╭───╯
12722 ┤ ╰─╮ ╭───╯
12626 ┤ ╰────╯
12530 ┤
2018/06/28 15:04:38 handleConnectionClient: closing: 0/1 [::1]:8080
TLS
For TLS, a server-side certificate is required:
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key.pem -out cert.pem
If the certificate is available, goben server listens on TLS socket. Otherwise, it falls back to plain TCP.
--x--
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].