Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add post about reasons for congestion control #49

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

mengelbart
Copy link

No description provided.

@Sean-Der
Copy link
Member

Sean-Der commented Mar 28, 2022

I think this is better for a second post in a series.
We should merge it now though, but I think we should suggest
users read another introductory post first.

I think users will first ask 'Why do I even care about Congestion Control'.
People don't want to consume a highly technical topic without knowing what is
in it for them. Worth asking others, but this is how I got interested/see the topic.


* Ever wonder why your conference call starts low quality and gets better gradually?
* Ever wonder why people can't hear you in the conference call randomly?
* Ever wonder why green artifacts appear in the call?
* Ever wonder why sometimes your conference call seems to become more delayed, and then catch up?

Before we can even begin to understand why these problems happen you have to understand how information
flows over the internet. The internet is made up of many different hops. Imagine you are sending a packet
from one internet user to another. It will flow through the different hops. Some of those hops maintained
by the users ISP. Maybe some of those hops are maintained by the business they work at.  You can visualize it
like so.

[Sender] ---> [Node 1] ---> [Node 2] ---> [Node 3] --> [Node 4] --> [Receiver]

All of these hops are just computers with all the usual constraints. They have a CPU, memory and network cards.
They are all running network stacks and Operating Systems that have different behaviors and bugs. These
hops are also being utilized by millions of other users using the same networks.

---

The video conferencing behaviors mentioned before are because of these hops. The internet is made up of pieces that
are constantly changing. Hops also don't have a way to communicate their status to senders. If a hop loses a packet
because it is under heavy CPU load it has no way to tell the sender. If a hop is slow to forward a packet because RAM
is exhausted it has no way to tell the sender.  It is up to the receiver to communicate that information.

This means that senders and receivers have to figure out this information on their own. We If we want to have a good 
experience we need to figure out how much we can send, without overloading these hops. Overloading these hops is
 commonly referred to as network congestion. So what we need is a 'Congestion Controller'.

---

Since these hops have no way of communicating with Senders it is a game of heuristics. Senders and receivers need 
to look at attributes of the packets they sent and made decisions. How long did it take to send the packets? Did any 
packets get lost? Did large packets get lost or take longer? Any information we can get is fair game.

---

Testing how software responds to congestion adds to this complexity. When developers right conferencing software
they are usually doing it under favorable terms. As a developer how do I test and anticipate all the behaviors that will exist
when I send a packet? You can't expect every person building network software to test the millions of different configurations. So good testing software needs to exist and it needs to easy to use.

@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2022-03-28T10:13:20.053Z" agent="5.0 (X11)" etag="hgc5x1kB-2dRLrU4aC3j" version="16.5.5" type="device"><diagram id="4-Eexl7ycAONSdmFLFK7" name="Page-1">7VhNk5swDP01Oe5MsIFwzWazbWfaQ5tDZ3pzQIBbB1Fj8tFfXxNsEvLVbCdstklP4CcZy3p+EtCjo9nynWR5+gkjED3Sj5Y9+tQjxHGdQF8qZFUjA69fA4nkkXHaABP+Cwxo3UoeQdFyVIhC8bwNhphlEKoWxqTERdstRtFeNWcJ7AGTkIl99CuPVFqjgd1Fhb8HnqR2ZadvLDNmnQ1QpCzCxRZExz06koiqvpstRyCq5Nm81POej1ibwCRk6pwJT/SRfFYfFuNvxSCNS+65lD441ASnVnbHEOkEmGGGmb48SiyzCKrn9PUIpUoxwYyJj4i5Bh0NfgelVoY+VirUUKpmwlhjzJQxEk+PC8WkGlb0aCQUrCh4aOFnLuy0OrYqoKN7NlCBpQzhxEaJOTtMJqBO+PkNM/pIA85AyZWeJ0EwxeftOJg5W0njt0m/vjEMvIANE+ScidKs1CO+UCaBLZr8nyVaw0OxTu1QOxAvX26M+i6prhPQ9MnKbJ83ldZmER1wvYiFd47F5gxUzCxSrmCSs3XOF1r6O3xrDkcoUK7n0jgIIawJlvgDtizTwHO9frPeHKSC5Wmy98kxpYVapS02QnV8g6VbIg36HfHnuHeiJvovqIl2rSbnOmqKPAgi95CaAjKlvn8ZNTXKuZqa3I74+wIh6MN3u/XQTBhYtt5MffS6Z9S5AQUe4e/6irQv5R33t9fvZ/6Z/WxwzX7mH1VPxOd/L54LSRBLVQnwiPgaeB1qG30D0Q9f0AcOb2VXFkLoL1T4c2VhRV5/tsZ8WWlmr1XEMTncKiJ/6nsXKjVNyTClhhxqFeRAqWnAy9caZz+pN1FrBmfWGu+atcYhd55995rZH/yv9F1F/3jnld4jr1jp9XDzf3Nt2/pLTMe/AQ==</diagram></mxfile>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of drawio I would use mermaidjs. It renders in github and hugo, don't have to commit binary files and can be modified without editing software!

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh that's cool, I didn't know mermaidjs. Will change it!

@mengelbart
Copy link
Author

Makes sense. I can put your suggestion in another, first post tomorrow. But then I would also suggest waiting with merging until the first post is done, too. In case we want to adjust this one to build upon the first.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants