• ↑↓ to navigate
  • ↵ to open
  • ⟶ to select
  • ⌘ ⌥ ↵ to open in a panel
  • ←→ to navigate
  • esc to dismiss
⌘ '
keyboard shortcuts

The Problem

How do you ensure reliable delivery with minimal complexity? A simple approach is needed for reliable transmission without the complexity of sliding windows.

Core Idea

A simple reliable protocol where the sender transmits one packet, then stops and waits for an acknowledgment before sending the next packet.

How It Works

  1. Sender transmits a single packet
  2. Sender stops and waits for an ACK from receiver
  3. Receiver sends ACK after receiving packet correctly
  4. Sender receives ACK, then sends next packet
  5. If timeout occurs before ACK, sender retransmits the packet

Visual Explanation

G Sender Sender Wait WAIT for ACK Sender->Wait Wait Receiver Receiver Sender->Receiver 1. Send Packet Wait->Sender Timeout? Retransmit Receiver->Sender 2. ACK

Key Properties

  • Simple to implement
  • Lowest possible efficiency on high-latency links
  • Wastes bandwidth — sender idle while waiting for ACK
  • Suitable for low-latency or low-throughput scenarios

Semantic Network

semantic_Stop_and_Wait_Protocol THIS Stop And Wait Protoc REL1 Related Concept THIS--REL1 related REL2 Builds Into THIS--REL2 builds into

Connections

Edge Cases & Gotchas

  • Very inefficient on long-RTT links (satellite: RTT is seconds, sender idle most of time)
  • Duplicate packets possible if ACK is lost (handled by sequence numbers)
  • Utilization = (packet transmission time) / (RTT + transmission time) — very low for high RTT