RFC 5841

TCP Option to Denote Packet Mood

πŸ“… published April 2010, from ietf

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 (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 πŸ”’


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