RFC 864
Character Generator Protocol
Character Generator Protocol ๐๐
๐ฎ Network Working Group ยท RFC 864 ยท Author: J. Postel, ISI ยท Date: May 1983 ยท Status: this one specifies a standard for the ARPA Internet community ๐
๐๏ธ Obsoletes/Updates: nothing listed! This RFC doesn't obsolete or update any other RFCs in its header. ๐
Okay bestie, so this RFC is a standard for the ARPA Internet community โจ Hosts on the ARPA Internet that choose to implement a Character Generator Protocol are expected to adopt and implement this standard. Lowkey iconic ๐
A character generator service is a super useful debugging and measurement tool ๐ฅ It just sends data out and doesn't care what you send it. Main character energy, no notes ๐ง
TCP Based Character Generator Service ๐ธ
So the first version runs as a connection-based app on TCP ๐ A server listens for TCP connections on TCP port 19. Once a connection is established, a stream of data gets sent out the connection, and any data the server receives gets thrown away ๐๏ธ It keeps going until the calling user terminates the connection.
Real talk, users are gonna get bored and just abort the TCP connection instead of closing it politely ๐ The service should be prepared for either the careful close or the rude abort. Rude but valid ๐
The data flow is limited by the normal TCP flow control mechanisms, so there's no concern about the service sending data faster than the user can process it. The flow control is literally handling the drama for us ๐ซถ
UDP Based Character Generator Service ๐ฆ
The second version is a datagram-based app on UDP ๐ A server listens for UDP datagrams on UDP port 19. When a datagram comes in, an answering datagram gets sent back containing a random number (between 0 and 512) of characters. The data in the received datagram is ignored, so it doesn't matter what you sent ๐คทโโ๏ธ
No history or state info is kept for the UDP version, so there's zero continuity from one answering datagram to the next. Each one is its own little moment โจ
The service only sends one datagram in response to each received datagram, so again, no concern about sending data faster than the user can process it. We're literally so chill ๐
Data Syntax ๐
The data may be anything, honestly ๐ It is recommended that a recognizable pattern be used in the data, though, so people can tell what they're looking at.
One Popular Pattern ๐
One popular pattern is 72 character lines of the ASCII printing characters. There are 95 printing characters in the ASCII character set ๐ข Sort them into an ordered sequence and number them from 0 through 94. Then think of the sequence as a ring, so character number 0 follows character number 94 ๐
On the first line (line 0), put the characters numbered 0 through 71. On the next line (line 1), put the characters numbered 1 through 72. And so on. On line N, put characters (0+N mod 95) through (71+N mod 95) ๐งฎ End each line with a carriage return and line feed (CRLF) ๐
๐จ The numbers wrap around the ring, so line N starts at character (0+N mod 95) and ends at (71+N mod 95). Don't mess up the modulo, bestie ๐ญ
Example ๐
Here's what the pattern looks like in practice โจ
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh
"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij
$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk
%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl
&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm
'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn
()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmno
)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop
*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq
+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr
,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs
-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst
./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu
/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv
0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw
123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx
23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy
3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{
56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|
6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}
789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
89:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !
:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"
;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#
<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$
=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%
>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&
?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'(
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()
BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*
CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+
DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,
EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-
FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-.
GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./
HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0
IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./01
JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./012
KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123
LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./01234
MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./012345
NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456
Phew, that's the whole vibe ๐ Lowkey the simplest protocol in the book, and still so useful ๐ซถ๐
๐ฆ where this page comes from
- ietf: rfc864 1983-05
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms