diff options
author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2019-10-06 21:10:46 +0200 |
---|---|---|
committer | Dimitri Staessens <dimitri@ouroboros.rocks> | 2019-10-06 21:10:46 +0200 |
commit | 568553394d0a8b34668a75c9839a0f1f426469b2 (patch) | |
tree | 175c08844f05611b059ba6900fb6519dbbc735d2 /content/docs/what.md | |
parent | d5d6f70371958eec0679831abd283498ff2731e5 (diff) | |
download | website-568553394d0a8b34668a75c9839a0f1f426469b2.tar.gz website-568553394d0a8b34668a75c9839a0f1f426469b2.zip |
theme: Switch to docsy theme
Diffstat (limited to 'content/docs/what.md')
-rw-r--r-- | content/docs/what.md | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/content/docs/what.md b/content/docs/what.md deleted file mode 100644 index b30b17c..0000000 --- a/content/docs/what.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: "What is a recursive network?" -author: "Dimitri Staessens" -description: "what" -date: 2019-07-06 -#type: page -draft: false ---- - -# The current networking paradigm - -<center> {{<figure -class="w-80" -src="/images/aschenbrenner.png">}} -</center> - -Every computer science class that deals with networks explains the -[7-layer OSI model](https://www.bmc.com/blogs/osi-model-7-layers/). -Open Systems Interconnect (OSI) defines 7 layers, each providing an -abstraction for a certain *function* that a network application may -need. - -From top to bottom, the layers provide (roughly) the following -functions: - -The __application layer__ implements the details of the application -protocol (such as HTTP), which specifies the operations and data that -the application understands (requesting a web page). - -The __presentation layer__ provides independence of data representation, -and may also perform encryption. - -The __session layer__ sets up and manages sessions (think of a session -as a conversation or dialogue) between the applications. - -The __transport layer__ handles individual chunks of data (think of them -as words in the conversation), and can ensure that there is end-to-end -reliability (no words or phrases get lost). - -The __network layer__ forwards the packets across the network, it -provides such things as addressing and congestion control. - -The __datalink layer__ encodes data into bits and moves them between -hosts. It handles errors in the physical layer. It has two sub-layers: -Media access control layer (MAC), which says when hosts can transmit -on the medium, and logical link control (LLC) that deals with error -handling and control of transmission rates. - -Finally, the __physical layer__ is responsible for translating the -bits into a signal (e.g. laser pulses in a fibre) that is carried -between endpoints. - -This functional layering provides a logical order for the steps that -data passes through between applications. Indeed, every existing -(packet) network goes through these steps in roughly this order -(however, some may be skipped). There can be some small variations on -where the functions are implemented. For instance, TCP does congestion -control, but is a Layer 4 protocol. - -However, when looking at current networking solutions, things are not -as simple as these 7 layers seem to indicate. Just consider this -realistic scenario for a software developer working remotely. Usually -it goes something like this: You connect to the company __Virtual -Private Network__ (VPN), setup an SSH __tunnel__ over the development -server to your virtual machine and then SSH into that virtual machine. - -The use of VPNs and various tunneling technologies draw a picture -where the __functions__ of Layers 2, 3, and 4, and often layers 5 and -6 (encryption) are __repeated__ a number of times in the actual -functional path that data follows through the network stack. - -Enter __*recursive networks*__. - -# The recursive network paradigm - -The functional repetition in the network stack is discussed in -detail in the book __*"Patterns in Network Architecture: A Return to -Fundamentals"*__. From the observations in the book, a new architecture -was proposed, called the "__R__ecursive __I__nter__N__etwork -__A__rchitecture", or [__RINA__](http://www.pouzinsociety.org). - -__Ouroboros__ follows the recursive principles of RINA, but deviates -quit a bit from its internal design. There are resources on the -Internet explaining RINA, but here we will focus -on its high level design and what is relevant for Ouroboros. - -Let's look at a simple scenario of an employee contacting an internet -corporate server over a Layer 3 VPN from home. Let's assume for -simplicity that the corporate LAN is not behind a NAT firewall. All -three networks perform (among some other things): - -__Addressing__: The VPN hosts receive an IP address in the VPN, let's -say some 10.11.12.0/24 address. The host will also have a public IP -address, for instance in the 20.128.0.0/16 range . Finally that host -will have an Ethernet MAC address. Now the addresses __differ in -syntax and semantics__, but for the purpose of moving data packets, -they have the same function: __identifying a node in a network__. - -__Forwarding__: Forwarding is the process of moving packets to a -destination __with intent__: each forwarding action moves the data -packet __closer__ to its destination node with respect to some -__metric__ (distance function). - -__Network discovery__: Ethernet switches learn where the endpoints are -through MAC learning, remembering the incoming interface when it sees -a new SRC address; IP routers learn the network by exchanging -informational packets about adjacency in a process called *routing*; -and a VPN proxy server relays packets as the central hub of a network -connected as a star between the VPN clients and the local area -network (LAN) that is provides access to. - -__Congestion management__: When there is a prolonged period where a -node receives more traffic than can forward forward, for instance -because there are incoming links with higher speeds than some outgoing -link, or there is a lot of traffic between different endpoints towards -the same destination, the endpoints experience congestion. Each -network could handle this situation (but not all do: TCP does -congestion control for IP networks, but Ethernet just drops traffic -and lets the IP network deal with it. Congestion management for -Ethernet never really took off). - -__Name resolution__: In order not having to remember addresses of the -hosts (which are in a format that make it easier for a machine to deal -with), each network keeps a mapping of a name to an address. For IP -networks (which includes the VPN in our example), this is done by the -Domain Name System (DNS) service (or, alternatively, other services -such as *open root* or *namecoin*). For Ethernet, the Address -Resolution Protocol maps a higher layer name to a MAC (hardware) -address. - -<center> -{{<figure class="fl w-90" - src="/images/layers.jpg">}} -</center> - -Recursive networks take all these functions to be part of a network -layer, and layers are mostly defined by their __scope__. The lowest -layers span a link or the reach of some wireless technology. Higher -layers span a LAN or the network of a corporation e.g. a subnetwork or -an Autonomous System (AS). An even higher layer would be a global -network, followed by a Virtual Private Network and on top a tunnel -that supports the application. Each layer being the same in terms of -functionality, but different in its choice of algorithm or -implementation. Sometimes the function is just not implemented -(there's no need for routing in a tunnel!), but logically it could be -there. - - ---- -Changelog: - -2019 07 09: Initial version.
\ No newline at end of file |