00:00:08.870
Hello and welcome to this presentation at RailsConf 2020. I was really looking forward to seeing all of you in Portland this year, but unfortunately, due to the coronavirus, this presentation has to be virtual. I hope you enjoy it, and thank you for joining me.
00:00:21.930
Today, we will be discussing the layers of the network stack. My name is Ufuk Kayserilioglu, and I am a Senior Production Engineer on the Rails and Ruby Infrastructure Team at Shopify. Since you're attending a RailsConf talk, I'm going to assume that you're at least vaguely familiar with Rails, HTML, JavaScript, and CSS. I would also assume that you know a thing or two about HTTP as well.
00:00:38.430
However, for many of us Rails developers, or for most web developers, the lower layers of the network stack remain largely unknown. You might have heard of various acronyms like DNS, TCP, ICMP, and 802.11, and maybe you are familiar with some of them. What I have often observed is that most web developers do not fully grasp the complexities that lie beneath their applications.
00:01:06.899
Nonetheless, understanding the inner workings of the stack you are working on is an essential asset. Even if you are never going to do any low-level programming, being able to troubleshoot different layers of the stack when things go wrong is incredibly useful. Moreover, understanding the mechanics of these lower layers can inform how you build your applications, ultimately making them faster.
00:01:32.909
To illustrate, we all bundle our assets before deploying our Rails applications because we are told it speeds up page renders. But have you ever considered why? If you are unaware of how web browsers work or if you do not understand TCP handshakes and the overhead they introduce, you might not grasp why we bundle our assets. Therefore, more knowledge of the network stack can indeed make you a better web developer and enhance your overall development skills.
00:01:49.979
Today, we will delve deeply into the lower layers of the network stack to gain at least a rudimentary understanding of how things work down there. We all know that communication is challenging, and networks revolve around communication.
00:02:07.600
During these days of social isolation, with remote meetings and messages, I'm sure we all appreciate the joys of face-to-face communication. Communicating face-to-face is already difficult; doing so through various other channels proves even more challenging. Nonetheless, humanity has built incredible communication tools. People have constructed and dismantled entire empires using nothing more than messengers or written communication on parchment paper.
00:02:31.350
This suggests that when we get the fundamentals right, we can communicate quite effectively. If you examine communication closely, you'll discover that the most critical aspects involve layers in the communication channel and the various switching methods utilized within that channel.
00:02:49.440
So, before we move forward to the network stack, let's briefly discuss layers. Communication, like many other human endeavors, is layered. These layers of communication build upon one another. For example, we send letters with ink on paper inside envelopes adorned with addresses. When the recipient opens such a letter, they perceive the ink shapes, recognize words and sentences, derive meaning from them, and transform that meaning into understanding.
00:03:09.532
We must design communication systems wherein each layer serves a specific purpose. For instance, in the letter exchange example, dividing communication into layers allows us to modify some of the layers without altering the underlying message. If the recipient is close by, we can choose to speak to them face-to-face instead of sending a letter. The message remains unchanged, but the lower layers of communication have altered.
00:03:33.640
Next, let’s discuss switching. Switching fundamentally means the method by which communication channels between two entities are accessed. There are primarily two different kinds of switching. The first is circuit switching, an excellent example of which is the analog telephone network.
00:03:49.710
In a circuit-switched network, multiple subscribers are connected to the network. When one subscriber connects with another subscriber, a circuit is established. The voltage along that circuit causes the landlines to ring for the duration of the phone conversation; the circuit must remain connected. If it gets disconnected, the conversation is abruptly terminated. Hence, this is referred to as circuit-switched networking.
00:04:04.260
While circuit switching makes establishing and maintaining communication straightforward, it is highly inefficient. Even when the communication channel is not in use, the resources are still occupied, waiting to be utilized. A real-life representation of circuit switching would be employing a messenger who always waits outside your door, prepared to deliver messages to your friends.
00:04:19.050
Often, this messenger remains idle, awaiting your message. You cannot send another message until the messenger returns with a response. The alternative mode of switching is known as packet switching.
00:04:32.190
A good example of packet switching is the postal network. In the Postal Service, if you wish to communicate with a friend, you write a letter, place it in an envelope, and drop it into a mail collection box. A postal worker collects the letter and takes it to the post office, where it is sorted based on the address on the envelope.”},{
00:04:55.260
From here, it may get dispatched to the head post office, which makes subsequent sorting decisions, such as sending it on a plane to another country. Once the letter reaches the destination country, it is routed to the regional post office and ultimately delivered to your friend's mailbox.
00:05:04.710
There are two important points to note from this process: First, no leg of the communication utilizes any resources while the message is in transit. If you wish to communicate with your friend again, you simply send another letter. Second, message routing seamlessly crosses different networks that operate independently.
00:05:14.850
As such, every point only needs to determine the next point in the route, without having knowledge of where the recipient lives, except for the final postal worker who delivers the message to the intended recipient.
00:05:28.920
This example of packet switching provides us with a blueprint for how we might build our network communication systems. The goal was to standardize networks, and in the early 1980s, some brilliant minds collaborated to create the Open Systems Interconnection (OSI) model.
00:05:45.480
The OSI model consists of seven layers, each with independent responsibilities. These layers, from bottom to top, are: Physical, Data Link, Network, Transport, Session, Presentation, and Application.”},{
00:06:00.450
Together, these seven layers form what we refer to as the network stack. Above this stack lie our applications and services. The OSI model serves as a conceptual reference, while the concrete implementation we will analyze today is the TCP/IP stack.”},{