<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Optional Assignments on Computer Networks</title><link>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/</link><description>Recent content in Optional Assignments on Computer Networks</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/index.xml" rel="self" type="application/rss+xml"/><item><title>A3 Chat Server</title><link>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a3/</guid><description>&lt;h1 id="a3---chat-server"&gt;A3 - Chat Server&lt;a class="anchor" href="#a3---chat-server"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;span class="book-badge important"&gt;&lt;span class="book-badge-value"&gt;250 points&lt;/span&gt;&lt;/span&gt;

 &lt;blockquote class="book-hint info"&gt;
 
 &lt;div class="hint-icon"&gt;
 
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-info-icon lucide-info"&gt;&lt;circle cx="12" cy="12" r="10"/&gt;&lt;path d="M12 16v-4"/&gt;&lt;path d="M12 8h.01"/&gt;&lt;/svg&gt;
 
 &lt;/div&gt;
 
 &lt;div class="hint-content"&gt;
 
 &lt;p&gt;&lt;strong&gt;Run the server (your implementation)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python3 -m a3_chat_server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 
 &lt;/blockquote&gt;

&lt;h2 id="description"&gt;Description&lt;a class="anchor" href="#description"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When you implemented your &lt;a href="https://compnet2526.atlarge-research.com/docs/lab-manual/mandatory-assignments/a1/"&gt;Chat Client&lt;/a&gt;, you used the framework-provided server to test your implementation. When working with TCP communication, clients may only communicate with each other via a server actor, that keeps track of connected clients and distributes messages accordingly. It is now your turn to implement the Chat Server powering the Chat Client communication!&lt;/p&gt;</description></item><item><title>A4 HTTP2 Trace Analysis</title><link>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a4/</guid><description>&lt;h1 id="a4---http2-trace-analysis"&gt;A4 - HTTP2 Trace Analysis&lt;a class="anchor" href="#a4---http2-trace-analysis"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;span class="book-badge important"&gt;&lt;span class="book-badge-value"&gt;250 points&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;In this assignment, you will capture and analyze a network trace between your browser and a Web server. Web servers and proxies are one of the most widely deployed server applications, powering the websites that we visit every day. The protocol behind the Web, the &lt;strong&gt;HyperText Transfer Protocol (HTTP)&lt;/strong&gt; started out as a simple plain-text protocol built on top of TCP. The most widely used plain-text version of the protocol is HTTP/1.1.&lt;/p&gt;</description></item><item><title>A5 HTTP Server</title><link>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a5/</guid><description>&lt;h1 id="a5---http-server"&gt;A5 - HTTP Server&lt;a class="anchor" href="#a5---http-server"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;span class="book-badge important"&gt;&lt;span class="book-badge-value"&gt;600 points&lt;/span&gt;&lt;/span&gt;

 &lt;blockquote class="book-hint info"&gt;
 
 &lt;div class="hint-icon"&gt;
 
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-info-icon lucide-info"&gt;&lt;circle cx="12" cy="12" r="10"/&gt;&lt;path d="M12 16v-4"/&gt;&lt;path d="M12 8h.01"/&gt;&lt;/svg&gt;
 
 &lt;/div&gt;
 
 &lt;div class="hint-content"&gt;
 
 &lt;p&gt;&lt;strong&gt;Run the server (your implementation)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python3 -m a5_http_server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 
 &lt;/blockquote&gt;

&lt;p&gt;How many websites do you visit per day? Do you need a specialized program for every one of them? Probably not. It turns out that it has not always been the same. Before the invention of HTTP protocol (the backbone of the web, by Tim Berners Lee) people used different programs to access different parts of the web. What made it possible was the unification of application-layer web protocols.&lt;/p&gt;</description></item><item><title>A6 DNS Server</title><link>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a6/</guid><description>&lt;h1 id="a6---dns-server"&gt;A6 - DNS Server&lt;a class="anchor" href="#a6---dns-server"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;span class="book-badge important"&gt;&lt;span class="book-badge-value"&gt;750 points&lt;/span&gt;&lt;/span&gt;

 &lt;blockquote class="book-hint info"&gt;
 
 &lt;div class="hint-icon"&gt;
 
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-info-icon lucide-info"&gt;&lt;circle cx="12" cy="12" r="10"/&gt;&lt;path d="M12 16v-4"/&gt;&lt;path d="M12 8h.01"/&gt;&lt;/svg&gt;
 
 &lt;/div&gt;
 
 &lt;div class="hint-content"&gt;
 
 &lt;p&gt;&lt;strong&gt;Run the server (your implementation)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python3 -m a6_dns_server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 
 &lt;/blockquote&gt;

&lt;p&gt;How many web pages do you visit in a day? Would you be able to remember all their IP addresses? Probably not. It turns out that humans are bad at remembering arbitrary sequences of numbers, but reasonably good at remembering names. By assigning names to IP addresses, web browsing becomes doable for humans. Instead of having to remember the sequence &lt;code&gt;216.58.211.110&lt;/code&gt;, you only need to remember &lt;code&gt;www.google.com&lt;/code&gt;. Your browser automatically translates this into the correct IP address.&lt;/p&gt;</description></item><item><title>A7 Unreliable Chat Client</title><link>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a7/</guid><description>&lt;h1 id="a7---unreliable-chat-client"&gt;A7 - Unreliable Chat Client&lt;a class="anchor" href="#a7---unreliable-chat-client"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;span class="book-badge important"&gt;&lt;span class="book-badge-value"&gt;850 points&lt;/span&gt;&lt;/span&gt;

 &lt;blockquote class="book-hint info"&gt;
 
 &lt;div class="hint-icon"&gt;
 
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-info-icon lucide-info"&gt;&lt;circle cx="12" cy="12" r="10"/&gt;&lt;path d="M12 16v-4"/&gt;&lt;path d="M12 8h.01"/&gt;&lt;/svg&gt;
 
 &lt;/div&gt;
 
 &lt;div class="hint-content"&gt;
 
 &lt;p&gt;&lt;strong&gt;Run the server&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# First, install the server (only required once)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;~/.local/bin/uv pip install https://compnet2526.atlarge-research.com/pip/framework-0.2.0-py3-none-any.whl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# Second, run the server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;unreliable-server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By default, the server will run in &lt;em&gt;reliable mode&lt;/em&gt;, i.e., no bit flips, bursts, delays, or packet drops will occur. To enable unreliable features, experiment with the options below. A more detailed description of the unreliable features can be found in the &lt;a href="#unreliability"&gt;Unreliability&lt;/a&gt; section.&lt;/p&gt;</description></item><item><title>A8 Multiplayer Game</title><link>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a8/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compnet2526.atlarge-research.com/docs/lab-manual/extra-assignments/a8/</guid><description>&lt;h1 id="a8---multiplayer-game"&gt;A8 - Multiplayer Game&lt;a class="anchor" href="#a8---multiplayer-game"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;span class="book-badge important"&gt;&lt;span class="book-badge-value"&gt;1000 points&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;Online games have evolved over the past decades from simple multiplayer games such as Counter Strike 1.6 to entire metaverse environments such as GTA V Online. Multiplayer games have forever revolutionized entertainment and stand today as one of the most significant areas of distributed system innovation. &lt;/p&gt;
&lt;p&gt;Designing a multiplayer game requires several areas of expertise, ranging from graphics design to physics realism. In this course, we focus on the networking challenges encountered in developing an online game.&lt;/p&gt;</description></item></channel></rss>