A golang network utility using TCP & UDP messages to detect network stability.
It's difficult to detect network problems in real life.
echoping
uses TCP and UDP protocols instead of ICMP used by traditional ping
, and send messages more frequently.
echoping
works more like a real network application, and reports network problems as the real one.
- Start a
echoping
server by./echoping -listen IP:PORT
- Start
echoping
clients to use theechoping
server:./echoping -connect SERVER_IP:SERVER_PORT
- Every
echoping
client sends TCP and/or UDP requests to the server - The server sends every request as a response back to the client
- The client collects the responses and calculates the packet loss ratio (UDP only) and round-trip time
- If any network error occurs, the client will retry to connect and send requests forever.
- Every connection (ping session) has a unique session id which is generated by the connection time, it helps to distinguish different client connections, eg: if a network error occurs and a client re-connects, then there will be a new session id in logs.
Usage:
-connect string
connect to 'tcp://ip:port/,udp://ip:port/' (can be repeated, use comma as delimiter), or use 'ip:port' for both TCP and UDP
-listen string
listen both TCP and UDP on ip:port
-listen-tcp string
listen TCP on ip:port
-listen-udp string
listen UDP on ip:port
-ping-interval duration
the interval between ping requests sent by client (default 20ms)
Server output:
2020/12/26 01:24:54 server stat udp:127.0.0.1:52032 (20201226-012449.458182): pps=10.0, tmperr=0
2020/12/26 01:24:54 server stat tcp:127.0.0.1:56524 (20201226-012449.458231): pps=10.0, tmperr=0
Client output:
2020/12/26 01:24:54 client stat udp:127.0.0.1:12345 (20201226-012449.458182): pps=11.0, loss=0.0%, round-trip time (ms): avg=0.4, min=0.2, max=0.6, stddev=0.1
2020/12/26 01:24:54 client stat tcp:127.0.0.1:12345 (20201226-012449.458231): pps=11.0, loss=0.0%, round-trip time (ms): avg=0.3, min=0.2, max=0.4, stddev=0.1
- "20201226-012449.458182" is the ping session id, which is generated by the time of the client starts the ping session.
pps
means "ping per second"- TCP's
loss
is always 0% (of course)
./echoping -listen :12345 -connect 127.0.0.1:12345
Simulate delayed and dropped packets on Linux: https://stackoverflow.com/questions/614795/simulate-delayed-and-dropped-packets-on-linux