gemini.git

going-flying.com gemini git repository

summary

tree

log

refs

00c3552f7a35d2b07d52122505ba2c355de1363e - Matthew Ernisse - 1598540575

new post and add backlinks search to blog posts

view tree

view raw

diff --git a/build/build.py b/build/build.py
index f995203..c404f14 100755
--- a/build/build.py
+++ b/build/build.py
@@ -215,6 +215,7 @@ if __name__ == '__main__':
 			fd.write(article_template.render({
 				'article': article,
 				'content': content,
+				'self': URLBASE + fn,
 				'up': URLBASE
 			}))
 
diff --git a/build/template.txt b/build/template.txt
index ae85803..22ecd76 100644
--- a/build/template.txt
+++ b/build/template.txt
@@ -3,5 +3,6 @@
 {{content}}
 
 => {{ up }} back
+=> gemini://gus.guru/backlinks?{{ self }} backlinks
 
 🚀 © MMXX matt@going-flying.com
diff --git a/users/mernisse/articles/10.gmi b/users/mernisse/articles/10.gmi
new file mode 100644
index 0000000..f86c5d2
--- /dev/null
+++ b/users/mernisse/articles/10.gmi
@@ -0,0 +1,156 @@
+---
+Title: Did the slow adoption of IPv6 lead to the cloud?
+Date: 08/27/2020 11:02
+
+## Background
+
+The Internet Protocol (IP) was specified in 1981 in RFC 791 and was based on a
+32 bit address space.  Due to the growth of the Internet the original assignment
+scheme was found to be wildly inefficient and was leading to premature address
+exhaustion so RFC 1519 created CIDR (Classless Inter-Domain Routing) to allow a
+more flexible assignment of addresses in 1993.  Two years later in 1995 RFC
+1883 brought about the next version of IP, known generally as IPv6.  One of
+the key changes of IPv6 is the use of 128 bits to specify addresses.
+
+=> https://tools.ietf.org/rfc/rfc791.txt
+=> https://tools.ietf.org/rfc/rfc1519.txt
+=> https://tools.ietf.org/rfc/rfc1883.txt
+
+### Addressing
+
+Every node wishing to communicate on the Internet needs a unique address.
+In IP (IPv4) the size of an address is 32 bits, which means the total number
+of addresses possible is 4,294,967,296 or a little over 4.2 billion, however
+not all addresses are assignable.  Several address ranges are reserved
+(for example the ubiquitously used RFC 1918 private address spaces such as
+192.168.0.0/16, 172.16.0.0/12 and 10.0.0.0/8 reserve 17,826,048 addresses
+for private use that may not be used on the Internet) and several legacy
+address ranges remain inefficiently allocated (for example Apple still owns
+one of the original class A address allocations comprising 16,777,216 public IP
+addresses) so the practical limit is in fact much lower.  With IPv6 the number
+of assignable addresses is so large it is hard to fathom.  Written out
+2¹²⁸ is 340,282,366,920,938,463,463,374,607,431,768,211,456 or roughly 
+3.4 x 10³⁸.  Even with large swaths of reserved space and overhead
+for internal networking operations it represents a significant increase in
+available addresses.
+
+=> https://tools.ietf.org/rfc/rfc1918.txt
+=> https://www.wolframalpha.com/input/?i=2%5E128
+
+## The Cloud
+
+```
+      _  _
+     ( `   )_
+    (    )    `)
+   (_   (_ .  _) _)
+```
+
+In its simplest form "the cloud" is a marketing term for two different, but
+related concepts.  The first was born out of the penchant for engineers to
+elide the complexity of a system that didn't need to be worried about (often
+times the Internet itself) as a picture of a cloud.  This aspect is generally
+summarized as "someone else's computer," and refers to a highly-automated,
+self-service, and elastic infrastructure that can be consumed directly by the
+end-user without intervention of a traditional IT staff (and is often owned by
+someone other than the end user or their organization).  The other is economic
+and generally refers to the shifting of the payment of resources from
+long-term capital activity (buying hardware every few years) to a more
+frequent expense activity (known usually as pay-as-you-go or usage based
+billing), often leveraging the elastic nature of the first point.
+
+In this writing I'm leaning on the naive version of the first point, the blunt
+"someone else's computer" definition if you will.
+
+## A client-server problem?
+
+In the beginning computers were rare and expensive.  This lead to the advent of
+time-sharing, multi-user systems where several individuals could use the 
+resources of a computer simultaneously.  Modern personal computers retain this
+ability but it is rarely used outside of providing a layer of security (think
+of when Windows prompts you for permission to run something as the Administrator
+or when macOS asks for your password to do something.  In both of those cases
+it needs to run something as a specially empowered user that is different from
+your user).  The way computers were used lead to client-server applications
+and most of the Internet remains built that way.  E-mail, the web, and most of
+the foundational operating applications of the Internet (DNS, BGP, OSPF...)
+operate in a client server model.  As we began to run out of public IP
+addresses during the growth in popularity of the Internet in the late 1990s
+and early 2000s a stop-gap measure gained popularity.  Known as Network Address
+Translation (NAT), it is a scheme to "hide" one or more networks of IP
+addresses (usually RFC-1918 addresses) behind a single public IP address.  
+Originally released in May of 1994 in RFC 1631 NAT rapidly became the standard
+used in residential Internet connections to the point that it was built into
+the devices that ISPs provided to their customers to connect their computer
+to the Inetneret.  (I have somewhat fond memories of using NAT (known at the
+time in Linux as IP Masquerade) to share a single dial-up connection to the
+Internet with two computers (one was mine and the other used by my siblings)).
+
+=> https://tools.ietf.org/rfc/rfc1631.txt
+
+The drawback of NAT is that the systems that lack the public IP address
+cannot receive an incoming connection.  There is a facility to expose
+individual IP ports to a system behind the NAT gateway however it is
+often tedious to manage and imposes limits on the use of the port.  This made
+it difficult to run servers on residential Internet connections as they often
+only provided the user with a single IP address that could change periodically.
+
+## Enter IPv6
+
+In the mid to late 2000s the impending exhaustion of IP address allocations
+began to find some urgency in the public consciousness and a real push was
+made to widely support the now decade old IPv6 protocol.  IPv6 specifies that
+Internet connection users should be given what is known as "a sixty-four",
+or 2⁶⁴ addresses (the reasoning comes from the ability to encode your Ethernet
+MAC address in the IPv6 address with some other information which makes 
+address assignment easy, though this was largely determined to be an awful idea
+as it allowed you to be uniquely identified literally anywhere in the world by
+IP alone.  Most modern IPv6 stacks implement RFC 3040 or 4941) which provides
+them with something like 18,446,744,073,709,551,616 possible addresses to use.
+
+=> https://tools.ietf.org/rfc/rfc3040.txt
+=> https://tools.ietf.org/rfc/rfc4941.txt
+
+## What does this have to do with the cloud?
+
+Ok, so that was a *lot* of background but I think it is important to understand
+the world we were in while I posit this.  It is of course all conjecture and
+probably at best a thought experiment but it's been on my mind for a while now.
+
+As applications started to appear that allowed users to control real world
+objects (somewhat like my silly VFD display) it became necessary to connect
+a user to a device they owned specifically.  Generally called the Internet of
+Things (IoT) these days many of these applications needed a way to connect
+the user to their equipment even if the user was not on the same local network
+as the devices (controlling a smart thermostat or viewing home security cameras
+while not at home for example).  The solution was to use a third-party server
+as a mediator, so both the device and the client application could connect to
+a public IP address which would relay information and bypass the need for
+NAT port forwarding (and a solution to the potential dynamic IP address).
+
+=> /cgi-bin/vfdsay.py	My silly VFD display
+
+Interestingly though, if you think about it, IPv6 makes this entirely pointless.
+There are plenty of addresses for every single device so you could simply 
+"pair" your application with your device(s) using one of several local-network
+discovery protocols (UPnP, and Zeroconf come to mind) and from that point on
+your application would be able to connect to your device.  Security though
+token or certificate exchange similar to Bluetooth's PIN pairing could be
+easily added which would mean that in many cases the use of the cloud would be
+entirely unnecessary.
+
+## What do you think?
+
+This possibility popped into my head a while back and has been bugging me.
+What if IPv6 had been deployed earlier, before the Internet got popular enough
+that NAT had to become the de-facto standard.  Would we have seen the rise of
+cloud as a middleman as the de-facto standard for how IoT applications are
+structured?  Would we instead see more decentralized applications where users
+remain in control of their data and companies don't have infrastructure that
+lives in the middle of most of our interactions?
+
+I don't know.  It is certainly possible.  After all, the central server model
+only really thrived because there wasn't really another option that the
+layperson had any hope of comprehending or implementing.  What do you, dear
+reader think?  What kind of Internet might we have if most of us always had a
+few quintillion addresses to call our own?