In this illustration, a black arrow extends diagonally downward from right to left, and points to a blue circle labeled "Wait for call from above." A blue arrow extends from the top of this circle and arcs rightward to a second blue circle; the arrow has two labels with a horizontal line between them. On top: "rdt_send (data)."
On the bottom: "sndpkt=make_pkt (data, checksum) udt_send (sndpkt)."
The second blue circle is labeled "Wait for ACK or NAK." A blue arrow extends from the upper right side of this circle and travels in a clockwise motion to the lower right side of the circle. This arrow has two labels, separated by a horizontal line. On top: "rdt_rcv (rcvpkt) && isNAK (rcvpkt)."
On bottom: "udt_send (sndpkt)."
A blue arrow extends from the bottom of this blue circle and arcs leftward to the bottom of the first blue circle. This arrow is labeled "rdt_rcv (rcvpkt) && is ACK (rcvpkt)." A horizontal line separates this label with a second label, which appears as a capital lambda symbol.