RFC 5841
TCP Option to Denote Packet Mood
RFC 5841: TCP Option to Denote Packet Mood π
- Stream: Independent Submission πΈ
- Authors: R. Hay and W. Turkal, both from Google Inc. π§
- Category: Informational (not a Standards Track spec, just vibes) β¨
- ISSN: 2070-1721
- Date: 1 April 2010 π (yes, it's an April Fools' date π)
- Obsoletes / Updates: the title block doesn't list anything for either one π¦
Abstract β¨
okay so the whole point of this doc is to propose a brand new TCP option that lets a packet show its mood π. That's it. That's the abstract bestie π .
Status of This Memo π
This doc is not an Internet Standards Track spec. It's published purely for informational purposes π«Ά.
This is a contribution to the RFC Series, separate from any other RFC stream. The RFC Editor chose to publish it at their discretion and makes no statement about whether it's worth implementing or deploying. Docs approved by the RFC Editor aren't candidates for any level of Internet Standard, see Section 2 of RFC 5741 π.
If you want current status info, errata, or a way to send feedback, check http://www.rfc-editor.org/info/rfc5841.
Copyright Notice π
Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved Β©οΈ.
This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the publication date. Please read these carefully, because they spell out your rights and restrictions for this doc, and you do not want to skip that part π.
1. Introduction π
okay so we're basically giving the bit streams on countless physical layer networks around the world a personality π¦. We propose a TCP option to express packet mood [DSM-IV] π.
Packets cannot feel π. They exist to move data from one system to another. BUT in certain situations you can kinda infer or add some emotion. Like, a packet that gets retransmitted to resend data for a packet that never got an ACK could be called an 'angry' packet, or a 'frustrated' one if it's not the first retransmission, for example π. So how do we get these feelings into the packets themselves? By adding TCP Options [RFC793] to the TCP header, using ASCII characters that encode commonly used "emoticons" to convey packet mood β¨.
1.1. Terminology π
The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL, when they appear in this document, are to be interpreted as described in [RFC2119] π«Ά.
2. Syntax π§
So a TCP Option is basically a 1-byte kind field, followed by a 1-byte length field [RFC793] π. The plan is to use option 25 (released 2000-12-18) to define packet mood. This option would have a length of 4 or 5 bytes β¨. Every simple emotion we're talking about can be displayed with two or three 7-bit, ASCII-encoded characters, which is honestly so iconic π₯. You can also stack multiple mood options in one TCP header to express more complex moods than the ones defined here, like a packet that's happy AND surprised π.
TCP Header Format
Kind Length Meaning
---- -------- -------
25 Variable Packet Mood
Here's the breakdown π :
+--------+--------+--------+--------+
|00011001|00000100|00111010|00101001|
+--------+--------+--------+--------+
Kind=25 Length=4 ASCII : ASCII )
+--------+--------+--------+--------+--------+
|00011001|00000101|00111110|00111010|01000000|
+--------+--------+--------+--------+--------+
Kind=25 Length=5 ASCII > ACSII : ASCII @
3. Simple Emotional Representation πΈ
It's proposed that common emoticons get used to denote packet mood. Packets don't "feel" per se π. The emotions they get tagged with are really a reflection of the user mood expressed through packets.
So the humanity in a packet is entirely sourced from humans π«Ά. Packets are just the messengers, bestie π.
To make this work, we propose using these simple emotions to convey mood:
ASCII Mood
===== ====
:) Happy
:( Sad
:D Amused
%( Confused
:o Bored
:O Surprised
:P Silly
:@ Frustrated
>:@ Angry
:| Apathetic
;) Sneaky
>:) Evil
And here's the proposed ASCII character encoding π:
Binary Dec Hex Character
======== === === =========
010 0101 37 25 %
010 1000 40 28 (
010 1001 41 29 )
011 1010 58 3A :
011 1011 59 3B ;
011 1110 62 3E >
100 0000 64 40 @
100 0100 68 44 D
100 1111 79 4F O
101 0000 80 50 P
110 1111 111 6F o
111 1100 124 7C |
For the purposes of this RFC, 7-bit ASCII encoding is enough to represent emoticons π . The ASCII characters get sent in 8-bit bytes, with the leading bit always set to 0 β¨.
4. Use Cases π
There are two ways to denote packet mood π¦. One is to infer the mood from an event in the TCP session. The other is to derive mood from a higher-order action at a higher layer, like the subject matter of the payload π§ .
For packets where the 'mood' is inferred from activity within the TCP session, the 'mood' MUST be set by the host that's watching for the trigger event π. If a client sends a frame and gets no ACK back, then the retransmitted frame MAY contain the TCP OPTION header with a mood set π.
Any packet that exhibits behavior allowing mood to be inferred SHOULD add the TCP OPTION to the packets with the implied mood β¨.
Applications can take advantage of the defined moods by expressing them in the packets π. This can be done in the SYN packet sent from the client. All packets in the session can then be tagged with the mood set in the SYN packet, but that comes with a per-packet performance cost (see Section 5, "Performance Considerations") π.
Each application MUST define the preconditions for marking packets as happy, sad, bored, confused, angry, apathetic, and so on π. This is a framework for defining how these moods can be expressed, but it's up to the developers to decide when to slap on these encoded labels π·οΈ.
4.1. Happy Packets π
Healthy packets are happy packets, you could say π. If the ACK packets come back within <10 ms end-to-end, from a sender's stack to a receiver's stack and back again, that reflects high-speed bidirectional capability β‘. If no retransmits are required and all ACKs are received, all subsequent packets in that session SHOULD be marked as 'happy' π₯°.
No loss and low latency also makes for happy users π«Ά. So the packet is reflecting the end-user experience β¨.
4.2. Sad Packets π
If retransmission rates go greater than 20% of all packets sent in a session, it's fair to say the session can be in mourning for all the good packets lost in the senseless wasteland of the wild Internet π.
This shouldn't be confused with retransmitted packets marked as 'angry', since this tag would apply to all frames in the session, numbed by the staggering loss of packet life π₯.
4.3. Amused Packets π€£
Any packet carrying a text joke SHOULD be marked as 'amused' π.
Example:
1: Knock Knock
2: Who's there?
1: Impatient chicken
2: Impatient chi...
1: BAWK!!!!
If a joke like this is in the packet payload, then honestly, how can you not be amused by one of the only knock-knock jokes that survives the 3rd grade? ππ
4.4. Confused Packets π
When is a packet confused? π€ There are network elements that do per-packet load balancing, and if there are asymmetries in the latencies between end-to-end paths, out-of-order packet delivery can happen πͺοΈ.
When a receiver host gets out-of-order packets, it SHOULD mark TCP ACK packets sent back to the sender as confused π.
The same goes for packets sent to incorrect VLAN segments or that are misdirected π¦. The receivers might know the packet is confused, but there's no way to know at ingress whether that will be the fate of the frame π« .
That being said, application developers SHOULD mark packets as confused if the payload contains complex philosophical questions that make one ponder the meaning of life and one's place in the universe πβ¨.
4.5. Bored Packets π₯±
Packets carrying accounting data with debits, credits, and so on MUST be marked as 'bored' πΌ.
It could be said that many people consider RFCs boring π. Packets containing RFC text MAY be marked as 'bored' π.
Packets with phone book listings MUST be marked 'bored' π.
Packets containing legal disclaimers and anything in Latin SHOULD be marked 'bored' ποΈ.
4.6. Surprised Packets π±
Who doesn't love when the out-of-order packets in your session surprise you while you're waiting in a congested queue for 20 ms? π
Packets don't have birthdays, so packets can be marked as surprised when they run into unexpected error conditions π.
So when ICMP destination unreachable messages are received (perhaps due to a routing loop or congestion discards), all subsequent packets in that session SHOULD be marked as surprised π«’.
4.7. Silly Packets π€ͺ
Not all packets are sent as part of a session π§. Random keepalives during a TCP session MAY be set up as a repartee between systems connected as client and server π. Such random and even playful interchanges SHOULD be marked as silly π€‘.
4.8. Frustrated Packets π€
Packets that get retransmitted more than once SHOULD be marked as frustrated π.
4.9. Angry Packets π₯
Packets that get retransmitted SHOULD be marked as angry π’.
4.10. Apathetic Packets π₯
When sending a RST packet to a connected system, the packet should be marked as apathetic πΆ. That way the receiver knows your system does not care what happens after that π .
4.11. Sneaky Packets π¦
When a packet is used in a particularly clever way, it SHOULD be marked as sneaky π. What counts as "clever" is pretty subjective, so it's prudent to get a few opinions about a particular use before you decide it's clever π§.
4.12. Evil Packets π
It's hard for a TCP packet to discern higher moral quandaries, like the meaning of life, or what exactly defines 'evil' and from whose perspective that characterization is being made π. However, developers of TCP-based applications MAY choose to see some activities as evil when viewed through their particular lens of the world πΆοΈ. At that point, they SHOULD mark packets as evil πΏ.
Some organizations are prohibited from using this mood by their mission statement π«. This would also prohibit using the security flag in the IP header described in [RFC3514], for the same reasons π‘οΈ.
6. Security Considerations β¨
okay bestie, the security part is lowkey terrifying π The TCP checksum is a 16-bit value, and it could get mistaken if ASCII characters with the same number of zeros and ones got swapped out. Like, a happy ":)" could get replaced with a frown by a malicious attacker who uses a winking eye ";(" instead. π That could totally misrepresent the sender's intended mood to the receiver. Not okay!! Guard your emoticons, periodt π
7. Related Work π¦
ngl this document is not trying to build a sentient network stack π BUT this framework could still be used to express the emotions of a sentient stack, if that ever happened. And if it did, a brand new technical job class of network psychologists could be created. Who doesn't love a new job? :) π§
8. IANA Considerations π
if this work gets standardized, IANA is requested to officially assign value 25, as described in Section 3. π Any additional moods and emoticon representations would need IESG approval or a standards action [RFC5226]. So no sneaking in new feelings without the paperwork, iykyk π
9. Informative References π
Here are all the references, bestie, with every detail intact π«Ά
[DSM-IV] "Diagnostic and Statistical Manual of Mental Disorders (DSM)", http://www.psychiatryonline.com/resourceTOC.aspx?resourceID=1.
[RFC793] Postel, J., "Transmission Control Protocol", STD 7, RFC 793, September 1981.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 2008.
[RFC3514] Bellovin, S., "The Security Flag in the IPv4 Header", RFC 3514, April 1 2003.
Authors' Addresses π
Richard Hay Google 1600 Amphitheatre Pkwy Mountain View, CA 94043 EMail: rhay@google.com
Warren Turkal Google 1600 Amphitheatre Pkwy Mountain View, CA 94043 EMail: turkal@google.com
and that's the whole RFC, bestie π they really said "emotional TCP" and somehow made it legit ππ
π¦ where this page comes from
- ietf: rfc5841 2010-04
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms