Inspired by Jon Gjengset's excellent YouTube stream. Original code here.
Also inspired by wanting to print out TCP packets, to get a better feel for the protocol.
- Basic printing of packets
- Passive open
- Basic state handling for arriving segments
- User APIs:
TcpListener
,TcpStream
- Closing connections
- Receive data
- Send data
- Active open
- Initial Sequence Number selection
- Window management
- Consolidate packets (e.g. single ACK for multiple incoming packets)
- CLI options (listen, connect, printing options etc.)
- Retransmission
- Improved packet printing
- TCP Options
- Remote address validation
- Reordering packets (handling out of order segments)
- Proper IPv6 handling
- Check requirements
- RFC 793 - TRANSMISSION CONTROL PROTOCOL
- RFC 1122 - Requirements for Internet Hosts -- Communication Layers
- RFC 6528 - Defending against Sequence Number Attacks
- RFC 7414 - A Roadmap for Transmission Control Protocol (TCP) Specification Documents
- TCP in a nutshell
- Transmission Control Protocol (TCP) Specification (draft-ietf-tcpm-rfc793bis-19)
- TCP, UDP, and Sockets: rigorous and experimentally-validated behavioural specification Volume 1: Overview
- TCP, UDP, and Sockets: rigorous and experimentally-validated behavioural specification Volume 1: The Specification
- Example state variables