Summary

  • RFC 1090 proposed direct SMTP sessions over X.25 virtual circuits in February 1989. Each session opened a full-duplex circuit, used it for the conversation, then cleared it.
  • X.25 could throw away packets still in transit during a clear. The calling side therefore waited for SMTP's Service Closing reply, usually following QUIT, before ending the circuit. Circuit closure, transaction acceptance and final mailbox delivery belonged to different moments.

The last envelope was between the desks

In RFC 821, the 1982 SMTP specification, Appendix D considered X.25 public data networks as a transport. It suggested placing a reliable end-to-end protocol such as TCP above the X.25 connection. Seven years later, R. Ullmann's RFC 1090 argued that direct use of the X.25 virtual circuit had become practical. The memo reported production experience across 24 public switched data networks in 22 countries. That claim described a working route for mail, not a theoretical sketch on a whiteboard.

The arrangement looked simple. Open one X.25 virtual circuit for an SMTP session. Use its full-duplex channel for commands, replies and message data. Then close it, normally from the calling side. SMTP still spoke in the familiar grammar of greeting, transaction, response and QUIT. The transport below it, however, had its own opinion about what happened to bytes at the instant of disconnection.

RFC 1090 made that opinion the hinge of the design. Unlike TCP, the memo said, X.25 did not synchronously deliver data still in transit when a clear request began. Those packets could be discarded. Pulling the circuit down as soon as the caller had finished transmitting was therefore a fine way to lose the tail of the conversation. The caller waited for the SMTP Service Closing message, normally the reply to QUIT, and only then cleared the virtual circuit. In the mailroom version of this protocol, a hand stayed off the light switch until the person at the far desk had answered goodbye.

There are several receipts in a mail exchange, and they arrive at different times. The SMTP response after message data concerns acceptance of that transaction by the receiving service. The Service Closing reply ends the protocol session. The X.25 clear ends the underlying circuit. The receiving service's later handling of the message sits further down the chain. RFC 1090's close sequence guarded the bytes still travelling at the transport boundary. It made the sender wait for a response from the other end before removing the path beneath it.

Even the opening of the circuit needed an agreed signal. RFC 1090 specified four octets of Call User Data as the preferred protocol identifier: hexadecimal C0F70000. That identifier helped identify the call as SMTP traffic. The memo also asked implementations to allow the call data, including that identifier, to be configured for each destination address. A shared format met local network arrangements without pretending every X.25 address used identical call setup.

Within the virtual circuit, the sender could divide the SMTP stream into packets as it liked. The memo encouraged M-bit “more data” sequences of up to 2,048 bytes and recommended sending each SMTP command or reply in one packet or one such sequence. This made a debugging trace easier to read; it was a recommendation rather than a condition of the protocol. The Q-bit qualified-data packets and interrupt packets had no job here and were to be ignored if encountered. Lines used full eight-bit ASCII and CRLF endings, with LF-only recognition suggested where possible.

The humble line ending mattered because the receiver had to reconstruct a legible SMTP conversation from packets chosen by the sender.

Failure also had a script. An X.25 level-3 circuit reset meant clearing the virtual circuit and trying the SMTP connection again, perhaps after a delay or with different call facilities. The facilities chosen in a call request could vary by destination, and RFC 1090 wanted that choice configurable per address. A reset was thus a reason to establish a fresh session, rather than evidence that whatever happened on the old line had reached its intended endpoint.

The memo gave operators clocks to watch. Wait 100 seconds for a call accept; allow another 120 for the Service Ready greeting. In an established session, ten minutes without a reply could trigger a clear. After QUIT, shorten the wait to 20 seconds. That last timeout could produce an inelegant exit, the RFC said, while completed SMTP transactions remained completed. These numbers came from the author's reported working practice. Their purpose was to stop a mail session from occupying a paid or scarce circuit indefinitely while still giving the other side a chance to finish its sentence.

The most revealing part of RFC 1090 is the hand at the switch. A working virtual circuit made SMTP possible over public data networks, but a circuit's end was its own event. The service had to finish speaking before the transport removed the floor under its feet. Mail crossed the line because two layers agreed when the conversation was over.