Two-Way Active Measurement Protocol

Note: I have worked on this full-time in Rust before, but I was a noob and didn’t build it properly.

Introduction

A more accurate network analysis tool for calculating round-trip delays between two devices. A better alternative to ping so to speak.

One requirement for it is that it is based on the client-server architecture, so it requires a TWAMP client/server to be present on both devices.

The RFC provides an example implementation (Appendex I) called TWAMP Light which removes the requirement of TWAMP-Control, and is a way for adopting TWAMP quickly.

Communication

TWAMP uses two protocols for it’s operation:

  • TWAMP-Control
  • TWAMP-Test

TWAMP-Control

Used for starting/stopping sessions and comms other than the actual test. Uses 862/tcp.

TWAMP-Test

Used for the actual test. Uses 862/udp.

Model

Example model is also present in the RFC.

flowchart LR
	subgraph "Controller"
	cc("Control Client")
	ss("Session-Sender")
	end
	subgraph "Responder"
	s("Server")
	sr("Session-Reflector")
	end

	cc<--TWAMP-Control-->s
	ss<-. TWAMP-Test .->sr

Communication flow

sequenceDiagram
	participant cc as Control-Client
	participant s as Server
	participant ss as Session-Sender
	participant sr as Session-Reflector

	cc->>s: TCP connection init
	s->>cc: Greetings! I support X security/integrity mode(s)
	cc->>s: yeah wutever, I choose X
	s->>cc: Acceptable
	
	cc->>s: yeah gimme test session with Y details
	s->>cc: Acceptable sir
	cc->>s: Aight i'ma start yeeting packets
	s->>cc: Acknowledged
	
	loop TWAMP-Test
		ss-->>sr: YEET!
		sr-->>ss: Chomp chomp! YEET!
	end
	
	cc->>s: AIGHT ENOUGH!
	s->>cc: ok :'(