Pingfs: Stores your data in ICMP ping packets (2020)

(github.com)

78 points | by linkdd 54 days ago

10 comments

  • HenrikB 49 days ago
    It's humbling to know that the RAM of computers like ZX Spectrum and Commodore 64 would fit in a single IP packet. It took minutes to load that "paket" from cassette tape.
    • zamadatix 49 days ago
      With IPv6 there is even an extension to go to 4 GB packets (extremely rare to actually be implemented though), which you can send in less than 100 ms with an 800G NIC!
      • hermitdev 49 days ago
        > to 4 GB packets

        Heh. Anyone remember the ping of death[0]? A lot (most?) of computers on the early internet didn't properly handle large packets, _especially_ from ICMP pings. Once upon a time, you could send a single ping w/ a packet size of 65536 and crash the remote.

        [0] https://en.wikipedia.org/wiki/Ping_of_death

  • cakemedia 49 days ago
    A software version of a mercury delay line! https://en.wikipedia.org/wiki/Delay-line_memory
    • EvanAnderson 49 days ago
      Yep. ICMP delay line memory.
      • cbdevidal 49 days ago
        Okay, but could someone ELI5 how it works? Because I am heckin’ confused
        • leoc 49 days ago
          The UK's National Musuem of Computing has a nice demonstration video https://www.youtube.com/watch?v=xGEAPVCuwvY . Apparently delay-line memory also went on to have wide use in colour TVs before the arrival of cheap semiconductor memory https://www.youtube.com/watch?v=EPQq7xd3WdA , which was quite appropriate as it had come from radar in the first place https://www.youtube.com/watch?v=JZLpbhsE72I&t=675s .
        • adzm 49 days ago
          Imagine a continuously-moving loop that stores bits. When you want a certain bit you just wait for it to loop back to the position you want.
          • cbdevidal 49 days ago
            Good, but how does a ping hold data? AFAIK each ping is a single round trip and not a continuous loop. And where in the packet is the data stored?
            • robjs 49 days ago
              ICMP packets pretty much always carry some data (even though it's not _strictly_ required). This data is what is padded when the user asks for a ping with a specific packet size (e.g., when debugging MTU issues).

              In some applications, using an ICMP payload and getting a quote of the IP header + 8-bytes of the original packet back in ICMP error messages is part of the application. For example, traceroute utilises the fact that it gets part of the payload back in a ICMP TTL exceeded message to identify _which_ traceroute request was being responded to.

            • lesuorac 49 days ago
              In everybody else's router as it travels back and forth.

              Imagine mailing somebody a letter with data; once they receive the letter they send it back. The information is stored within the postal system.

            • chasd00 49 days ago
              you're right it's not continuous, you'd have to send another ping once the first one is finished. Your data is only "stored in the network" until the ping completes which would be a few hundred ms or so and then another ping has to be sent. If a single ping fails i wonder if the whole "fs" is corrupted or if there some kind of error handling built in.
              • EvanAnderson 49 days ago
                Clearly you need to send multiple redundant PINGs. ICMP delay line memory RAID.
  • _jholland 49 days ago
    Obligatory Tom7 reference: [Harder Drive: Hard drives we didn't want or need](https://www.youtube.com/watch?v=JcJSW7Rprio)

    He stores data in ICMP ping packets, but also Tetris board states, among others. If you are not familiar with Tom7, let this be an introduction to a heavyweight whimsical internet nerd

    • leoc 49 days ago
      38:37 https://www.youtube.com/watch?v=JZLpbhsE72I&t=2317s in Jay Forrester's "The Design Environment and Innovations of Project Whirlwind" talk ( https://www.computerhistory.org/collections/catalog/10270308... ):

      > There was a desperate search for better memory. We seriously considered. at one stage. renting a television microwave link from Boston to Buffalo and back so that one could store something like 3,000 bits in the 3 milliseconds of round-trip transit time.

      Though I'm not sure why they wouldn't have just used a delay line for that task: that form of memory was already in use in computers, as discussed by Forrester himself from 11:15 https://www.youtube.com/watch?v=JZLpbhsE72I&t=675s .

    • EvanAnderson 49 days ago
      Tom7 is a gem. Anything by Tom7 is worth your time. Always.
    • ozozozd 49 days ago
      Came to comments only to mention/upvote this and add engagement so everyone knows about the GOAT that Tom7 is.
    • cbm-vic-20 49 days ago
      "Tetris is an inventory-management survival-horror game."
  • xvilka 49 days ago
    The concept is widely covered in the amazing book Silence on the Wire[1] by Michal Zalewski. I wish he or someone else would write modern equivalent (or at least a new, updated edition) of the book.

    [1] https://nostarch.com/silence.htm

  • lysace 49 days ago
  • dim13 49 days ago
    Reminded me of GNU Terry Pratchett[1].

    [1]: http://www.gnuterrypratchett.com/

  • some_furry 49 days ago
    Every time someone does something like this, I recall this post from Xe:

    https://xeiaso.net/blog/anything-message-queue/

  • jupitr 49 days ago
    makes me wonder if a sufficiently large number of connected nodes can represent bits via their online/offline status, and their network graph representing "memory"
  • diydsp 49 days ago
    Router designers hate him...

    Srsly... the ram inside a core router is some of the most precious resources around... this is an ooold idea.. people were doing at least as far back as the 2000s.. i showed them how our router (Avici TSR) worked and said "please don't use the super fancy fabric temporary store for this."

    This kills the router designer.